1 package com.indexdata.mkjsf.pazpar2.commands;
\r
3 import java.io.Serializable;
\r
4 import java.util.HashMap;
\r
5 import java.util.Map;
\r
6 import java.util.StringTokenizer;
\r
8 import org.apache.log4j.Logger;
\r
10 import com.indexdata.mkjsf.pazpar2.ClientCommandResponse;
\r
11 import com.indexdata.mkjsf.pazpar2.HttpResponseWrapper;
\r
12 import com.indexdata.mkjsf.pazpar2.Pz2Bean;
\r
13 import com.indexdata.mkjsf.pazpar2.SearchClient;
\r
14 import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;
\r
15 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;
\r
16 import com.indexdata.mkjsf.pazpar2.data.ResponseParser;
\r
17 import com.indexdata.mkjsf.pazpar2.data.Responses;
\r
19 public abstract class Pazpar2Command implements Serializable {
\r
21 private static Logger logger = Logger.getLogger(Pazpar2Command.class);
\r
22 private static final long serialVersionUID = -6825491856480675917L;
\r
23 protected String name = "";
\r
24 protected Map<String,CommandParameter> parameters = new HashMap<String,CommandParameter>();
\r
26 public Pazpar2Command () {
\r
29 public void setCommandName(String name) {
\r
33 public Pazpar2Command (String name) {
\r
37 public abstract Pazpar2Command copy ();
\r
39 public String getCommandName() {
\r
43 public ResponseDataObject run() {
\r
44 return run(Pz2Bean.get().getSearchClient(),
\r
45 Pz2Bean.get().getPzresp());
\r
48 public ResponseDataObject runWith(String... parameters) {
\r
49 for (String parameter : parameters) {
\r
50 StringTokenizer tokenizer = new StringTokenizer(parameter,"=");
\r
51 String name = (String) tokenizer.nextElement();
\r
52 String value = (String) tokenizer.nextElement();
\r
53 CommandParameter commandParameter = new CommandParameter(name,"=",value);
\r
54 setParameterInState(commandParameter);
\r
60 * For running the command in a thread. Client and Responses must be
\r
61 * provided because at this point the CDI bean cannot be retrieved
\r
62 * from within a thread.
\r
68 public ResponseDataObject run(SearchClient client,Responses pzresp) {
\r
69 logger.debug("Running " + getCommandName() + " using " + client);
\r
70 HttpResponseWrapper httpResponse = client.executeCommand(this);
\r
71 logger.debug("Parsing response for " + getCommandName());
\r
72 ResponseDataObject responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse) httpResponse);
\r
73 logger.trace("Storing response for " + getCommandName());
\r
74 pzresp.put(getCommandName(), responseObject);
\r
75 return responseObject;
\r
79 public void setParameter (CommandParameter parameter) {
\r
80 Pazpar2Command copy = this.copy();
\r
81 logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");
\r
82 copy.parameters.put(parameter.getName(),parameter);
\r
86 public void setParameters (CommandParameter... params) {
\r
87 Pazpar2Command copy = this.copy();
\r
88 for (CommandParameter param : params) {
\r
89 logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");
\r
90 copy.parameters.put(param.getName(),param);
\r
95 public void setParametersInState (CommandParameter... params) {
\r
96 for (CommandParameter param : params) {
\r
97 logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");
\r
98 parameters.put(param.getName(),param);
\r
102 public void setParameterInState (CommandParameter parameter) {
\r
103 logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");
\r
104 parameters.put(parameter.getName(),parameter);
\r
108 public CommandParameter getParameter (String name) {
\r
109 return parameters.get(name);
\r
112 public void removeParameter (String name) {
\r
113 Pazpar2Command copy = this.copy();
\r
114 copy.parameters.remove(name);
\r
115 checkInState(copy);
\r
118 public void removeParameters() {
\r
119 Pazpar2Command copy = this.copy();
\r
120 copy.parameters = new HashMap<String,CommandParameter>();
\r
121 checkInState(copy);
\r
124 public void removeParametersInState() {
\r
125 parameters = new HashMap<String,CommandParameter>();
\r
129 public boolean hasParameters () {
\r
130 return (parameters.keySet().size()>0);
\r
133 public boolean hasParameterValue(String parameterName) {
\r
134 return (parameters.get(parameterName) != null && parameters.get(parameterName).hasValue());
\r
137 public String getEncodedQueryString () {
\r
138 StringBuilder queryString = new StringBuilder("command="+name);
\r
139 for (CommandParameter parameter : parameters.values()) {
\r
140 if (parameter.hasValue()) {
\r
141 queryString.append("&"+parameter.getEncodedQueryString());
\r
144 return queryString.toString();
\r
147 public String getValueWithExpressions() {
\r
148 StringBuilder value = new StringBuilder("");
\r
149 for (CommandParameter parameter : parameters.values()) {
\r
150 if (parameter.hasValue()) {
\r
151 value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());
\r
154 return value.toString();
\r
158 public boolean equals (Object otherCommand) {
\r
160 ((otherCommand instanceof Pazpar2Command)
\r
161 && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));
\r
165 public int hashCode () {
\r
166 return getValueWithExpressions().hashCode();
\r
169 public String toString () {
\r
170 return parameters.toString();
\r
173 public String getParameterValue(String parameterName) {
\r
174 return getParameter(parameterName)==null ? "" : getParameter(parameterName).getValueWithExpressions();
\r
177 public String getUrlEncodedParameterValue(String parameterName) {
\r
178 return getParameter(parameterName).getEncodedQueryString();
\r
181 public void setSession (String sessionId) {
\r
182 setParameter(new CommandParameter("session","=",sessionId));
\r
185 public String getSession() {
\r
186 return getParameterValue("session");
\r
189 private void checkInState(Pazpar2Command command) {
\r
190 Pz2Bean.get().getStateMgr().checkIn(command);
\r
193 public String navigateTo (String target) {
\r
197 public abstract ServiceProxyCommand getSp();
\r
199 public abstract boolean spOnly();
\r