package com.indexdata.mkjsf.pazpar2.commands;\r
\r
+import java.util.List;\r
+\r
import javax.enterprise.context.SessionScoped;\r
import javax.inject.Named;\r
\r
import org.apache.log4j.Logger;\r
\r
-import com.indexdata.mkjsf.pazpar2.Pz2Bean;\r
+import com.indexdata.mkjsf.pazpar2.Pz2Service;\r
import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;\r
import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
\r
\r
public ResponseDataObject run() {\r
logger.info("Running " + getCommandName());\r
- Pz2Bean.get().getStateMgr().hasPendingStateChange("search",false);\r
- Pz2Bean.get().getPzresp().resetSearchAndBeyond();\r
- Pz2Bean.get().getPzreq().getRecord().removeParametersInState(); \r
- Pz2Bean.get().getPzreq().getShow().setParameterInState(new CommandParameter("start","=",0)); \r
- Pz2Bean.get().getSearchClient().setSearchCommand(this);\r
+ Pz2Service.get().getStateMgr().hasPendingStateChange("search",false);\r
+ Pz2Service.get().getPzresp().resetSearchAndBeyond();\r
+ Pz2Service.get().getPzreq().getRecord().removeParametersInState(); \r
+ Pz2Service.get().getPzreq().getShow().setParameterInState(new CommandParameter("start","=",0)); \r
+ Pz2Service.get().getSearchClient().setSearchCommand(this);\r
return super.run();\r
}\r
-\r
\r
public void setQuery(String query) { \r
setParameter(new CommandParameter("query","=",query));\r
}\r
\r
public void setFilter(String filterExpression) {\r
- setParameter(new CommandParameter("filter","=",filterExpression));\r
+ if (filterExpression != null && filterExpression.length()>0) {\r
+ setParameter(new FilterParameter(new Expression(filterExpression)));\r
+ }\r
+ }\r
+ \r
+ public void setFilter(String field, String operator, String value, String label) {\r
+ setParameter(new FilterParameter(new Expression(field,operator,value,label)));\r
}\r
\r
public String getFilter() {\r
- return getParameter("filter") == null ? null : getParameter("filter").getValueWithExpressions();\r
+ return getParameter("filter") == null ? null : ((FilterParameter)getParameter("filter")).getValueWithExpressions();\r
}\r
\r
- public void addFilter(String filterExpression) {\r
- // TODO: implement\r
- if (hasParameterValue("filter")) {\r
- setFilter(filterExpression);\r
+ public List<Expression> getFilters() {\r
+ return getParameter("filter").getExpressions();\r
+ }\r
+ \r
+ public void addFilter(String field, String operator, String value, String label) {\r
+ if (getParameter("filter") == null) {\r
+ setFilter(field + operator + value);\r
} else {\r
- getParameter("filter");\r
+ getParameter("filter").addExpression(new Expression(field,operator,value,(label != null ? label : value)));\r
}\r
- throw new UnsupportedOperationException("removeFilter(filterExpression) yet to be implemented.");\r
}\r
\r
public void removeFilters () {\r
removeParameter("filter");\r
}\r
\r
- public void removeFilter(String filterExpression) {\r
- // TODO: implement\r
- throw new UnsupportedOperationException("removeFilter(filterExpression) yet to be implemented.");\r
+ public void removeFilter(String field, String operator, String value) {\r
+ removeExpression("filter",new Expression(field, operator, value, null));\r
}\r
-\r
+ \r
+ public void removeFiltersAfter(String field, String operator, String value) {\r
+ removeExpressionsAfter("filter",new Expression(field,operator,value,null));\r
+ }\r
+ \r
public boolean hasFilter () {\r
return getFilter().length()>0;\r
}\r
\r
- public void setLimit (String limitExpression) {\r
- setParameter(new CommandParameter("limit","=",limitExpression));\r
+ public void setLimit (String limitExpression) { \r
+ if (limitExpression != null && limitExpression.length()>0) {\r
+ setParameter(new LimitParameter(new Expression(limitExpression)));\r
+ }\r
}\r
\r
+ public void setLimit(String field, String operator, String value, String label) {\r
+ setParameter(new LimitParameter(new Expression(field,operator,value,label)));\r
+ }\r
+ \r
public String getLimit () {\r
- return getParameterValue("limit");\r
+ return getParameter("limit") == null ? null : ((FilterParameter)getParameter("limit")).getValueWithExpressions(); \r
+ }\r
+ \r
+ public List<Expression> getLimitExpressions() {\r
+ return getParameter("limit").getExpressions();\r
+ }\r
+ \r
+ public boolean hasLimitExpression(String... expressionFields) {\r
+ logger.trace("Checking for limit expression for " + expressionFields);\r
+ for (String field : expressionFields) {\r
+ if (getLimitExpressions(field) != null && getLimitExpressions(field).size()>0) {\r
+ logger.trace("Limit expression found (" + field + ")");\r
+ return true;\r
+ } \r
+ }\r
+ logger.trace("No limit expressions found");\r
+ return false;\r
+ }\r
+ \r
+ public Expression getOneLimitExpression(String expressionField) {\r
+ List<Expression> exprs = getLimitExpressions(expressionField);\r
+ if (exprs != null && exprs.size()>0) {\r
+ if (exprs.size()>1) {\r
+ logger.warn("More that one limit expression found for [" + expressionField + "] but only asked to return the first one");\r
+ }\r
+ return exprs.get(0);\r
+ } else {\r
+ return null;\r
+ }\r
+ \r
}\r
+ \r
+ public List<Expression> getLimitExpressions(String... expressionFields) {\r
+ logger.trace("Checking for limit parameter");\r
+ if (parameters.get("limit")!=null) {\r
+ logger.trace("Found");\r
+ return getParameter("limit").getExpressions(expressionFields);\r
+ } else {\r
+ logger.trace("Not found");\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ public void addLimit(String field, String operator, String value, String label) {\r
+ if (getParameter("limit") == null) {\r
+ setLimit(field, operator, value, label);\r
+ } else {\r
+ addExpression("limit",new Expression(field,operator,value,label));\r
\r
+ }\r
+ }\r
+ \r
+ public void removeLimits() {\r
+ removeParameter("limit");\r
+ }\r
+ \r
+ public void removeLimits(String... fields) { \r
+ removeExpressions("limit",fields); \r
+ }\r
+ \r
+ public void removeLimit(String field, String operator, String value) {\r
+ removeExpression("limit",new Expression(field, operator, value, null)); \r
+ }\r
+ \r
+ public void removeLimitsAfter(String field, String operator, String value, String... fields) { \r
+ removeExpressionsAfter("limit",new Expression(field,operator,value,null),fields); \r
+ }\r
+\r
+ \r
public void setStartrecs (String startrecs) {\r
setParameter(new CommandParameter("startrecs","=",startrecs));\r
}\r
\r
\r
/**\r
- * Sets a facet, in CQL, to restrict the current results,\r
- * then executes the search \r
+ * Sets a facet, in CQL, to restrict the current results\r
* \r
* @param facetKey i.e. 'au' for author\r
* @param term i.e. 'Dickens, Charles'\r
*/\r
public void setFacet(String facetKey, String term) {\r
if (term != null && term.length()>0) { \r
- getParameter("query").addExpression(new Expression(facetKey,"=",term)); \r
+ getParameter("query").addExpression(new Expression(facetKey,"=",term,null)); \r
} \r
}\r
\r
}\r
\r
/**\r
- * Removes a facet set by setFacet(...), then executes\r
- * the search.\r
+ * Removes a facet set by setFacet(...)\r
* \r
* Will not remove facets set by setFacetOnQuery(...)\r
* \r
*/\r
public void removeFacet(String facetKey, String term) {\r
if (getParameter("query") != null) {\r
- getParameter("query").removeExpression(new Expression(facetKey,"=",term));\r
+ getParameter("query").removeExpression(new Expression(facetKey,"=",term,null));\r
}\r
}\r
\r