d589160126e1d0b906457f8b51031231ea81d85c
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / CommandParameter.java
1 package com.indexdata.pz2utils4jsf.pazpar2;\r
2 \r
3 import java.io.Serializable;\r
4 import java.io.UnsupportedEncodingException;\r
5 import java.net.URLEncoder;\r
6 import java.util.HashMap;\r
7 import java.util.Map;\r
8 \r
9 import org.apache.log4j.Logger;\r
10 \r
11 import com.indexdata.pz2utils4jsf.pazpar2.CommandParameter;\r
12 import com.indexdata.pz2utils4jsf.pazpar2.Expression;\r
13 \r
14 public class CommandParameter implements Serializable {\r
15 \r
16   private static Logger logger = Logger.getLogger(CommandParameter.class);\r
17   \r
18   private static final long serialVersionUID = 625502285668766749L;\r
19   String name = null;\r
20   String operator = null;\r
21   String value = null;\r
22   Map<String,Expression> expressions = new HashMap<String,Expression>();\r
23   \r
24   public CommandParameter (String name) {\r
25     logger.debug("Instantiating command parameter (1) " + name);\r
26     this.name = name;\r
27   }\r
28   \r
29   public CommandParameter (String name, String operator, String value, Expression... expressions) {\r
30     logger.debug("Instantiating command parameter (2) " + name + " with " + expressions);\r
31     this.name = name;\r
32     this.operator = operator;\r
33     this.value = value;\r
34     for (Expression expr : expressions) {\r
35       this.expressions.put(expr.toString(), expr);\r
36     }\r
37   }\r
38 \r
39   public CommandParameter (String name, String operator, String value) {\r
40     logger.debug("Instantiating command parameter (3) " + name + " ("+this+") with " + name + " and " + value);\r
41     this.name = name;\r
42     this.operator = operator;\r
43     this.value = value;    \r
44   }\r
45   \r
46   public CommandParameter (String name, String operator, int value) {\r
47     logger.debug("Instantiating command parameter (4) " + name + " ("+this+") with " + name + " and " + value);\r
48     this.name = name;\r
49     this.operator = operator;\r
50     this.value = value+"";    \r
51   }\r
52 \r
53   \r
54   public String getName () {\r
55     return name;\r
56   }\r
57   \r
58   public Map<String,Expression> getExpressions () {\r
59     return expressions;\r
60   }\r
61   \r
62   public void addExpression(Expression expression) {\r
63     logger.debug("Adding expression [" + expression + "] to " + this.getName() + " ("+this+")");\r
64     this.expressions.put(expression.toString(),expression);\r
65   }\r
66   \r
67   public void removeExpression(Expression expression) {\r
68     this.expressions.remove(expression.toString());\r
69   }\r
70   \r
71   \r
72   public boolean hasOperator() {\r
73     return operator != null;\r
74   }\r
75   \r
76   public String getEncodedQueryString () {\r
77     try {\r
78       return name + operator + URLEncoder.encode(getValueWithExpressions(),"UTF-8");\r
79     } catch (UnsupportedEncodingException e) {\r
80       e.printStackTrace();\r
81       return null;\r
82     }\r
83   }\r
84     \r
85   public String getSimpleValue() {    \r
86     return value; \r
87   }\r
88   \r
89   public String getValueWithExpressions () {\r
90     StringBuilder completeValue = new StringBuilder((value==null ? "" : value));    \r
91     for (String key : expressions.keySet()) {      \r
92       completeValue.append(" and " + expressions.get(key));\r
93     }\r
94     return completeValue.toString();\r
95     \r
96   }\r
97   \r
98   @Override\r
99   public boolean equals (Object otherParameter) {\r
100     return\r
101         ((otherParameter instanceof CommandParameter)\r
102          && this.getValueWithExpressions().equals(((CommandParameter) otherParameter).getValueWithExpressions()));\r
103   }\r
104   \r
105   @Override\r
106   public int hashCode () {\r
107     return getValueWithExpressions().hashCode();\r
108   }\r
109   \r
110   public String toString() {\r
111     return getValueWithExpressions();\r
112   }\r
113   \r
114   public CommandParameter copy() {\r
115     CommandParameter newParam = new CommandParameter(name);\r
116     newParam.value = this.value;\r
117     newParam.operator = this.operator;\r
118     for (String key : expressions.keySet()) {\r
119       newParam.addExpression(expressions.get(key).copy());      \r
120     }\r
121     return newParam;\r
122   }\r
123   \r
124 }\r