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