+package com.indexdata.pz2utils4jsf.pazpar2.commands;\r
+\r
+import java.io.Serializable;\r
+import java.io.UnsupportedEncodingException;\r
+import java.net.URLEncoder;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import com.indexdata.pz2utils4jsf.pazpar2.Expression;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.CommandParameter;\r
+\r
+public class CommandParameter implements Serializable {\r
+\r
+ private static Logger logger = Logger.getLogger(CommandParameter.class);\r
+ \r
+ private static final long serialVersionUID = 625502285668766749L;\r
+ String name = null;\r
+ String operator = null;\r
+ String value = null;\r
+ Map<String,Expression> expressions = new HashMap<String,Expression>();\r
+ \r
+ public CommandParameter (String name) {\r
+ logger.debug("Instantiating command parameter (1) " + name);\r
+ this.name = name;\r
+ }\r
+ \r
+ public CommandParameter (String name, String operator, String value, Expression... expressions) {\r
+ logger.debug("Instantiating command parameter (2) " + name + " with " + expressions);\r
+ this.name = name;\r
+ this.operator = operator;\r
+ this.value = value;\r
+ for (Expression expr : expressions) {\r
+ this.expressions.put(expr.toString(), expr);\r
+ }\r
+ }\r
+\r
+ public CommandParameter (String name, String operator, String value) {\r
+ logger.debug("Instantiating command parameter (3) " + name + " ("+this+") with " + value);\r
+ this.name = name;\r
+ this.operator = operator;\r
+ this.value = value; \r
+ }\r
+ \r
+ public CommandParameter (String name, String operator, int value) {\r
+ logger.debug("Instantiating command parameter (4) " + name + " ("+this+") with " + value);\r
+ this.name = name;\r
+ this.operator = operator;\r
+ this.value = value+""; \r
+ }\r
+\r
+ \r
+ public String getName () {\r
+ return name;\r
+ }\r
+ \r
+ public Map<String,Expression> getExpressions () {\r
+ return expressions;\r
+ }\r
+ \r
+ public void addExpression(Expression expression) {\r
+ logger.debug("Adding expression [" + expression + "] to " + this.getName() + " ("+this+")");\r
+ this.expressions.put(expression.toString(),expression);\r
+ }\r
+ \r
+ public void removeExpression(Expression expression) {\r
+ this.expressions.remove(expression.toString());\r
+ }\r
+ \r
+ \r
+ public boolean hasOperator() {\r
+ return operator != null;\r
+ }\r
+ \r
+ public String getEncodedQueryString () {\r
+ try {\r
+ return name + operator + URLEncoder.encode(getValueWithExpressions(),"UTF-8");\r
+ } catch (UnsupportedEncodingException e) {\r
+ e.printStackTrace();\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ public String getSimpleValue() { \r
+ return value; \r
+ }\r
+ \r
+ public String getValueWithExpressions () {\r
+ StringBuilder completeValue = new StringBuilder((value==null ? "" : value)); \r
+ for (String key : expressions.keySet()) { \r
+ completeValue.append(" and " + expressions.get(key));\r
+ }\r
+ return completeValue.toString();\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public boolean equals (Object otherParameter) {\r
+ return\r
+ ((otherParameter instanceof CommandParameter)\r
+ && this.getValueWithExpressions().equals(((CommandParameter) otherParameter).getValueWithExpressions()));\r
+ }\r
+ \r
+ @Override\r
+ public int hashCode () {\r
+ return getValueWithExpressions().hashCode();\r
+ }\r
+ \r
+ public String toString() {\r
+ return getValueWithExpressions();\r
+ }\r
+ \r
+ public CommandParameter copy() {\r
+ CommandParameter newParam = new CommandParameter(name);\r
+ newParam.value = this.value;\r
+ newParam.operator = this.operator;\r
+ for (String key : expressions.keySet()) {\r
+ newParam.addExpression(expressions.get(key).copy()); \r
+ }\r
+ return newParam;\r
+ }\r
+ \r
+}\r