X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Findexdata%2Fmkjsf%2Fpazpar2%2Fcommands%2FSearchCommand.java;h=c094d2421bdd48c89c682fa84a7b33324eb1f5e7;hb=31a027596723261b413d69c74428b176def3627f;hp=749742e74610d64433298564d57ee00bb25d97e7;hpb=ccb28ae8d5d46d29c40bd8b1637522c212b80636;p=mkjsf-moved-to-github.git diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/SearchCommand.java b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/SearchCommand.java index 749742e..c094d24 100644 --- a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/SearchCommand.java +++ b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/SearchCommand.java @@ -1,20 +1,35 @@ package com.indexdata.mkjsf.pazpar2.commands; +import java.util.List; + import javax.enterprise.context.SessionScoped; +import javax.inject.Named; import org.apache.log4j.Logger; -import com.indexdata.mkjsf.pazpar2.state.StateManager; +import com.indexdata.mkjsf.pazpar2.Pz2Service; +import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand; +import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject; -@SessionScoped -public class SearchCommand extends Pazpar2Command { +@SessionScoped @Named +public class SearchCommand extends Pazpar2Command implements ServiceProxyCommand { private static final long serialVersionUID = -1888520867838597236L; private static Logger logger = Logger.getLogger(SearchCommand.class); private SingleTargetFilter singleTargetFilter = null; + + public SearchCommand() { + super("search"); + } - public SearchCommand(StateManager stateMgr) { - super("search",stateMgr); + public ResponseDataObject run() { + logger.info("Running " + getCommandName()); + Pz2Service.get().getStateMgr().hasPendingStateChange("search",false); + Pz2Service.get().getPzresp().resetSearchAndBeyond(); + Pz2Service.get().getPzreq().getRecord().removeParametersInState(); + Pz2Service.get().getPzreq().getShow().setParameterInState(new CommandParameter("start","=",0)); + Pz2Service.get().getSearchClient().setSearchCommand(this); + return super.run(); } public void setQuery(String query) { @@ -26,44 +41,127 @@ public class SearchCommand extends Pazpar2Command { } public void setFilter(String filterExpression) { - setParameter(new CommandParameter("filter","=",filterExpression)); + if (filterExpression != null && filterExpression.length()>0) { + setParameter(new FilterParameter(new Expression(filterExpression))); + } + } + + public void setFilter(String field, String operator, String value, String label) { + setParameter(new FilterParameter(new Expression(field,operator,value,label))); } public String getFilter() { - return getParameter("filter") == null ? null : getParameter("filter").getValueWithExpressions(); + return getParameter("filter") == null ? null : ((FilterParameter)getParameter("filter")).getValueWithExpressions(); + } + + public List getFilters() { + return getParameter("filter").getExpressions(); } - public void addFilter(String filterExpression) { - // TODO: implement - if (hasParameterSet("filter")) { - setFilter(filterExpression); + public void addFilter(String field, String operator, String value, String label) { + if (getParameter("filter") == null) { + setFilter(field + operator + value); } else { - getParameter("filter"); + getParameter("filter").addExpression(new Expression(field,operator,value,(label != null ? label : value))); } - throw new UnsupportedOperationException("removeFilter(filterExpression) yet to be implemented."); } public void removeFilters () { removeParameter("filter"); } - public void removeFilter(String filterExpression) { - // TODO: implement - throw new UnsupportedOperationException("removeFilter(filterExpression) yet to be implemented."); + public void removeFilter(String field, String operator, String value) { + removeExpression("filter",new Expression(field, operator, value, null)); } - + + public void removeFiltersAfter(String field, String operator, String value) { + removeExpressionsAfter("filter",new Expression(field,operator,value,null)); + } + public boolean hasFilter () { return getFilter().length()>0; } - public void setLimit (String limitExpression) { - setParameter(new CommandParameter("limit","=",limitExpression)); + public void setLimit (String limitExpression) { + if (limitExpression != null && limitExpression.length()>0) { + setParameter(new LimitParameter(new Expression(limitExpression))); + } } + public void setLimit(String field, String operator, String value, String label) { + setParameter(new LimitParameter(new Expression(field,operator,value,label))); + } + public String getLimit () { - return getParameterValue("limit"); + return getParameter("limit") == null ? null : ((FilterParameter)getParameter("limit")).getValueWithExpressions(); + } + + public List getLimitExpressions() { + return getParameter("limit").getExpressions(); + } + + public boolean hasLimitExpression(String... expressionFields) { + logger.trace("Checking for limit expression for " + expressionFields); + for (String field : expressionFields) { + if (getLimitExpressions(field) != null && getLimitExpressions(field).size()>0) { + logger.trace("Limit expression found (" + field + ")"); + return true; + } + } + logger.trace("No limit expressions found"); + return false; + } + + public Expression getOneLimitExpression(String expressionField) { + List exprs = getLimitExpressions(expressionField); + if (exprs != null && exprs.size()>0) { + if (exprs.size()>1) { + logger.warn("More that one limit expression found for [" + expressionField + "] but only asked to return the first one"); + } + return exprs.get(0); + } else { + return null; + } + + } + + public List getLimitExpressions(String... expressionFields) { + logger.trace("Checking for limit parameter"); + if (parameters.get("limit")!=null) { + logger.trace("Found"); + return getParameter("limit").getExpressions(expressionFields); + } else { + logger.trace("Not found"); + return null; + } } + + public void addLimit(String field, String operator, String value, String label) { + if (getParameter("limit") == null) { + setLimit(field, operator, value, label); + } else { + addExpression("limit",new Expression(field,operator,value,label)); + } + } + + public void removeLimits() { + removeParameter("limit"); + } + + public void removeLimits(String... fields) { + removeExpressions("limit",fields); + } + + public void removeLimit(String field, String operator, String value) { + removeExpression("limit",new Expression(field, operator, value, null)); + } + + public void removeLimitsAfter(String field, String operator, String value, String... fields) { + removeExpressionsAfter("limit",new Expression(field,operator,value,null),fields); + } + + public void setStartrecs (String startrecs) { setParameter(new CommandParameter("startrecs","=",startrecs)); } @@ -80,24 +178,40 @@ public class SearchCommand extends Pazpar2Command { return getParameterValue("maxrecs"); } - public void setSort () { - setParameter(new CommandParameter("sort","=","sort")); + public void setSort (String sort) { + setParameter(new CommandParameter("sort","=",sort)); } public String getSort () { return getParameterValue("sort"); } + public void setRank (String rank) { + setParameter(new CommandParameter("rank","=",rank)); + } + + public String getRank () { + return getParameterValue("rank"); + } + + public void setMergekey (String mergekey) { + setParameter(new CommandParameter("mergekey","=",mergekey)); + } + + public String getMergekey () { + return getParameterValue("mergekey"); + } + + /** - * Sets a facet, in CQL, to restrict the current results, - * then executes the search + * Sets a facet, in CQL, to restrict the current results * * @param facetKey i.e. 'au' for author * @param term i.e. 'Dickens, Charles' */ public void setFacet(String facetKey, String term) { if (term != null && term.length()>0) { - getParameter("query").addExpression(new Expression(facetKey,"=",term)); + getParameter("query").addExpression(new Expression(facetKey,"=",term,null)); } } @@ -120,8 +234,7 @@ public class SearchCommand extends Pazpar2Command { } /** - * Removes a facet set by setFacet(...), then executes - * the search. + * Removes a facet set by setFacet(...) * * Will not remove facets set by setFacetOnQuery(...) * @@ -130,7 +243,7 @@ public class SearchCommand extends Pazpar2Command { */ public void removeFacet(String facetKey, String term) { if (getParameter("query") != null) { - getParameter("query").removeExpression(new Expression(facetKey,"=",term)); + getParameter("query").removeExpression(new Expression(facetKey,"=",term,null)); } } @@ -150,13 +263,14 @@ public class SearchCommand extends Pazpar2Command { if (hasSingleTargetFilter(new SingleTargetFilter(targetId,targetName))) { logger.debug("Already using target filter " + this.singleTargetFilter.getFilterExpression()); } else { + logger.debug("Setting new single target filter for [" + targetName + "]"); this.singleTargetFilter = new SingleTargetFilter(targetId,targetName); setParameter(new CommandParameter("filter","=",this.singleTargetFilter.getFilterExpression())); } } public SingleTargetFilter getSingleTargetFilter () { - logger.debug("request to get the current single target filter"); + logger.debug("request to get the current single target filter " + singleTargetFilter); return singleTargetFilter; } @@ -164,10 +278,11 @@ public class SearchCommand extends Pazpar2Command { * Removes the current target filter from the search * */ - public void removeSingleTargetFilter () { + public String removeSingleTargetFilter () { logger.debug("Removing target filter " + singleTargetFilter.getFilterExpression()); this.singleTargetFilter = null; - removeParameter("filter"); + removeParameter("filter"); + return null; } /** @@ -178,7 +293,7 @@ public class SearchCommand extends Pazpar2Command { logger.debug("Checking if a single target filter is set: " + (singleTargetFilter != null)); return singleTargetFilter != null; } - + /** * Resolves if the current search command has a target filter - to * be used by the UI for conditional rendering of target filter info. @@ -187,11 +302,12 @@ public class SearchCommand extends Pazpar2Command { * filter */ protected boolean hasSingleTargetFilter(SingleTargetFilter targetFilter) { + logger.debug("Checking if target filter for [" + targetFilter.getTargetName() + "] is set."); return hasSingleTargetFilter() && targetFilter.equals(this.singleTargetFilter); } public SearchCommand copy () { - SearchCommand newCommand = new SearchCommand(stateMgr); + SearchCommand newCommand = new SearchCommand(); for (String parameterName : parameters.keySet()) { newCommand.setParameterInState(parameters.get(parameterName).copy()); } @@ -199,4 +315,14 @@ public class SearchCommand extends Pazpar2Command { return newCommand; } + @Override + public ServiceProxyCommand getSp() { + return this; + } + + @Override + public boolean spOnly() { + return false; + } + }