X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fcom%2Findexdata%2Fmkjsf%2Fpazpar2%2Fcommands%2FCommandParameter.java;h=d08cde1200f4d9bc12e5944acff211b61c00546c;hb=293a5dd121ba022889921b94c86ed38135fd4432;hp=69c224a2550d1a833bbd5c0abff0c202303d1f73;hpb=ccb28ae8d5d46d29c40bd8b1637522c212b80636;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 69c224a..d08cde1 100644 --- a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/CommandParameter.java +++ b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/CommandParameter.java @@ -3,47 +3,58 @@ package com.indexdata.mkjsf.pazpar2.commands; import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; -import java.util.HashMap; -import java.util.Map; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; 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); - private static final long serialVersionUID = 625502285668766749L; + private static final long serialVersionUID = 625502285668766749L; 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) { - logger.debug("Instantiating command parameter '" + name + "'"); + logger.trace("Instantiating command parameter '" + name + "'"); this.name = name; } public CommandParameter (String name, String operator, String value, Expression... expressions) { - logger.debug("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) { - logger.debug("Instantiating command parameter '" + name + "' with String: [" + value + "]"); + if (!nologparams.contains(name)) logger.trace("Instantiating command parameter '" + name + "' with String: [" + value + "]"); this.name = name; this.operator = operator; this.value = value; } public CommandParameter (String name, String operator, int value) { - logger.debug("Instantiating command parameter '" + name + "' with int: [" + value + "]"); + logger.trace("Instantiating command parameter '" + name + "' with int: [" + value + "]"); this.name = name; this.operator = operator; this.value = value+""; @@ -54,24 +65,88 @@ 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; } + public boolean hasValue() { + 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"); @@ -87,12 +162,11 @@ 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)); + for (Expression expr : expressions) { + completeValue.append(" and " + expr.toString()); } - return completeValue.toString(); - - } + return completeValue.toString(); + } @Override public boolean equals (Object otherParameter) { @@ -111,12 +185,12 @@ public class CommandParameter implements Serializable { } public CommandParameter copy() { - logger.debug("Copying parameter '"+ name + "' for modification"); + logger.trace("Copying parameter '"+ name + "' for modification"); 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; }