Adds methods handling 'filter' and 'limit' expressions
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / Pazpar2Command.java
index c7bff40..7c0ec74 100644 (file)
@@ -124,20 +124,46 @@ public abstract class Pazpar2Command implements Serializable  {
   public void removeParametersInState() {\r
     parameters = new HashMap<String,CommandParameter>();    \r
   }\r
-\r
+  \r
+  public void addExpression(String parameterName, Expression expression) {\r
+    Pazpar2Command copy = this.copy();\r
+    copy.getParameter(parameterName).addExpression(expression);\r
+    checkInState(copy);\r
+  }\r
+  \r
+  public void removeExpression(String parameterName, Expression expression) {\r
+    Pazpar2Command copy = this.copy();\r
+    copy.getParameter(parameterName).removeExpression(expression);\r
+    checkInState(copy);    \r
+  }\r
+  \r
+  public void removeExpressionsAfter(String parameterName, Expression expression,String... expressionFields) {\r
+    Pazpar2Command copy = this.copy();\r
+    copy.getParameter(parameterName).removeExpressionsAfter(expression,expressionFields);\r
+    checkInState(copy);    \r
+  }\r
+  \r
+  public void removeExpressions(String parameterName, String... expressionFields) {\r
+    Pazpar2Command copy = this.copy();    \r
+    copy.getParameter(parameterName).removeExpressions(expressionFields);    \r
+    if (!getParameter(parameterName).hasValue() && !getParameter(parameterName).hasExpressions()) {\r
+      copy.parameters.remove(parameterName);\r
+    }\r
+    checkInState(copy);    \r
+  }\r
   \r
   public boolean hasParameters () {\r
     return (parameters.keySet().size()>0);\r
   }\r
   \r
   public boolean hasParameterValue(String parameterName) {\r
-    return (parameters.get(parameterName) != null && parameters.get(parameterName).hasValue());\r
+    return (parameters.get(parameterName) != null && (parameters.get(parameterName).hasValue()));\r
   }\r
-  \r
+    \r
   public String getEncodedQueryString () {\r
     StringBuilder queryString = new StringBuilder("command="+name);\r
     for (CommandParameter parameter : parameters.values()) {\r
-      if (parameter.hasValue()) {\r
+      if (parameter.hasValue() || parameter.hasExpressions()) {\r
         queryString.append("&"+parameter.getEncodedQueryString());\r
       }\r
     }\r
@@ -147,7 +173,7 @@ public abstract class Pazpar2Command implements Serializable  {
   public String getValueWithExpressions() {    \r
     StringBuilder value = new StringBuilder("");\r
     for (CommandParameter parameter : parameters.values()) {\r
-      if (parameter.hasValue()) {\r
+      if (parameter.hasValue() || parameter.hasExpressions()) {\r
         value.append("&" + parameter.getName() + parameter.operator + parameter.getValueWithExpressions());\r
       }\r
    }\r
@@ -156,6 +182,7 @@ public abstract class Pazpar2Command implements Serializable  {
   \r
   @Override\r
   public boolean equals (Object otherCommand) {\r
+    logger.trace("Comparing commands ["+this.toString()+"] and ["+otherCommand.toString() +"]");\r
     return\r
         ((otherCommand instanceof Pazpar2Command)\r
          && this.getValueWithExpressions().equals(((Pazpar2Command) otherCommand).getValueWithExpressions()));\r