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
/**\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
/**\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
}\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