X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Findexdata%2Fmkjsf%2Fpazpar2%2Fcommands%2FPazpar2Command.java;h=fd74c3752bcc09081eb3c9f2b3462665e4131333;hb=95b6d2c90bde9b9946b79479f42233f6d7645f77;hp=9a3695ba5683e8704e1a4a130c50ce9808c09c9f;hpb=c6430ad85e3b04ea2823df38c15e8473342ff95b;p=mkjsf-moved-to-github.git diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/Pazpar2Command.java b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/Pazpar2Command.java index 9a3695b..fd74c37 100644 --- a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/Pazpar2Command.java +++ b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/Pazpar2Command.java @@ -3,40 +3,82 @@ package com.indexdata.mkjsf.pazpar2.commands; import java.io.Serializable; import java.util.HashMap; import java.util.Map; +import java.util.StringTokenizer; import org.apache.log4j.Logger; -import com.indexdata.mkjsf.pazpar2.state.StateManager; +import com.indexdata.mkjsf.pazpar2.ClientCommandResponse; +import com.indexdata.mkjsf.pazpar2.HttpResponseWrapper; +import com.indexdata.mkjsf.pazpar2.Pz2Bean; +import com.indexdata.mkjsf.pazpar2.SearchClient; +import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand; +import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject; +import com.indexdata.mkjsf.pazpar2.data.ResponseParser; +import com.indexdata.mkjsf.pazpar2.data.Responses; -public class Pazpar2Command implements Serializable { +public abstract class Pazpar2Command implements Serializable { private static Logger logger = Logger.getLogger(Pazpar2Command.class); private static final long serialVersionUID = -6825491856480675917L; - private String name = ""; - protected Map parameters = new HashMap(); + protected String name = ""; + protected Map parameters = new HashMap(); - StateManager stateMgr; - - public Pazpar2Command (String name, StateManager stateMgr) { + public Pazpar2Command () { + } + + public void setCommandName(String name) { this.name = name; - this.stateMgr = stateMgr; + } + + public Pazpar2Command (String name) { + this.name = name; } - public Pazpar2Command copy () { - Pazpar2Command newCommand = new Pazpar2Command(name,stateMgr); - for (String parameterName : parameters.keySet()) { - newCommand.setParameterInState(parameters.get(parameterName).copy()); - } - return newCommand; + public abstract Pazpar2Command copy (); + + public String getCommandName() { + return name; } - public String getName() { - return name; + public ResponseDataObject run() { + return run(Pz2Bean.get().getSearchClient(), + Pz2Bean.get().getPzresp()); + } + + public ResponseDataObject runWith(String... parameters) { + for (String parameter : parameters) { + StringTokenizer tokenizer = new StringTokenizer(parameter,"="); + String name = (String) tokenizer.nextElement(); + String value = (String) tokenizer.nextElement(); + CommandParameter commandParameter = new CommandParameter(name,"=",value); + setParameterInState(commandParameter); + } + return run(); + } + + /** + * For running the command in a thread. Client and Responses must be + * provided because at this point the CDI bean cannot be retrieved + * from within a thread. + * + * @param client + * @param pzresp + * @return + */ + public ResponseDataObject run(SearchClient client,Responses pzresp) { + logger.debug("Running " + getCommandName() + " using " + client); + HttpResponseWrapper httpResponse = client.executeCommand(this); + logger.debug("Parsing response for " + getCommandName()); + ResponseDataObject responseObject = ResponseParser.getParser().getDataObject((ClientCommandResponse) httpResponse); + logger.trace("Storing response for " + getCommandName()); + pzresp.put(getCommandName(), responseObject); + return responseObject; } + public void setParameter (CommandParameter parameter) { Pazpar2Command copy = this.copy(); - logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]"); + logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]"); copy.parameters.put(parameter.getName(),parameter); checkInState(copy); } @@ -44,7 +86,7 @@ public class Pazpar2Command implements Serializable { public void setParameters (CommandParameter... params) { Pazpar2Command copy = this.copy(); for (CommandParameter param : params) { - logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]"); + logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]"); copy.parameters.put(param.getName(),param); } checkInState(copy); @@ -52,13 +94,13 @@ public class Pazpar2Command implements Serializable { public void setParametersInState (CommandParameter... params) { for (CommandParameter param : params) { - logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently"); + logger.trace(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently"); parameters.put(param.getName(),param); } } public void setParameterInState (CommandParameter parameter) { - logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently"); + logger.trace(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently"); parameters.put(parameter.getName(),parameter); } @@ -88,14 +130,16 @@ public class Pazpar2Command implements Serializable { return (parameters.keySet().size()>0); } - public boolean hasParameterSet(String parameterName) { - return (parameters.get(parameterName) != null); + public boolean hasParameterValue(String parameterName) { + return (parameters.get(parameterName) != null && parameters.get(parameterName).hasValue()); } public String getEncodedQueryString () { StringBuilder queryString = new StringBuilder("command="+name); for (CommandParameter parameter : parameters.values()) { - queryString.append("&"+parameter.getEncodedQueryString()); + if (parameter.hasValue()) { + queryString.append("&"+parameter.getEncodedQueryString()); + } } return queryString.toString(); } @@ -103,7 +147,9 @@ public class Pazpar2Command implements Serializable { public String getValueWithExpressions() { StringBuilder value = new StringBuilder(""); for (CommandParameter parameter : parameters.values()) { - value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions()); + if (parameter.hasValue()) { + value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions()); + } } return value.toString(); } @@ -125,8 +171,7 @@ public class Pazpar2Command implements Serializable { } public String getParameterValue(String parameterName) { - return getParameter(parameterName).getValueWithExpressions(); - + return getParameter(parameterName)==null ? "" : getParameter(parameterName).getValueWithExpressions(); } public String getUrlEncodedParameterValue(String parameterName) { @@ -142,10 +187,14 @@ public class Pazpar2Command implements Serializable { } private void checkInState(Pazpar2Command command) { - if (stateMgr != null) { - stateMgr.checkIn(command); - } else { - logger.info("Command '" + command.getName() + "' not affecting state (history) as no state manager was defined for this command."); - } + Pz2Bean.get().getStateMgr().checkIn(command); + } + + public String navigateTo (String target) { + return target; } + + public abstract ServiceProxyCommand getSp(); + + public abstract boolean spOnly(); }