Bugfixes to compound filter and limit settings
authorNiels Erik G. Nielsen <nielserik@indexdata.com>
Tue, 17 Dec 2013 16:35:11 +0000 (11:35 -0500)
committerNiels Erik G. Nielsen <nielserik@indexdata.com>
Tue, 17 Dec 2013 16:35:11 +0000 (11:35 -0500)
src/main/java/com/indexdata/mkjsf/pazpar2/commands/Pazpar2Command.java
src/main/java/com/indexdata/mkjsf/pazpar2/commands/SearchCommand.java

index f61642c..4a802df 100644 (file)
@@ -219,6 +219,10 @@ public abstract class Pazpar2Command implements Serializable  {
     checkInState(copy);\r
   }\r
   \r
+  public void removeParameterInState (String name) {\r
+    parameters.remove(name);\r
+  }\r
+  \r
   /**\r
    * Removes multiple parameters completely and notifies the state manager\r
    * -- once -- about the change\r
@@ -254,6 +258,10 @@ public abstract class Pazpar2Command implements Serializable  {
     checkInState(copy);\r
   }\r
   \r
+  public void addExpressionInState (String parameterName, Expression expression) {\r
+    getParameter(parameterName).addExpression(expression);\r
+  }\r
+  \r
   public void removeExpression(String parameterName, Expression expression) {\r
     Pazpar2Command copy = this.copy();\r
     copy.getParameter(parameterName).removeExpression(expression);\r
index f9f76a2..0c8d745 100644 (file)
@@ -71,26 +71,19 @@ public class SearchCommand extends Pazpar2Command implements ServiceProxyCommand
    * Sets the <code>filter</code> parameter. See Pazpar2 documentation for details.\r
    */  \r
   public void setFilter(String compoundExpression) {\r
-    if (compoundExpression != null && compoundExpression.length()>0) {\r
-      // Split expression by commas that are not escaped (with backslash)\r
+    if (getParameter("filter") != null) removeParameterInState("filter");\r
+    if (compoundExpression != null && compoundExpression.length()>0) {      \r
+      // Split expression by commas that are not escaped with backslash\r
       String[] subExpressions = compoundExpression.split("(?<!\\\\),");\r
       for (int i=0; i<subExpressions.length; i++) {\r
-        if (subExpressions[i].split("[=~]").length==1) {\r
-          removeFilters(subExpressions[i].split("[=~]")[0]);\r
-        } else if (subExpressions[i].split("[=~]").length==2) {\r
-          if (getParameter("filter") == null) {\r
-            setParameter(new FilterParameter(new Expression(subExpressions[i])));\r
-          } else {\r
-            if (getParameter("filter").hasExpressions(subExpressions[i].split("[=~]")[0])) {\r
-              getParameter("filter").removeExpressions(subExpressions[i].split("[=~]")[0]);\r
-            }\r
-            getParameter("filter").addExpression(new Expression(subExpressions[i]));\r
-          }\r
+        if (i==0) {\r
+          setParameterInState(new FilterParameter(new Expression(subExpressions[i])));\r
         } else {\r
-          logger.error("Could not parse filter expression [" + subExpressions[i] + "]");\r
+          addExpressionInState("filter",new Expression(subExpressions[i]));\r
         }\r
       }\r
     }\r
+    checkInState(this);\r
   }\r
   \r
   /**\r
@@ -226,27 +219,20 @@ public class SearchCommand extends Pazpar2Command implements ServiceProxyCommand
   /**\r
    * Sets the <code>limit</code> parameter. See Pazpar2 documentation for details.\r
    */  \r
-  public void setLimit (String compoundExpression) {   \r
-    if (compoundExpression != null && compoundExpression.length()>0) {\r
-      // Split expression by commas that are not escaped (with backslash)\r
+  public void setLimit (String compoundExpression) {\r
+    if (getParameter("limit") != null) removeParameterInState("limit");\r
+    if (compoundExpression != null && compoundExpression.length()>0) {      \r
+      // Split expression by commas that are not escaped with backslash\r
       String[] subExpressions = compoundExpression.split("(?<!\\\\),");\r
       for (int i=0; i<subExpressions.length; i++) {\r
-        if (subExpressions[i].split("[=~]").length==1) {\r
-          removeLimits(subExpressions[i].split("[=~]")[0]);\r
-        } else if (subExpressions[i].split("[=~]").length==2) {\r
-          if (getParameter("limit") == null) {\r
-            setParameter(new LimitParameter(new Expression(subExpressions[i])));\r
-          } else {\r
-            if (getParameter("limit").hasExpressions(subExpressions[i].split("[=~]")[0])) {\r
-              getParameter("limit").removeExpressions(subExpressions[i].split("[=~]")[0]);\r
-            }\r
-            getParameter("limit").addExpression(new Expression(subExpressions[i]));\r
-          }\r
+        if (i==0) {\r
+          setParameterInState(new LimitParameter(new Expression(subExpressions[i])));\r
         } else {\r
-          logger.error("Could not parse limit expression [" + subExpressions[i] + "]");\r
+          addExpressionInState("limit",new Expression(subExpressions[i]));\r
         }\r
       }\r
     }\r
+    checkInState(this);\r
   }\r
   \r
   /**\r