search
Pazpar2 command, referenced as: pzreq.search
+ *
+ * @author Niels Erik
+ *
+ */
+@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;
+ private static Logger logger = Logger.getLogger(SearchCommand.class);
+
+ 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();
}
-
+
+ /**
+ * Sets the query
parameter. See Pazpar2 documentation for details.
+ */
public void setQuery(String query) {
- setParameter(new CommandParameter("query","=",query));
+ setParameter(new QueryParameter("query","=",query));
}
- public String getQuery () {
- return getParameter("query") == null ? null : getParameter("query").getValueWithExpressions();
+ public void setBooleanOperatorForQuery(String operator) {
+ Pazpar2Command copy = this.copy();
+ ((QueryParameter) getParameter("query")).setBooleanOperator(operator);
+ checkInState(copy);
}
+ /**
+ * Returns the simple part of the query
parameter value, excluding parts that
+ * were added as expressions (that is, not set with setQuery()
).
+ */
+ public String getQuery () {
+ return getParameter("query") == null ? null : ((QueryParameter)getParameter("query")).getSimpleValue();
+ }
+
+ /**
+ * Returns the complete query
parameter value, including expressions.
+ */
+ public String getExtendedQuery () {
+ return getParameter("query") == null ? null : ((QueryParameter)getParameter("query")).getValueWithExpressions();
+ }
+
+ /**
+ * Sets the filter
parameter. See Pazpar2 documentation for details.
+ */
public void setFilter(String filterExpression) {
- setParameter(new CommandParameter("filter","=",filterExpression));
+ if (filterExpression != null && filterExpression.length()>0) {
+ if (filterExpression.split("[=~]").length==1) {
+ removeFilters(filterExpression.split("[=~]")[0]);
+ } else if (filterExpression.split("[=~]").length==2) {
+ setParameter(new FilterParameter(new Expression(filterExpression)));
+ } else {
+ logger.error("Could not parse filter expression [" + filterExpression + "]");
+ }
+ }
+ }
+
+ /**
+ * Sets the filter
parameter. See Pazpar2 documentation for details.
+ */
+ public void setFilter(String field, String operator, String value, String label) {
+ setParameter(new FilterParameter(new Expression(field,operator,value,label)));
+ }
+
+ /**
+ * Checks if there are any filter expressions matching any of the given expressionFields
+ * @param expressionFields expression fields (left-of-operator entities) to look for
+ * @return true if expression(s) found with any of expressionFields
+ */
+ public boolean hasFilterExpression(String... expressionFields) {
+ logger.trace("Checking for filter expression for " + Arrays.deepToString(expressionFields));
+ for (String field : expressionFields) {
+ if (getFilterExpressions(field) != null && getFilterExpressions(field).size()>0) {
+ logger.trace("Filter expression found (" + field + ")");
+ return true;
+ }
+ }
+ logger.trace("No filter expressions found");
+ return false;
}
+
+ /**
+ * Returns the filter
parameter value.
+ */
public String getFilter() {
- return getParameter("filter") == null ? null : getParameter("filter").getValueWithExpressions();
+ return getParameter("filter") == null ? null : ((FilterParameter)getParameter("filter")).getValueWithExpressions();
+ }
+
+ /**
+ * Returns the first filter expression of the given type
+ * @param expressionField expression field (left-of-operator entity) to look for
+ * @return the first filter expression found with the field expressionField
or null if none found
+ */
+ public Expression getOneFilterExpression(String expressionField) {
+ ListfieldsToRemove
+ * @param fieldsToRemove
+ */
+ public void removeFilters(String... fieldsToRemove) {
+ removeExpressions("filter",fieldsToRemove);
+ }
+
+ /**
+ * Removes filter expressions coming after the expression matching the provided filter expression,
+ * if they have a field listed in fieldsToRemove
. To be used for bread crumb like UI
+ * controls.
+ *
+ * @param field
+ * @param operator
+ * @param value
+ * @param fieldsToRemove
+ */
+ public void removeFiltersAfter(String field, String operator, String value, String... fieldsToRemove) {
+ removeExpressionsAfter("filter",new Expression(field,operator,value,null),fieldsToRemove);
}
- public boolean hasFilter () {
- return getFilter().length()>0;
+ /**
+ * Sets the limit
parameter. See Pazpar2 documentation for details.
+ */
+ public void setLimit (String limitExpression) {
+ if (limitExpression != null && limitExpression.length()>0) {
+ setParameter(new LimitParameter(new Expression(limitExpression)));
+ }
}
- public void setLimit (String limitExpression) {
- setParameter(new CommandParameter("limit","=",limitExpression));
+ /**
+ * Sets the limit
parameter including a label. See Pazpar2 documentation for details.
+ */
+ public void setLimit(String field, String operator, String value, String label) {
+ setParameter(new LimitParameter(new Expression(field,operator,value,label)));
}
-
+
+ /**
+ * Returns the limit
parameter value.
+ */
public String getLimit () {
- return getParameterValue("limit");
+ return getParameter("limit") == null ? null : ((LimitParameter)getParameter("limit")).getValueWithExpressions();
}
-
+
+ /**
+ * Checks if there are any limit expressions matching any of the given expressionFields
+ * @param expressionFields expression fields (left-of-operator entities) to look for
+ * @return true if expression(s) found with any of expressionFields
+ */
+ public boolean hasLimitExpression(String... expressionFields) {
+ logger.trace("Checking for limit expression for " + Arrays.deepToString(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;
+ }
+
+ /**
+ * Returns the first limit expression of the given type
+ * @param expressionField expression field (left-of-operator entity) to look for
+ * @return the first limit expression found with the field expressionField
or null if none found
+ */
+ public Expression getOneLimitExpression(String expressionField) {
+ ListexpressionFields
+ *
+ * @param expressionFields limit expressions to look for
+ */
+ public ListfieldsToRemove
+ * @param fieldsToRemove
+ */
+ public void removeLimits(String... fieldsToRemove) {
+ removeExpressions("limit",fieldsToRemove);
+ }
+
+ /**
+ * Removes a limit expression by exact attributes
+ *
+ * @param field
+ * @param operator
+ * @param value
+ */
+ public void removeLimit(String field, String operator, String value) {
+ removeExpression("limit",new Expression(field, operator, value, null));
+ }
+
+ /**
+ * Removes limit expressions coming after the provided limit expression, if they have a field listed in
+ * fieldsToRemove
. To be used for bread crumb like UI controls.
+ *
+ * @param field
+ * @param operator
+ * @param value
+ * @param fieldsToRemove
+ */
+ public void removeLimitsAfter(String field, String operator, String value, String... fieldsToRemove) {
+ removeExpressionsAfter("limit",new Expression(field,operator,value,null),fieldsToRemove);
+ }
+
+
+ /**
+ * Sets the startrecs
parameter. See Pazpar2 documentation for details.
+ */
public void setStartrecs (String startrecs) {
setParameter(new CommandParameter("startrecs","=",startrecs));
}
+ /**
+ * Returns the startrecs
parameter value.
+ */
public String getStartrecs () {
return getParameterValue("startrecs");
}
+ /**
+ * Sets the maxrecs
parameter. See Pazpar2 documentation for details.
+ */
public void setMaxrecs (String maxrecs) {
setParameter(new CommandParameter("maxrecs","=",maxrecs));
}
+ /**
+ * Returns the maxrecs
parameter value.
+ */
public String getMaxrecs () {
return getParameterValue("maxrecs");
}
- public void setSort () {
- setParameter(new CommandParameter("sort","=","sort"));
+ /**
+ * Sets the sort
parameter. See Pazpar2 documentation for details.
+ */
+ public void setSort (String sort) {
+ setParameter(new CommandParameter("sort","=",sort));
}
+ /**
+ * Returns the sort
parameter value.
+ */
public String getSort () {
return getParameterValue("sort");
}
/**
- * Sets a facet, in CQL, to restrict the current results,
- * then executes the search
+ * Sets the rank
parameter. See Pazpar2 documentation for details.
+ */
+ public void setRank (String rank) {
+ setParameter(new CommandParameter("rank","=",rank));
+ }
+
+ /**
+ * Returns the rank
parameter value.
+ */
+ public String getRank () {
+ return getParameterValue("rank");
+ }
+
+ /**
+ * Sets the mergekey
parameter. See Pazpar2 documentation for details.
+ */
+ public void setMergekey (String mergekey) {
+ setParameter(new CommandParameter("mergekey","=",mergekey));
+ }
+
+ /**
+ * Returns the mergekey
parameter value.
+ */
+ public String getMergekey () {
+ return getParameterValue("mergekey");
+ }
+
+
+ /**
+ * Adds an expression - for instance a facet criterion, with an optional label - to the query parameter
*
- * @param facetKey i.e. 'au' for author
- * @param term i.e. 'Dickens, Charles'
+ * Example:
+ *{au}{=}{"Steinbeck, John"}{Steinbeck, John}
+ *