Adds demo auth method. Tweaks polling & state fields setup.
[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.state.StateManager;\r
10 \r
11 public class Pazpar2Command implements 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     this.stateMgr = stateMgr;\r
23   }\r
24       \r
25   public Pazpar2Command copy () {\r
26     Pazpar2Command newCommand = new Pazpar2Command(name,stateMgr);\r
27     for (String parameterName : parameters.keySet()) {\r
28       newCommand.setParameterInState(parameters.get(parameterName).copy());      \r
29     }    \r
30     return newCommand;\r
31   }\r
32   \r
33   public String getName() {\r
34     return name;\r
35   }\r
36     \r
37   public void setParameter (CommandParameter parameter) {\r
38     Pazpar2Command copy = this.copy();\r
39     logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "]");\r
40     copy.parameters.put(parameter.getName(),parameter);\r
41     checkInState(copy);\r
42   }\r
43   \r
44   public void setParameters (CommandParameter... params) {\r
45     Pazpar2Command copy = this.copy();\r
46     for (CommandParameter param : params) {\r
47       logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "]");\r
48       copy.parameters.put(param.getName(),param);\r
49     }\r
50     checkInState(copy);\r
51   }\r
52   \r
53   public void setParametersInState (CommandParameter... params) {    \r
54     for (CommandParameter param : params) {\r
55       logger.debug(name + " command: setting parameter [" + param.getName() + "=" + param.getValueWithExpressions() + "] silently");\r
56       parameters.put(param.getName(),param);\r
57     }    \r
58   }\r
59     \r
60   public void setParameterInState (CommandParameter parameter) {\r
61     logger.debug(name + " command: setting parameter [" + parameter.getName() + "=" + parameter.getValueWithExpressions() + "] silently");\r
62     parameters.put(parameter.getName(),parameter);    \r
63   }\r
64   \r
65   \r
66   public CommandParameter getParameter (String name) {\r
67     return parameters.get(name);\r
68   }\r
69   \r
70   public void removeParameter (String name) {\r
71     Pazpar2Command copy = this.copy();\r
72     copy.parameters.remove(name);\r
73     checkInState(copy);\r
74   }\r
75   \r
76   public void removeParameters() {\r
77     Pazpar2Command copy = this.copy();\r
78     copy.parameters = new HashMap<String,CommandParameter>();\r
79     checkInState(copy);\r
80   }\r
81   \r
82   public void removeParametersInState() {\r
83     parameters = new HashMap<String,CommandParameter>();    \r
84   }\r
85 \r
86   \r
87   public boolean hasParameters () {\r
88     return (parameters.keySet().size()>0);\r
89   }\r
90   \r
91   public boolean hasParameterSet(String parameterName) {\r
92     return (parameters.get(parameterName) != null);\r
93   }\r
94   \r
95   public String getEncodedQueryString () {\r
96     StringBuilder queryString = new StringBuilder("command="+name);\r
97     for (CommandParameter parameter : parameters.values()) {\r
98        queryString.append("&"+parameter.getEncodedQueryString());       \r
99     }\r
100     return queryString.toString();\r
101   } \r
102     \r
103   public String getValueWithExpressions() {    \r
104     StringBuilder value = new StringBuilder("");\r
105     for (CommandParameter parameter : parameters.values()) {\r
106       value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());       \r
107    }\r
108     return value.toString();\r
109   }\r
110   \r
111   @Override\r
112   public boolean equals (Object otherCommand) {\r
113     return\r
114         ((otherCommand instanceof Pazpar2Command)\r
115          && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));\r
116   }\r
117   \r
118   @Override\r
119   public int hashCode () {\r
120     return getValueWithExpressions().hashCode();\r
121   }\r
122   \r
123   public String toString () {\r
124     return parameters.toString();\r
125   }\r
126 \r
127   public String getParameterValue(String parameterName) {\r
128     return getParameter(parameterName).getValueWithExpressions();\r
129     \r
130   }\r
131 \r
132   public String getUrlEncodedParameterValue(String parameterName) {\r
133     return getParameter(parameterName).getEncodedQueryString();\r
134   }\r
135   \r
136   public void setSession (String sessionId) {\r
137     setParameter(new CommandParameter("session","=",sessionId));\r
138   }\r
139   \r
140   public String getSession() {\r
141     return getParameterValue("session");\r
142   } \r
143   \r
144   private void checkInState(Pazpar2Command command) {\r
145     if (stateMgr != null) {\r
146       stateMgr.checkIn(command);\r
147     } else {\r
148       logger.info("Command '" + command.getName() + "' not affecting state (history) as no state manager was defined for this command.");\r
149     }\r
150   }\r
151 }\r