--- /dev/null
+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