1 package com.indexdata.mkjsf.pazpar2.commands;
\r
3 import java.io.Serializable;
\r
4 import java.io.UnsupportedEncodingException;
\r
5 import java.net.URLEncoder;
\r
6 import java.util.ArrayList;
\r
7 import java.util.Arrays;
\r
8 import java.util.Iterator;
\r
9 import java.util.List;
\r
11 import org.apache.log4j.Logger;
\r
13 public class CommandParameter implements Serializable {
\r
15 private static Logger logger = Logger.getLogger(CommandParameter.class);
\r
17 private static final long serialVersionUID = 625502285668766749L;
\r
19 String operator = null;
\r
20 String value = null;
\r
21 List<Expression> expressions = new ArrayList<Expression>();
\r
22 private static List<String> nologparams = Arrays.asList("password");
\r
24 public CommandParameter (String name) {
\r
25 logger.trace("Instantiating command parameter '" + name + "'");
\r
29 public CommandParameter (String name, String operator, String value, Expression... expressions) {
\r
30 logger.trace("Instantiating command parameter " + name + " with value [" + value + "] and expressions: [" + expressions + "]");
\r
32 this.operator = operator;
\r
34 for (Expression expr : expressions) {
\r
35 this.expressions.add(expr);
\r
39 public CommandParameter (String name, String operator, Expression... expressions) {
\r
40 logger.trace("Instantiating command parameter " + name + " with expressions: [" + expressions + "]");
\r
42 this.operator = operator;
\r
43 for (Expression expr : expressions) {
\r
44 this.expressions.add(expr);
\r
49 public CommandParameter (String name, String operator, String value) {
\r
50 if (!nologparams.contains(name)) logger.trace("Instantiating command parameter '" + name + "' with String: [" + value + "]");
\r
52 this.operator = operator;
\r
53 this.value = value;
\r
56 public CommandParameter (String name, String operator, int value) {
\r
57 logger.trace("Instantiating command parameter '" + name + "' with int: [" + value + "]");
\r
59 this.operator = operator;
\r
60 this.value = value+"";
\r
64 public String getName () {
\r
68 public List<Expression> getExpressions () {
\r
72 public List<Expression> getExpressions(String... expressionFields) {
\r
73 List<String> requestedFields = Arrays.asList(expressionFields);
\r
74 List<Expression> exprs = new ArrayList<Expression>();
\r
75 for (Expression expr : expressions) {
\r
76 if (requestedFields.contains(expr.getField())) {
\r
83 public void addExpression(Expression expression) {
\r
84 logger.debug("Adding expression [" + expression + "] to '" + name + "'");
\r
85 this.expressions.add(expression);
\r
88 public void removeExpression(Expression expression) {
\r
89 for (Expression expr : expressions) {
\r
90 if (expr.toString().equals(expression.toString())) {
\r
91 expressions.remove(expr);
\r
97 public void removeExpressionsAfter (Expression expression, String... expressionFields) {
\r
98 List<String> exprFieldsToRemove = Arrays.asList(expressionFields);
\r
100 for (Expression expr : expressions) {
\r
102 if (expr.toString().equals(expression.toString())) {
\r
106 if (fromIdx<expressions.size()) {
\r
107 Iterator<Expression> candidatesForRemoval = expressions.subList(fromIdx, expressions.size()).iterator();
\r
108 while (candidatesForRemoval.hasNext()) {
\r
109 Expression exp = candidatesForRemoval.next();
\r
110 if (exprFieldsToRemove.contains(exp.getField())) {
\r
111 expressions.remove(exp);
\r
117 public void removeExpressions (String... expressionFields) {
\r
118 List<String> fieldsToRemove = Arrays.asList(expressionFields);
\r
119 Iterator<Expression> i = expressions.iterator();
\r
120 while (i.hasNext()) {
\r
121 Expression expr = i.next();
\r
122 if (fieldsToRemove.contains(expr.getField())) {
\r
123 logger.trace("Removing expression: " + expr.toString());
\r
129 public boolean hasOperator() {
\r
130 return operator != null;
\r
133 public boolean hasValue() {
\r
134 return value != null && value.length()>0;
\r
137 public boolean hasExpressions() {
\r
138 return expressions.size()>0;
\r
141 public boolean hasExpressions(String expressionField) {
\r
142 for (Expression expr : expressions) {
\r
143 if (expr.getField().equals(expressionField)) {
\r
150 public String getEncodedQueryString () {
\r
152 return name + operator + URLEncoder.encode(getValueWithExpressions(),"UTF-8");
\r
153 } catch (UnsupportedEncodingException e) {
\r
154 e.printStackTrace();
\r
159 public String getSimpleValue() {
\r
163 public String getValueWithExpressions () {
\r
164 StringBuilder completeValue = new StringBuilder((value==null ? "" : value));
\r
165 for (Expression expr : expressions) {
\r
166 completeValue.append(" and " + expr.toString());
\r
168 return completeValue.toString();
\r
172 public boolean equals (Object otherParameter) {
\r
174 ((otherParameter instanceof CommandParameter)
\r
175 && this.getValueWithExpressions().equals(((CommandParameter) otherParameter).getValueWithExpressions()));
\r
179 public int hashCode () {
\r
180 return getValueWithExpressions().hashCode();
\r
183 public String toString() {
\r
184 return getValueWithExpressions();
\r
187 public CommandParameter copy() {
\r
188 logger.trace("Copying parameter '"+ name + "' for modification");
\r
189 CommandParameter newParam = new CommandParameter(name);
\r
190 newParam.value = this.value;
\r
191 newParam.operator = this.operator;
\r
192 for (Expression expr : expressions) {
\r
193 newParam.addExpression(expr.copy());
\r