Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkjsf.git into...
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / FilterParameter.java
diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/commands/FilterParameter.java b/src/main/java/com/indexdata/mkjsf/pazpar2/commands/FilterParameter.java
new file mode 100644 (file)
index 0000000..6841d36
--- /dev/null
@@ -0,0 +1,64 @@
+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