View Javadoc
1   package com.atlassian.sal.core.search.parameter;
2   
3   import com.atlassian.sal.api.search.parameter.SearchParameter;
4   import org.apache.commons.lang3.StringUtils;
5   
6   import java.io.UnsupportedEncodingException;
7   import java.net.URLDecoder;
8   import java.net.URLEncoder;
9   
10  /**
11   * Basic name value pair search parameter.
12   */
13  public class BasicSearchParameter implements SearchParameter {
14      private String name;
15      private String value;
16  
17      public BasicSearchParameter(String queryString) {
18          initFromQueryString(queryString);
19      }
20  
21      public BasicSearchParameter(String name, String value) {
22          this.name = name;
23          this.value = value;
24      }
25  
26      public String getName() {
27          return name;
28      }
29  
30      public String getValue() {
31          return value;
32      }
33  
34      public String buildQueryString() {
35          final String encodedName;
36          final String encodedValue;
37          try {
38              encodedName = URLEncoder.encode(name, "UTF-8");
39              encodedValue = URLEncoder.encode(value, "UTF-8");
40          } catch (UnsupportedEncodingException e) {
41              throw new RuntimeException("unable to encode query parameters in UTF-8", e);
42          }
43          return encodedName + "=" + encodedValue;
44      }
45  
46      private void initFromQueryString(String queryString) {
47          if (StringUtils.isEmpty(queryString) || !queryString.contains("=")) {
48              throw new IllegalArgumentException("QueryString '" + queryString + "' does not appear to be a valid query string");
49          }
50  
51          try {
52              final String[] encodedQueryKeyValuePair = queryString.split("=");
53              this.name = URLDecoder.decode(encodedQueryKeyValuePair[0], "UTF-8");
54              this.value = URLDecoder.decode(encodedQueryKeyValuePair[1], "UTF-8");
55          } catch (UnsupportedEncodingException e) {
56              throw new RuntimeException(e);
57          }
58      }
59  
60      public boolean equals(Object o) {
61          if (this == o) {
62              return true;
63          }
64          if (o == null || getClass() != o.getClass()) {
65              return false;
66          }
67  
68          BasicSearchParameter that = (BasicSearchParameter) o;
69  
70          if (!name.equals(that.name)) {
71              return false;
72          }
73          if (!value.equals(that.value)) {
74              return false;
75          }
76  
77          return true;
78      }
79  
80      public int hashCode() {
81          int result;
82          result = name.hashCode();
83          result = 31 * result + value.hashCode();
84          return result;
85      }
86  }