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
7 import org.apache.log4j.Logger;
\r
9 import com.indexdata.mkjsf.pazpar2.commands.sp.ServiceProxyCommand;
\r
10 import com.indexdata.mkjsf.pazpar2.state.StateManager;
\r
12 public abstract class Pazpar2Command implements Serializable {
\r
14 private static Logger logger = Logger.getLogger(Pazpar2Command.class);
\r
15 private static final long serialVersionUID = -6825491856480675917L;
\r
16 protected String name = "";
\r
17 protected Map<String,CommandParameter> parameters = new HashMap<String,CommandParameter>();
\r
19 protected StateManager stateMgr;
\r
21 public Pazpar2Command (String name, StateManager stateMgr) {
\r
23 this.stateMgr = stateMgr;
\r
26 public abstract Pazpar2Command copy ();
\r
28 public String getName() {
\r
32 public void setParameter (CommandParameter parameter) {
\r
33 Pazpar2Command copy = this.copy();
\r
34 logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");
\r
35 copy.parameters.put(parameter.getName(),parameter);
\r
39 public void setParameters (CommandParameter... params) {
\r
40 Pazpar2Command copy = this.copy();
\r
41 for (CommandParameter param : params) {
\r
42 logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");
\r
43 copy.parameters.put(param.getName(),param);
\r
48 public void setParametersInState (CommandParameter... params) {
\r
49 for (CommandParameter param : params) {
\r
50 logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");
\r
51 parameters.put(param.getName(),param);
\r
55 public void setParameterInState (CommandParameter parameter) {
\r
56 logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");
\r
57 parameters.put(parameter.getName(),parameter);
\r
61 public CommandParameter getParameter (String name) {
\r
62 return parameters.get(name);
\r
65 public void removeParameter (String name) {
\r
66 Pazpar2Command copy = this.copy();
\r
67 copy.parameters.remove(name);
\r
71 public void removeParameters() {
\r
72 Pazpar2Command copy = this.copy();
\r
73 copy.parameters = new HashMap<String,CommandParameter>();
\r
77 public void removeParametersInState() {
\r
78 parameters = new HashMap<String,CommandParameter>();
\r
82 public boolean hasParameters () {
\r
83 return (parameters.keySet().size()>0);
\r
86 public boolean hasParameterValue(String parameterName) {
\r
87 return (parameters.get(parameterName) != null && parameters.get(parameterName).hasValue());
\r
90 public String getEncodedQueryString () {
\r
91 StringBuilder queryString = new StringBuilder("command="+name);
\r
92 for (CommandParameter parameter : parameters.values()) {
\r
93 if (parameter.hasValue()) {
\r
94 queryString.append("&"+parameter.getEncodedQueryString());
\r
97 return queryString.toString();
\r
100 public String getValueWithExpressions() {
\r
101 StringBuilder value = new StringBuilder("");
\r
102 for (CommandParameter parameter : parameters.values()) {
\r
103 if (parameter.hasValue()) {
\r
104 value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());
\r
107 return value.toString();
\r
111 public boolean equals (Object otherCommand) {
\r
113 ((otherCommand instanceof Pazpar2Command)
\r
114 && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));
\r
118 public int hashCode () {
\r
119 return getValueWithExpressions().hashCode();
\r
122 public String toString () {
\r
123 return parameters.toString();
\r
126 public String getParameterValue(String parameterName) {
\r
127 return getParameter(parameterName)==null ? "" : getParameter(parameterName).getValueWithExpressions();
\r
131 public String getUrlEncodedParameterValue(String parameterName) {
\r
132 return getParameter(parameterName).getEncodedQueryString();
\r
135 public void setSession (String sessionId) {
\r
136 setParameter(new CommandParameter("session","=",sessionId));
\r
139 public String getSession() {
\r
140 return getParameterValue("session");
\r
143 private void checkInState(Pazpar2Command command) {
\r
144 if (stateMgr != null) {
\r
145 stateMgr.checkIn(command);
\r
147 logger.info("Command '" + command.getName() + "' not affecting state (history) as no state manager was defined for this command.");
\r
151 public abstract ServiceProxyCommand getSp();
\r