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
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 }