X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Findexdata%2Fmkjsf%2Fpazpar2%2Fcommands%2FCommandParameter.java;h=f14e83606d114f1152e12bcdf22e3da656beae79;hb=464c86e1706170a0be7be81d239d8c16fad78ec4;hp=b22962e46283a780f37962b06cb2ace8795ab35d;hpb=d739ecb22a85d8f982add6d429e069edf7e0dde2;p=mkjsf-moved-to-github.git diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/CommandParameter.java b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/CommandParameter.java index b22962e..f14e836 100644 --- a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/CommandParameter.java +++ b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/CommandParameter.java @@ -3,15 +3,13 @@ package com.indexdata.mkjsf.pazpar2.commands; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; +import java.util.Iterator; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; -import com.indexdata.mkjsf.pazpar2.commands.CommandParameter; - public class CommandParameter implements Serializable { private static Logger logger = Logger.getLogger(CommandParameter.class); @@ -20,7 +18,7 @@ public class CommandParameter implements Serializable { String name = null; String operator = null; String value = null; - Map expressions = new HashMap(); + List expressions = new ArrayList(); private static List nologparams = Arrays.asList("password"); public CommandParameter (String name) { @@ -29,14 +27,24 @@ public class CommandParameter implements Serializable { } public CommandParameter (String name, String operator, String value, Expression... expressions) { - logger.trace("Instantiating command parameter " + name + " with expressions: [" + expressions + "]"); + logger.trace("Instantiating command parameter " + name + " with value [" + value + "] and expressions: [" + expressions + "]"); this.name = name; this.operator = operator; this.value = value; for (Expression expr : expressions) { - this.expressions.put(expr.toString(), expr); + this.expressions.add(expr); } } + + public CommandParameter (String name, String operator, Expression... expressions) { + logger.trace("Instantiating command parameter " + name + " with expressions: [" + expressions + "]"); + this.name = name; + this.operator = operator; + for (Expression expr : expressions) { + this.expressions.add(expr); + } + } + public CommandParameter (String name, String operator, String value) { if (!nologparams.contains(name)) logger.trace("Instantiating command parameter '" + name + "' with String: [" + value + "]"); @@ -57,19 +65,66 @@ public class CommandParameter implements Serializable { return name; } - public Map getExpressions () { + public List getExpressions () { return expressions; } + public List getExpressions(String... expressionFields) { + List requestedFields = Arrays.asList(expressionFields); + List exprs = new ArrayList(); + for (Expression expr : expressions) { + if (requestedFields.contains(expr.getField())) { + exprs.add(expr); + } + } + return exprs; + } + public void addExpression(Expression expression) { logger.debug("Adding expression [" + expression + "] to '" + name + "'"); - this.expressions.put(expression.toString(),expression); + this.expressions.add(expression); } public void removeExpression(Expression expression) { - this.expressions.remove(expression.toString()); + for (Expression expr : expressions) { + if (expr.toString().equals(expression.toString())) { + expressions.remove(expr); + break; + } + } + } + + public void removeExpressionsAfter (Expression expression, String... expressionFields) { + List exprFieldsToRemove = Arrays.asList(expressionFields); + int fromIdx = 0; + for (Expression expr : expressions) { + fromIdx++; + if (expr.toString().equals(expression.toString())) { + break; + } + } + if (fromIdx candidatesForRemoval = expressions.subList(fromIdx, expressions.size()).iterator(); + while (candidatesForRemoval.hasNext()) { + Expression exp = candidatesForRemoval.next(); + if (exprFieldsToRemove.contains(exp.getField())) { + expressions.remove(exp); + } + } + } } + public void removeExpressions (String... expressionFields) { + List fieldsToRemove = Arrays.asList(expressionFields); + Iterator i = expressions.iterator(); + while (i.hasNext()) { + Expression expr = i.next(); + if (fieldsToRemove.contains(expr.getField())) { + logger.trace("Removing expression: " + expr.toString()); + i.remove(); + } + } + } public boolean hasOperator() { return operator != null; @@ -79,6 +134,19 @@ public class CommandParameter implements Serializable { return value != null && value.length()>0; } + public boolean hasExpressions() { + return expressions.size()>0; + } + + public boolean hasExpressions(String expressionField) { + for (Expression expr : expressions) { + if (expr.getField().equals(expressionField)) { + return true; + } + } + return false; + } + public String getEncodedQueryString () { try { return name + operator + URLEncoder.encode(getValueWithExpressions(),"UTF-8"); @@ -93,13 +161,18 @@ public class CommandParameter implements Serializable { } public String getValueWithExpressions () { - StringBuilder completeValue = new StringBuilder((value==null ? "" : value)); - for (String key : expressions.keySet()) { - completeValue.append(" and " + expressions.get(key)); + StringBuilder completeValue = new StringBuilder((value==null ? "" : value)); + boolean first=true; + for (Expression expr : expressions) { + if (value == null && first) { + first = false; + completeValue.append(expr.toString()); + } else { + completeValue.append(" AND " + expr.toString()); + } } - return completeValue.toString(); - - } + return completeValue.toString(); + } @Override public boolean equals (Object otherParameter) { @@ -122,8 +195,8 @@ public class CommandParameter implements Serializable { CommandParameter newParam = new CommandParameter(name); newParam.value = this.value; newParam.operator = this.operator; - for (String key : expressions.keySet()) { - newParam.addExpression(expressions.get(key).copy()); + for (Expression expr : expressions) { + newParam.addExpression(expr.copy()); } return newParam; }