Javadoc
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / commands / FilterParameter.java
1 package com.indexdata.mkjsf.pazpar2.commands;\r
2 \r
3 import org.apache.log4j.Logger;\r
4 \r
5 /**\r
6  * Represents a filter parameter as it applies to the Pazpar2 search command\r
7  * \r
8  * <p>A filter parameter consists of one or more expressions separated by commas.</p> \r
9  *  \r
10  * @author Niels Erik\r
11  *\r
12  */\r
13 public class FilterParameter extends CommandParameter {\r
14 \r
15   private static final long serialVersionUID = -3697328835895528654L;\r
16   private static Logger logger = Logger.getLogger(FilterParameter.class);\r
17 \r
18   public FilterParameter(String name) {\r
19     super(name);\r
20   }\r
21 \r
22   public FilterParameter(Expression... expressions) {\r
23     super("filter", "=", expressions);\r
24   }\r
25 \r
26   public String getValueWithExpressions () {\r
27     StringBuilder completeValue = new StringBuilder("");\r
28     boolean first = true;\r
29     for (Expression expr : expressions) {      \r
30       if (!first) \r
31         completeValue.append(",");\r
32       else \r
33         first=false;      \r
34       completeValue.append(pz2escape(expr.toString()));\r
35     }\r
36     return completeValue.toString();    \r
37   }  \r
38   \r
39   /**\r
40    * Escapes backslash (\), comma (,) and pipe (|) from an expression string.\r
41    *  \r
42    * @param expressionString\r
43    * @return escaped expressionString\r
44    */\r
45   private String pz2escape (String expressionString) {\r
46     String escaped = expressionString.replaceAll("\\\\","\\\\\\\\");\r
47     escaped = escaped.replaceAll(",","\\\\,");\r
48     escaped = escaped.replaceAll("\\|", "\\\\|");\r
49     return escaped;\r
50   }\r
51   \r
52   public FilterParameter copy() {\r
53     logger.trace("Copying parameter '"+ name + "' for modification");\r
54     FilterParameter newParam = new FilterParameter(name);\r
55     newParam.value = this.value;\r
56     newParam.operator = this.operator;\r
57     for (Expression expr : expressions) {\r
58       newParam.addExpression(expr.copy());      \r
59     }\r
60     return newParam;\r
61   }\r
62 \r
63 \r
64 }\r