Refactors commands and injection
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / SearchCommand.java
index 749742e..654df45 100644 (file)
@@ -1,21 +1,40 @@
 package com.indexdata.mkjsf.pazpar2.commands;\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.state.StateManager;\r
+import com.indexdata.mkjsf.pazpar2.ClientCommandResponse;\r
+import com.indexdata.mkjsf.pazpar2.HttpResponseWrapper;\r
+import com.indexdata.mkjsf.pazpar2.Pz2Bean;\r
+import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;\r
+import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
+import com.indexdata.mkjsf.pazpar2.data.ResponseParser;\r
 \r
-@SessionScoped\r
-public class SearchCommand extends Pazpar2Command {\r
+@SessionScoped @Named\r
+public class SearchCommand extends Pazpar2Command implements ServiceProxyCommand {\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() {\r
+    super("search");\r
+  }\r
   \r
-  public SearchCommand(StateManager stateMgr) {\r
-    super("search",stateMgr);\r
+  public ResponseDataObject run() {\r
+    logger.info("Running " + getCommandName());\r
+    logger.info("Using client " + Pz2Bean.get().getSearchClient());\r
+    logger.info("Storing responses to " + Pz2Bean.get().getPzresp());\r
+    Pz2Bean.get().getSearchClient().setSearchCommand(this);\r
+    logger.info("Executing command " + getCommandName());\r
+    HttpResponseWrapper httpResponse = Pz2Bean.get().getSearchClient().executeCommand(this);\r
+    ResponseDataObject responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse) httpResponse);\r
+    Pz2Bean.get().getPzresp().put(getCommandName(), responseObject);\r
+    return responseObject;\r
   }\r
+\r
     \r
   public void setQuery(String query) {    \r
     setParameter(new CommandParameter("query","=",query));\r
@@ -35,7 +54,7 @@ public class SearchCommand extends Pazpar2Command {
   \r
   public void addFilter(String filterExpression) {\r
     // TODO: implement\r
-    if (hasParameterSet("filter")) {\r
+    if (hasParameterValue("filter")) {\r
       setFilter(filterExpression);\r
     } else {\r
       getParameter("filter");\r
@@ -80,14 +99,31 @@ public class SearchCommand extends Pazpar2Command {
     return getParameterValue("maxrecs");\r
   }\r
   \r
-  public void setSort () {\r
-    setParameter(new CommandParameter("sort","=","sort"));\r
+  public void setSort (String sort) {\r
+    setParameter(new CommandParameter("sort","=",sort));\r
   }\r
   \r
   public String getSort () {\r
     return getParameterValue("sort");\r
   }\r
   \r
+  public void setRank (String rank) {\r
+    setParameter(new CommandParameter("rank","=",rank));\r
+  }\r
+  \r
+  public String getRank () {\r
+    return getParameterValue("rank");\r
+  }\r
+  \r
+  public void setMergekey (String mergekey) {\r
+    setParameter(new CommandParameter("mergekey","=",mergekey));\r
+  }\r
+  \r
+  public String getMergekey () {\r
+    return getParameterValue("mergekey");\r
+  }\r
+  \r
+  \r
   /**\r
    * Sets a facet, in CQL, to restrict the current results,\r
    * then executes the search \r
@@ -150,13 +186,14 @@ public class SearchCommand extends Pazpar2Command {
     if (hasSingleTargetFilter(new SingleTargetFilter(targetId,targetName))) {\r
       logger.debug("Already using target filter " + this.singleTargetFilter.getFilterExpression());\r
     } else {      \r
+      logger.debug("Setting new single target filter for [" + targetName + "]");\r
       this.singleTargetFilter = new SingleTargetFilter(targetId,targetName);\r
       setParameter(new CommandParameter("filter","=",this.singleTargetFilter.getFilterExpression()));            \r
     }    \r
   }\r
 \r
   public SingleTargetFilter getSingleTargetFilter () {\r
-    logger.debug("request to get the current single target filter");\r
+    logger.debug("request to get the current single target filter " + singleTargetFilter);\r
     return singleTargetFilter;\r
   }\r
    \r
@@ -164,10 +201,11 @@ public class SearchCommand extends Pazpar2Command {
    * Removes the current target filter from the search\r
    * \r
    */\r
-  public void removeSingleTargetFilter () {\r
+  public String removeSingleTargetFilter () {\r
     logger.debug("Removing target filter " + singleTargetFilter.getFilterExpression());\r
     this.singleTargetFilter = null;\r
-    removeParameter("filter");             \r
+    removeParameter("filter");\r
+    return null;\r
   }\r
   \r
   /**\r
@@ -178,7 +216,7 @@ public class SearchCommand extends Pazpar2Command {
     logger.debug("Checking if a single target filter is set: " + (singleTargetFilter != null));\r
     return singleTargetFilter != null;    \r
   }\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
@@ -187,11 +225,12 @@ public class SearchCommand extends Pazpar2Command {
    * filter\r
    */\r
   protected boolean hasSingleTargetFilter(SingleTargetFilter targetFilter) {\r
+    logger.debug("Checking if target filter for [" + targetFilter.getTargetName() + "] is set.");\r
     return hasSingleTargetFilter() && targetFilter.equals(this.singleTargetFilter);\r
   }\r
     \r
   public SearchCommand copy () {\r
-    SearchCommand newCommand = new SearchCommand(stateMgr);\r
+    SearchCommand newCommand = new SearchCommand();\r
     for (String parameterName : parameters.keySet()) {\r
       newCommand.setParameterInState(parameters.get(parameterName).copy());      \r
     }\r
@@ -199,4 +238,14 @@ public class SearchCommand extends Pazpar2Command {
     return newCommand;\r
   }\r
 \r
+  @Override\r
+  public ServiceProxyCommand getSp() {\r
+    return this;\r
+  }\r
+\r
+  @Override\r
+  public boolean spOnly() {\r
+    return false;\r
+  }\r
+\r
 }\r