\r
import org.apache.log4j.Logger;\r
\r
-import com.indexdata.pz2utils4jsf.pazpar2.Expression;\r
import com.indexdata.pz2utils4jsf.pazpar2.state.StateManager;\r
\r
@SessionScoped\r
\r
private static final long serialVersionUID = -1888520867838597236L;\r
private static Logger logger = Logger.getLogger(SearchCommand.class);\r
+ private SingleTargetFilter singleTargetFilter = null;\r
\r
public SearchCommand(StateManager stateMgr) {\r
super("search",stateMgr);\r
}\r
- \r
- public void setSession (String sessionId) {\r
- setParameter(new CommandParameter("session","=",sessionId));\r
- }\r
- \r
+ \r
public void setQuery(String query) { \r
setParameter(new CommandParameter("query","=",query));\r
}\r
return getParameter("query") == null ? null : getParameter("query").getValueWithExpressions();\r
}\r
\r
+ public void setFilter(String filterExpression) {\r
+ setParameter(new CommandParameter("filter","=",filterExpression));\r
+ }\r
+ \r
+ public String getFilter() {\r
+ return getParameter("filter") == null ? null : getParameter("filter").getValueWithExpressions();\r
+ }\r
+ \r
+ public void addFilter(String filterExpression) {\r
+ // TODO: implement\r
+ if (hasParameterSet("filter")) {\r
+ setFilter(filterExpression);\r
+ } else {\r
+ getParameter("filter");\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
+ }\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
+ }\r
+ \r
+ public String getLimit () {\r
+ return getParameterValue("limit");\r
+ }\r
+ \r
+ public void setStartrecs (String startrecs) {\r
+ setParameter(new CommandParameter("startrecs","=",startrecs));\r
+ }\r
+ \r
+ public String getStartrecs () {\r
+ return getParameterValue("startrecs");\r
+ }\r
+ \r
+ public void setMaxrecs (String maxrecs) {\r
+ setParameter(new CommandParameter("maxrecs","=",maxrecs));\r
+ }\r
+ \r
+ public String getMaxrecs () {\r
+ return getParameterValue("maxrecs");\r
+ }\r
+ \r
+ public void setSort () {\r
+ setParameter(new CommandParameter("sort","=","sort"));\r
+ }\r
+ \r
+ public String getSort () {\r
+ return getParameterValue("sort");\r
+ }\r
+ \r
/**\r
* Sets a facet, in CQL, to restrict the current results,\r
* then executes the search \r
}\r
}\r
\r
- public void setFilter(String filterExpression) {\r
- setParameter(new CommandParameter("filter","=",filterExpression));\r
- }\r
\r
- public String getFilter() {\r
- return getParameter("filter") == null ? null : getParameter("filter").getValueWithExpressions();\r
+ /**\r
+ * Adds a single target filter to restrict the current query by, \r
+ * then executes the current search.\r
+ * \r
+ * This is a special case of the general setFilter function, \r
+ * allowing to associate a descriptive target name with the \r
+ * filter expression for display in UI. \r
+ * \r
+ * @param targetId pazpar2's ID for the target to limit by\r
+ * @param targetName a descriptive name for the target\r
+ */\r
+ public void setSingleTargetFilter (String targetId, String targetName) { \r
+ if (hasSingleTargetFilter(new SingleTargetFilter(targetId,targetName))) {\r
+ logger.debug("Already using target filter " + this.singleTargetFilter.getFilterExpression());\r
+ } else { \r
+ this.singleTargetFilter = new SingleTargetFilter(targetId,targetName);\r
+ setParameter(new CommandParameter("filter","=",this.singleTargetFilter.getFilterExpression())); \r
+ } \r
}\r
\r
- \r
- public void setLimit (String limit) {\r
- \r
+ public SingleTargetFilter getSingleTargetFilter () {\r
+ logger.debug("request to get the current single target filter");\r
+ return singleTargetFilter;\r
}\r
- \r
- public void addFilter(String filterExpression) {\r
- if (hasParameterSet("filter")) {\r
- setFilter(filterExpression);\r
- } else {\r
- //TODO\r
- getParameter("filter");\r
- }\r
+ \r
+ /**\r
+ * Removes the current target filter from the search\r
+ * \r
+ */\r
+ public void removeSingleTargetFilter () {\r
+ logger.debug("Removing target filter " + singleTargetFilter.getFilterExpression());\r
+ this.singleTargetFilter = null;\r
+ removeParameter("filter"); \r
}\r
\r
- public void removeFilters () {\r
- \r
+ /**\r
+ * \r
+ * @return The target filter set on the current search command\r
+ */\r
+ public boolean hasSingleTargetFilter() {\r
+ logger.debug("Checking if a single target filter is set: " + (singleTargetFilter != null));\r
+ return singleTargetFilter != null; \r
}\r
- \r
- public void removeFilter(String filterExpression) {\r
- \r
+\r
+ /**\r
+ * Resolves if the current search command has a target filter - to\r
+ * be used by the UI for conditional rendering of target filter info.\r
+ * \r
+ * @return true if the current search command is limited by a target \r
+ * filter\r
+ */\r
+ protected boolean hasSingleTargetFilter(SingleTargetFilter targetFilter) {\r
+ return hasSingleTargetFilter() && targetFilter.equals(this.singleTargetFilter);\r
}\r
- \r
+ \r
public SearchCommand copy () {\r
SearchCommand newCommand = new SearchCommand(stateMgr);\r
for (String parameterName : parameters.keySet()) {\r
- newCommand.setParameterSilently(parameters.get(parameterName).copy()); \r
- } \r
+ newCommand.setParameterInState(parameters.get(parameterName).copy()); \r
+ }\r
+ newCommand.singleTargetFilter = this.singleTargetFilter;\r
return newCommand;\r
}\r
\r
-\r
}\r