Renames pz2utils4jsf package to mkjsf
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / Pazpar2Command.java
diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/Pazpar2Command.java b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/Pazpar2Command.java
new file mode 100644 (file)
index 0000000..4fbe159
--- /dev/null
@@ -0,0 +1,148 @@
+package com.indexdata.mkjsf.pazpar2.commands;\r
+\r
+import java.io.Serializable;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import com.indexdata.mkjsf.pazpar2.state.StateManager;\r
+\r
+public 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 Map<String,CommandParameter> parameters = new HashMap<String,CommandParameter>();\r
+  \r
+  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
+  }\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
+  \r
+  public String getName() {\r
+    return name;\r
+  }\r
+    \r
+  public void setParameter (CommandParameter parameter) {\r
+    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
+  }\r
+  \r
+  public void setParameters (CommandParameter... params) {\r
+    Pazpar2Command copy = this.copy();\r
+    for (CommandParameter param : params) {\r
+      logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
+      copy.parameters.put(param.getName(),param);\r
+    }\r
+    stateMgr.checkIn(copy);\r
+  }\r
+  \r
+  public void setParametersInState (CommandParameter... params) {    \r
+    for (CommandParameter param : params) {\r
+      logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");\r
+      parameters.put(param.getName(),param);\r
+    }    \r
+  }\r
+    \r
+  public void setParameterInState (CommandParameter parameter) {\r
+    logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");\r
+    parameters.put(parameter.getName(),parameter);    \r
+  }\r
+  \r
+  \r
+  public CommandParameter getParameter (String name) {\r
+    return parameters.get(name);\r
+  }\r
+  \r
+  public void removeParameter (String name) {\r
+    Pazpar2Command copy = this.copy();\r
+    copy.parameters.remove(name);\r
+    stateMgr.checkIn(copy);\r
+  }\r
+  \r
+  public void removeParameters() {\r
+    Pazpar2Command copy = this.copy();\r
+    copy.parameters = new HashMap<String,CommandParameter>();\r
+    stateMgr.checkIn(copy);\r
+  }\r
+  \r
+  public void removeParametersInState() {\r
+    parameters = new HashMap<String,CommandParameter>();    \r
+  }\r
+\r
+  \r
+  public boolean hasParameters () {\r
+    return (parameters.keySet().size()>0);\r
+  }\r
+  \r
+  public boolean hasParameterSet(String parameterName) {\r
+    return (parameters.get(parameterName) != null);\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
+    }\r
+    return queryString.toString();\r
+  } \r
+    \r
+  public String getValueWithExpressions() {    \r
+    StringBuilder value = new StringBuilder("");\r
+    for (CommandParameter parameter : parameters.values()) {\r
+      value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());       \r
+   }\r
+    return value.toString();\r
+  }\r
+  \r
+  @Override\r
+  public boolean equals (Object otherCommand) {\r
+    return\r
+        ((otherCommand instanceof Pazpar2Command)\r
+         && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));\r
+  }\r
+  \r
+  @Override\r
+  public int hashCode () {\r
+    return getValueWithExpressions().hashCode();\r
+  }\r
+  \r
+  public String toString () {\r
+    return parameters.toString();\r
+  }\r
+\r
+  public String getParameterValue(String parameterName) {\r
+    return getParameter(parameterName).getValueWithExpressions();\r
+    \r
+  }\r
+\r
+  public String getUrlEncodedParameterValue(String parameterName) {\r
+    return getParameter(parameterName).getEncodedQueryString();\r
+  }\r
+  \r
+  public void setSession (String sessionId) {\r
+    setParameter(new CommandParameter("session","=",sessionId));\r
+  }\r
+  \r
+  public String getSession() {\r
+    return getParameterValue("session");\r
+  }  \r
+}\r