Reduces logging
[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.ClientCommandResponse;\r
10 import com.indexdata.mkjsf.pazpar2.HttpResponseWrapper;\r
11 import com.indexdata.mkjsf.pazpar2.Pz2Bean;\r
12 import com.indexdata.mkjsf.pazpar2.SearchClient;\r
13 import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;\r
14 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
15 import com.indexdata.mkjsf.pazpar2.data.ResponseParser;\r
16 import com.indexdata.mkjsf.pazpar2.data.Responses;\r
17 \r
18 public abstract class Pazpar2Command implements Serializable  {\r
19   \r
20   private static Logger logger = Logger.getLogger(Pazpar2Command.class);\r
21   private static final long serialVersionUID = -6825491856480675917L;   \r
22   protected String name = "";\r
23   protected Map<String,CommandParameter> parameters = new HashMap<String,CommandParameter>();  \r
24   \r
25   public Pazpar2Command () {    \r
26   }\r
27   \r
28   public void setCommandName(String name) {\r
29     this.name = name;\r
30   }\r
31           \r
32   public Pazpar2Command (String name) {\r
33     this.name = name;    \r
34   }\r
35       \r
36   public abstract Pazpar2Command copy ();\r
37           \r
38   public String getCommandName() {\r
39     return name;\r
40   }\r
41   \r
42   public ResponseDataObject run() {\r
43     return run(Pz2Bean.get().getSearchClient(),\r
44                Pz2Bean.get().getPzresp());\r
45   }\r
46   \r
47   /**\r
48    * For running the command in a thread. Client and Responses must be \r
49    * provided because at this point the CDI bean cannot be retrieved \r
50    * from within a thread.\r
51    * \r
52    * @param client\r
53    * @param pzresp\r
54    * @return\r
55    */\r
56   public ResponseDataObject run(SearchClient client,Responses pzresp) {\r
57     logger.info("Running " + getCommandName() + " using " + client);    \r
58     HttpResponseWrapper httpResponse = client.executeCommand(this);\r
59     logger.debug("Parsing response for " + getCommandName());\r
60     ResponseDataObject responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse) httpResponse);\r
61     logger.trace("Storing response for " + getCommandName());\r
62     pzresp.put(getCommandName(), responseObject);\r
63     return responseObject;    \r
64   }\r
65   \r
66     \r
67   public void setParameter (CommandParameter parameter) {\r
68     Pazpar2Command copy = this.copy();\r
69     logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");\r
70     copy.parameters.put(parameter.getName(),parameter);\r
71     checkInState(copy);\r
72   }\r
73   \r
74   public void setParameters (CommandParameter... params) {\r
75     Pazpar2Command copy = this.copy();\r
76     for (CommandParameter param : params) {\r
77       logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
78       copy.parameters.put(param.getName(),param);\r
79     }\r
80     checkInState(copy);\r
81   }\r
82   \r
83   public void setParametersInState (CommandParameter... params) {    \r
84     for (CommandParameter param : params) {\r
85       logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");\r
86       parameters.put(param.getName(),param);\r
87     }    \r
88   }\r
89     \r
90   public void setParameterInState (CommandParameter parameter) {\r
91     logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");\r
92     parameters.put(parameter.getName(),parameter);    \r
93   }\r
94   \r
95   \r
96   public CommandParameter getParameter (String name) {\r
97     return parameters.get(name);\r
98   }\r
99   \r
100   public void removeParameter (String name) {\r
101     Pazpar2Command copy = this.copy();\r
102     copy.parameters.remove(name);\r
103     checkInState(copy);\r
104   }\r
105   \r
106   public void removeParameters() {\r
107     Pazpar2Command copy = this.copy();\r
108     copy.parameters = new HashMap<String,CommandParameter>();\r
109     checkInState(copy);\r
110   }\r
111   \r
112   public void removeParametersInState() {\r
113     parameters = new HashMap<String,CommandParameter>();    \r
114   }\r
115 \r
116   \r
117   public boolean hasParameters () {\r
118     return (parameters.keySet().size()>0);\r
119   }\r
120   \r
121   public boolean hasParameterValue(String parameterName) {\r
122     return (parameters.get(parameterName) != null && parameters.get(parameterName).hasValue());\r
123   }\r
124   \r
125   public String getEncodedQueryString () {\r
126     StringBuilder queryString = new StringBuilder("command="+name);\r
127     for (CommandParameter parameter : parameters.values()) {\r
128       if (parameter.hasValue()) {\r
129         queryString.append("&"+parameter.getEncodedQueryString());\r
130       }\r
131     }\r
132     return queryString.toString();\r
133   } \r
134     \r
135   public String getValueWithExpressions() {    \r
136     StringBuilder value = new StringBuilder("");\r
137     for (CommandParameter parameter : parameters.values()) {\r
138       if (parameter.hasValue()) {\r
139         value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());\r
140       }\r
141    }\r
142     return value.toString();\r
143   }\r
144   \r
145   @Override\r
146   public boolean equals (Object otherCommand) {\r
147     return\r
148         ((otherCommand instanceof Pazpar2Command)\r
149          && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));\r
150   }\r
151   \r
152   @Override\r
153   public int hashCode () {\r
154     return getValueWithExpressions().hashCode();\r
155   }\r
156   \r
157   public String toString () {\r
158     return parameters.toString();\r
159   }\r
160 \r
161   public String getParameterValue(String parameterName) {\r
162     return getParameter(parameterName)==null ? "" : getParameter(parameterName).getValueWithExpressions();    \r
163   }\r
164 \r
165   public String getUrlEncodedParameterValue(String parameterName) {\r
166     return getParameter(parameterName).getEncodedQueryString();\r
167   }\r
168   \r
169   public void setSession (String sessionId) {\r
170     setParameter(new CommandParameter("session","=",sessionId));\r
171   }\r
172   \r
173   public String getSession() {\r
174     return getParameterValue("session");\r
175   } \r
176   \r
177   private void checkInState(Pazpar2Command command) {\r
178     Pz2Bean.get().getStateMgr().checkIn(command);\r
179   }\r
180   \r
181   public abstract ServiceProxyCommand getSp();\r
182    \r
183   public abstract boolean spOnly();  \r
184 }\r