--- /dev/null
+package com.indexdata.mkjsf.pazpar2.commands;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+/**\r
+ * Represents a filter parameter as it applies to the Pazpar2 search command\r
+ * \r
+ * <p>A filter parameter consists of one or more expressions separated by commas.</p> \r
+ * \r
+ * @author Niels Erik\r
+ *\r
+ */\r
+public class FilterParameter extends CommandParameter {\r
+\r
+ private static final long serialVersionUID = -3697328835895528654L;\r
+ private static Logger logger = Logger.getLogger(FilterParameter.class);\r
+\r
+ public FilterParameter(String name) {\r
+ super(name);\r
+ }\r
+\r
+ public FilterParameter(Expression... expressions) {\r
+ super("filter", "=", expressions);\r
+ }\r
+\r
+ public String getValueWithExpressions () {\r
+ StringBuilder completeValue = new StringBuilder("");\r
+ boolean first = true;\r
+ for (Expression expr : expressions) { \r
+ if (!first) \r
+ completeValue.append(",");\r
+ else \r
+ first=false; \r
+ completeValue.append(pz2escape(expr.toString()));\r
+ }\r
+ return completeValue.toString(); \r
+ } \r
+ \r
+ /**\r
+ * Escapes backslash (\), comma (,) and pipe (|) from an expression string.\r
+ * \r
+ * @param expressionString\r
+ * @return escaped expressionString\r
+ */\r
+ private String pz2escape (String expressionString) {\r
+ String escaped = expressionString.replaceAll("\\\\","\\\\\\\\");\r
+ escaped = escaped.replaceAll(",","\\\\,");\r
+ escaped = escaped.replaceAll("\\|", "\\\\|");\r
+ return escaped;\r
+ }\r
+ \r
+ public FilterParameter copy() {\r
+ logger.trace("Copying parameter '"+ name + "' for modification");\r
+ FilterParameter newParam = new FilterParameter(name);\r
+ newParam.value = this.value;\r
+ newParam.operator = this.operator;\r
+ for (Expression expr : expressions) {\r
+ newParam.addExpression(expr.copy()); \r
+ }\r
+ return newParam;\r
+ }\r
+\r
+\r
+}\r