97be62d4c8b29032e912c3fc11173ea8aeaf467a
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / commands / Pazpar2Command.java
1 package com.indexdata.pz2utils4jsf.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.pz2utils4jsf.pazpar2.state.StateManager;\r
10 \r
11 public class Pazpar2Command implements CommandReadOnly, 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       // Set one-off dummy state mgr\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.setParameterSilently(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     logger.debug(name + " setting parameter " + parameter.getName() + "=" + parameter.getValueWithExpressions() + " to " + this.getName());\r
44     parameters.put(parameter.getName(),parameter);\r
45     stateMgr.checkIn(this);\r
46   }\r
47   \r
48   public void setParameters (CommandParameter... params) {\r
49     for (CommandParameter param : params) {\r
50       logger.debug(name + " setting parameter " + param.getName() + "=" + param.getValueWithExpressions() + " to " + this.getName());\r
51       parameters.put(param.getName(),param);\r
52     }\r
53     stateMgr.checkIn(this);\r
54   }\r
55   \r
56   \r
57   public void setParameterSilently (CommandParameter parameter) {\r
58     logger.debug(name + " setting parameter silently " + parameter.getName() + "=" + parameter.getValueWithExpressions() + " to " + this.getName());\r
59     parameters.put(parameter.getName(),parameter);    \r
60   }\r
61   \r
62   \r
63   public CommandParameter getParameter (String name) {\r
64     return parameters.get(name);\r
65   }\r
66   \r
67   public void removeParameter (String name) {\r
68     parameters.remove(name);\r
69     stateMgr.checkIn(this);\r
70   }\r
71   \r
72   public void removeParameters() {\r
73     parameters = new HashMap<String,CommandParameter>();\r
74     stateMgr.checkIn(this);\r
75   }\r
76   \r
77   public void removeParametersSilently() {\r
78     parameters = new HashMap<String,CommandParameter>();    \r
79   }\r
80 \r
81   \r
82   public boolean hasParameters () {\r
83     return (parameters.keySet().size()>0);\r
84   }\r
85   \r
86   public boolean hasParameterSet(String parameterName) {\r
87     return (parameters.get(parameterName) != null);\r
88   }\r
89   \r
90   public String getEncodedQueryString () {\r
91     StringBuilder queryString = new StringBuilder("command="+name);\r
92     for (CommandParameter parameter : parameters.values()) {\r
93        queryString.append("&"+parameter.getEncodedQueryString());       \r
94     }\r
95     return queryString.toString();\r
96   } \r
97     \r
98   public String getValueWithExpressions() {    \r
99     StringBuilder value = new StringBuilder("");\r
100     for (CommandParameter parameter : parameters.values()) {\r
101       value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());       \r
102    }\r
103     return value.toString();\r
104   }\r
105   \r
106   @Override\r
107   public boolean equals (Object otherCommand) {\r
108     return\r
109         ((otherCommand instanceof Pazpar2Command)\r
110          && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));\r
111   }\r
112   \r
113   @Override\r
114   public int hashCode () {\r
115     return getValueWithExpressions().hashCode();\r
116   }\r
117   \r
118   public String toString () {\r
119     return parameters.toString();\r
120   }\r
121 \r
122   @Override\r
123   public String getParameterValue(String parameterName) {\r
124     return getParameter(parameterName).getValueWithExpressions();\r
125     \r
126   }\r
127 \r
128   @Override\r
129   public String getUrlEncodedParameterValue(String parameterName) {\r
130     return getParameter(parameterName).getEncodedQueryString();\r
131   }\r
132   \r
133   public void setSession (String sessionId) {\r
134     setParameter(new CommandParameter("session","=",sessionId));\r
135   }\r
136   \r
137   public String getSession() {\r
138     return getParameterValue("session");\r
139   }  \r
140 }\r