Renames pz2utils4jsf package to mkjsf
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / Pazpar2Command.java
1 package com.indexdata.mkjsf.pazpar2.commands;\r
2 \r
3 import java.io.Serializable;\r
4 import java.util.HashMap;\r
5 import java.util.Map;\r
6 \r
7 import org.apache.log4j.Logger;\r
8 \r
9 import com.indexdata.mkjsf.pazpar2.state.StateManager;\r
10 \r
11 public class Pazpar2Command implements Serializable  {\r
12   \r
13   private static Logger logger = Logger.getLogger(Pazpar2Command.class);\r
14   private static final long serialVersionUID = -6825491856480675917L;   \r
15   private String name = "";\r
16   protected Map<String,CommandParameter> parameters = new HashMap<String,CommandParameter>();\r
17   \r
18   StateManager stateMgr;\r
19     \r
20   public Pazpar2Command (String name, StateManager stateMgr) {\r
21     this.name = name;\r
22     if (stateMgr == null) {\r
23       // Sets throw-away state\r
24       this.stateMgr = new StateManager();\r
25     } else {\r
26       this.stateMgr = stateMgr;\r
27     }\r
28   }\r
29       \r
30   public Pazpar2Command copy () {\r
31     Pazpar2Command newCommand = new Pazpar2Command(name,stateMgr);\r
32     for (String parameterName : parameters.keySet()) {\r
33       newCommand.setParameterInState(parameters.get(parameterName).copy());      \r
34     }    \r
35     return newCommand;\r
36   }\r
37   \r
38   public String getName() {\r
39     return name;\r
40   }\r
41     \r
42   public void setParameter (CommandParameter parameter) {\r
43     Pazpar2Command copy = this.copy();\r
44     logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");\r
45     copy.parameters.put(parameter.getName(),parameter);\r
46     stateMgr.checkIn(copy);\r
47   }\r
48   \r
49   public void setParameters (CommandParameter... params) {\r
50     Pazpar2Command copy = this.copy();\r
51     for (CommandParameter param : params) {\r
52       logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
53       copy.parameters.put(param.getName(),param);\r
54     }\r
55     stateMgr.checkIn(copy);\r
56   }\r
57   \r
58   public void setParametersInState (CommandParameter... params) {    \r
59     for (CommandParameter param : params) {\r
60       logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");\r
61       parameters.put(param.getName(),param);\r
62     }    \r
63   }\r
64     \r
65   public void setParameterInState (CommandParameter parameter) {\r
66     logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");\r
67     parameters.put(parameter.getName(),parameter);    \r
68   }\r
69   \r
70   \r
71   public CommandParameter getParameter (String name) {\r
72     return parameters.get(name);\r
73   }\r
74   \r
75   public void removeParameter (String name) {\r
76     Pazpar2Command copy = this.copy();\r
77     copy.parameters.remove(name);\r
78     stateMgr.checkIn(copy);\r
79   }\r
80   \r
81   public void removeParameters() {\r
82     Pazpar2Command copy = this.copy();\r
83     copy.parameters = new HashMap<String,CommandParameter>();\r
84     stateMgr.checkIn(copy);\r
85   }\r
86   \r
87   public void removeParametersInState() {\r
88     parameters = new HashMap<String,CommandParameter>();    \r
89   }\r
90 \r
91   \r
92   public boolean hasParameters () {\r
93     return (parameters.keySet().size()>0);\r
94   }\r
95   \r
96   public boolean hasParameterSet(String parameterName) {\r
97     return (parameters.get(parameterName) != null);\r
98   }\r
99   \r
100   public String getEncodedQueryString () {\r
101     StringBuilder queryString = new StringBuilder("command="+name);\r
102     for (CommandParameter parameter : parameters.values()) {\r
103        queryString.append("&"+parameter.getEncodedQueryString());       \r
104     }\r
105     return queryString.toString();\r
106   } \r
107     \r
108   public String getValueWithExpressions() {    \r
109     StringBuilder value = new StringBuilder("");\r
110     for (CommandParameter parameter : parameters.values()) {\r
111       value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());       \r
112    }\r
113     return value.toString();\r
114   }\r
115   \r
116   @Override\r
117   public boolean equals (Object otherCommand) {\r
118     return\r
119         ((otherCommand instanceof Pazpar2Command)\r
120          && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));\r
121   }\r
122   \r
123   @Override\r
124   public int hashCode () {\r
125     return getValueWithExpressions().hashCode();\r
126   }\r
127   \r
128   public String toString () {\r
129     return parameters.toString();\r
130   }\r
131 \r
132   public String getParameterValue(String parameterName) {\r
133     return getParameter(parameterName).getValueWithExpressions();\r
134     \r
135   }\r
136 \r
137   public String getUrlEncodedParameterValue(String parameterName) {\r
138     return getParameter(parameterName).getEncodedQueryString();\r
139   }\r
140   \r
141   public void setSession (String sessionId) {\r
142     setParameter(new CommandParameter("session","=",sessionId));\r
143   }\r
144   \r
145   public String getSession() {\r
146     return getParameterValue("session");\r
147   }  \r
148 }\r