Adds some support for compound expressions (filter,limit)
authorNiels Erik G. Nielsen <nielserik@indexdata.com>
Wed, 6 Nov 2013 00:57:14 +0000 (19:57 -0500)
committerNiels Erik G. Nielsen <nielserik@indexdata.com>
Wed, 6 Nov 2013 00:57:14 +0000 (19:57 -0500)
src/main/java/com/indexdata/mkjsf/pazpar2/commands/SearchCommand.java

index b8003cc..dcbb323 100644 (file)
@@ -1,7 +1,9 @@
 package com.indexdata.mkjsf.pazpar2.commands;\r
 \r
+import java.util.ArrayList;\r
 import java.util.Arrays;\r
 import java.util.List;\r
+import java.util.StringTokenizer;\r
 \r
 import javax.enterprise.context.SessionScoped;\r
 import javax.inject.Named;\r
@@ -70,14 +72,24 @@ public class SearchCommand extends Pazpar2Command implements ServiceProxyCommand
   /**\r
    * Sets the <code>filter</code> parameter. See Pazpar2 documentation for details.\r
    */  \r
-  public void setFilter(String filterExpression) {\r
-    if (filterExpression != null && filterExpression.length()>0) {\r
-      if (filterExpression.split("[=~]").length==1) {\r
-        removeFilters(filterExpression.split("[=~]")[0]);\r
-      } else if (filterExpression.split("[=~]").length==2) {\r
-        setParameter(new FilterParameter(new Expression(filterExpression)));\r
-      } else {\r
-        logger.error("Could not parse filter expression [" + filterExpression + "]");\r
+  public void setFilter(String compoundExpression) {\r
+    if (compoundExpression != null && compoundExpression.length()>0) {\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
+        } else {\r
+          logger.error("Could not parse filter expression [" + subExpressions[i] + "]");\r
+        }\r
       }\r
     }\r
   }\r
@@ -215,14 +227,24 @@ 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 limitExpression) {   \r
-    if (limitExpression != null && limitExpression.length()>0) {\r
-      if (limitExpression.split("[=~]").length==1) {\r
-        removeLimits(limitExpression.split("[=~]")[0]);\r
-      } else if (limitExpression.split("[=~]").length==2) {\r
-        setParameter(new LimitParameter(new Expression(limitExpression)));\r
-      } else {\r
-        logger.error("Could not parse limit expression [" + limitExpression + "]");\r
+  public void setLimit (String compoundExpression) {   \r
+    if (compoundExpression != null && compoundExpression.length()>0) {\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
+        } else {\r
+          logger.error("Could not parse limit expression [" + subExpressions[i] + "]");\r
+        }\r
       }\r
     }\r
   }\r
@@ -283,7 +305,7 @@ public class SearchCommand extends Pazpar2Command implements ServiceProxyCommand
   }\r
   \r
   /**\r
-   * Returns a list of limit expressions with fields that matches on of <code>expressionFields</code>\r
+   * Returns a list of limit expressions with fields that matches one of <code>expressionFields</code>\r
    * \r
    * @param expressionFields limit expressions to look for\r
    */\r