Renames project from pz2utils4jsf to mkjsf
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / commands / SearchCommand.java
index a7f8168..9b2cece 100644 (file)
@@ -4,7 +4,6 @@ import javax.enterprise.context.SessionScoped;
 \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
@@ -12,15 +11,12 @@ public class SearchCommand extends Pazpar2Command {
   \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
@@ -29,6 +25,69 @@ public class SearchCommand extends Pazpar2Command {
     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
@@ -75,43 +134,69 @@ public class SearchCommand extends Pazpar2Command {
     }\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