More work on commands, statemgmt, EL references
[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 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.setParameterSilently(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     logger.debug("Setting parameter " + parameter.getName() + "=" + parameter.getValueWithExpressions() + " to " + this.getName());\r
39     parameters.put(parameter.getName(),parameter);\r
40     stateMgr.checkIn(this);\r
41   }\r
42   \r
43   public void setParameters (CommandParameter... params) {\r
44     for (CommandParameter param : params) {\r
45       logger.debug("Setting parameter " + param.getName() + "=" + param.getValueWithExpressions() + " to " + this.getName());\r
46       parameters.put(param.getName(),param);\r
47     }\r
48     stateMgr.checkIn(this);\r
49   }\r
50   \r
51   \r
52   public void setParameterSilently (CommandParameter parameter) {\r
53     logger.debug("Setting parameter silently " + parameter.getName() + "=" + parameter.getValueWithExpressions() + " to " + this.getName());\r
54     parameters.put(parameter.getName(),parameter);    \r
55   }\r
56   \r
57   \r
58   public CommandParameter getParameter (String name) {\r
59     return parameters.get(name);\r
60   }\r
61   \r
62   public void removeParameter (String name) {\r
63     parameters.remove(name);\r
64     stateMgr.checkIn(this);\r
65   }\r
66   \r
67   public void removeParameters() {\r
68     parameters = new HashMap<String,CommandParameter>();\r
69     stateMgr.checkIn(this);\r
70   }\r
71   \r
72   public boolean hasParameters () {\r
73     return (parameters.keySet().size()>0);\r
74   }\r
75   \r
76   public boolean hasParameterSet(String parameterName) {\r
77     return (parameters.get(parameterName) != null);\r
78   }\r
79   \r
80   public String getEncodedQueryString () {\r
81     StringBuilder queryString = new StringBuilder("command="+name);\r
82     for (CommandParameter parameter : parameters.values()) {\r
83        queryString.append("&"+parameter.getEncodedQueryString());       \r
84     }\r
85     return queryString.toString();\r
86   } \r
87     \r
88   public String getValueWithExpressions() {    \r
89     StringBuilder value = new StringBuilder("");\r
90     for (CommandParameter parameter : parameters.values()) {\r
91       value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());       \r
92    }\r
93     return value.toString();\r
94   }\r
95   \r
96   @Override\r
97   public boolean equals (Object otherCommand) {\r
98     return\r
99         ((otherCommand instanceof Pazpar2Command)\r
100          && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));\r
101   }\r
102   \r
103   @Override\r
104   public int hashCode () {\r
105     return getValueWithExpressions().hashCode();\r
106   }\r
107   \r
108   public String toString () {\r
109     return parameters.toString();\r
110   }\r
111   \r
112 }\r