Adds support for offset and binary parameters
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / Pazpar2Command.java
index 4fbe159..8176512 100644 (file)
@@ -6,34 +6,24 @@ import java.util.Map;
 \r
 import org.apache.log4j.Logger;\r
 \r
+import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;\r
 import com.indexdata.mkjsf.pazpar2.state.StateManager;\r
 \r
-public class Pazpar2Command implements Serializable  {\r
+public abstract class Pazpar2Command implements Serializable  {\r
   \r
   private static Logger logger = Logger.getLogger(Pazpar2Command.class);\r
   private static final long serialVersionUID = -6825491856480675917L;   \r
-  private String name = "";\r
+  protected String name = "";\r
   protected Map<String,CommandParameter> parameters = new HashMap<String,CommandParameter>();\r
   \r
-  StateManager stateMgr;\r
+  protected StateManager stateMgr;\r
     \r
   public Pazpar2Command (String name, StateManager stateMgr) {\r
     this.name = name;\r
-    if (stateMgr == null) {\r
-      // Sets throw-away state\r
-      this.stateMgr = new StateManager();\r
-    } else {\r
-      this.stateMgr = stateMgr;\r
-    }\r
+    this.stateMgr = stateMgr;\r
   }\r
       \r
-  public Pazpar2Command copy () {\r
-    Pazpar2Command newCommand = new Pazpar2Command(name,stateMgr);\r
-    for (String parameterName : parameters.keySet()) {\r
-      newCommand.setParameterInState(parameters.get(parameterName).copy());      \r
-    }    \r
-    return newCommand;\r
-  }\r
+  public abstract Pazpar2Command copy ();\r
   \r
   public String getName() {\r
     return name;\r
@@ -43,7 +33,7 @@ public class Pazpar2Command implements Serializable  {
     Pazpar2Command copy = this.copy();\r
     logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");\r
     copy.parameters.put(parameter.getName(),parameter);\r
-    stateMgr.checkIn(copy);\r
+    checkInState(copy);\r
   }\r
   \r
   public void setParameters (CommandParameter... params) {\r
@@ -52,7 +42,7 @@ public class Pazpar2Command implements Serializable  {
       logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
       copy.parameters.put(param.getName(),param);\r
     }\r
-    stateMgr.checkIn(copy);\r
+    checkInState(copy);\r
   }\r
   \r
   public void setParametersInState (CommandParameter... params) {    \r
@@ -75,13 +65,13 @@ public class Pazpar2Command implements Serializable  {
   public void removeParameter (String name) {\r
     Pazpar2Command copy = this.copy();\r
     copy.parameters.remove(name);\r
-    stateMgr.checkIn(copy);\r
+    checkInState(copy);\r
   }\r
   \r
   public void removeParameters() {\r
     Pazpar2Command copy = this.copy();\r
     copy.parameters = new HashMap<String,CommandParameter>();\r
-    stateMgr.checkIn(copy);\r
+    checkInState(copy);\r
   }\r
   \r
   public void removeParametersInState() {\r
@@ -93,14 +83,16 @@ public class Pazpar2Command implements Serializable  {
     return (parameters.keySet().size()>0);\r
   }\r
   \r
-  public boolean hasParameterSet(String parameterName) {\r
-    return (parameters.get(parameterName) != null);\r
+  public boolean hasParameterValue(String parameterName) {\r
+    return (parameters.get(parameterName) != null && parameters.get(parameterName).hasValue());\r
   }\r
   \r
   public String getEncodedQueryString () {\r
     StringBuilder queryString = new StringBuilder("command="+name);\r
     for (CommandParameter parameter : parameters.values()) {\r
-       queryString.append("&"+parameter.getEncodedQueryString());       \r
+      if (parameter.hasValue()) {\r
+        queryString.append("&"+parameter.getEncodedQueryString());\r
+      }\r
     }\r
     return queryString.toString();\r
   } \r
@@ -108,7 +100,9 @@ public class Pazpar2Command implements Serializable  {
   public String getValueWithExpressions() {    \r
     StringBuilder value = new StringBuilder("");\r
     for (CommandParameter parameter : parameters.values()) {\r
-      value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());       \r
+      if (parameter.hasValue()) {\r
+        value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());\r
+      }\r
    }\r
     return value.toString();\r
   }\r
@@ -130,7 +124,7 @@ public class Pazpar2Command implements Serializable  {
   }\r
 \r
   public String getParameterValue(String parameterName) {\r
-    return getParameter(parameterName).getValueWithExpressions();\r
+    return getParameter(parameterName)==null ? "" : getParameter(parameterName).getValueWithExpressions();\r
     \r
   }\r
 \r
@@ -144,5 +138,16 @@ public class Pazpar2Command implements Serializable  {
   \r
   public String getSession() {\r
     return getParameterValue("session");\r
-  }  \r
+  } \r
+  \r
+  private void checkInState(Pazpar2Command command) {\r
+    if (stateMgr != null) {\r
+      stateMgr.checkIn(command);\r
+    } else {\r
+      logger.info("Command '" + command.getName() + "' not affecting state (history) as no state manager was defined for this command.");\r
+    }\r
+  }\r
+  \r
+  public abstract ServiceProxyCommand getSp();\r
+  \r
 }\r