1 package com.atlassian.sal.core.search.parameter;
2
3 import org.apache.commons.lang.StringUtils;
4 import com.atlassian.sal.api.search.parameter.SearchParameter;
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 {
15 private String name;
16 private String value;
17
18 public BasicSearchParameter(String queryString)
19 {
20 initFromQueryString(queryString);
21 }
22
23 public BasicSearchParameter(String name, String value)
24 {
25 this.name = name;
26 this.value = value;
27 }
28
29 public String getName()
30 {
31 return name;
32 }
33
34 public String getValue()
35 {
36 return value;
37 }
38
39 public String buildQueryString()
40 {
41 final String encodedName;
42 final String encodedValue;
43 try
44 {
45 encodedName = URLEncoder.encode(name, "UTF-8");
46 encodedValue = URLEncoder.encode(value, "UTF-8");
47 }
48 catch (UnsupportedEncodingException e)
49 {
50 throw new RuntimeException("unable to encode query parameters in UTF-8", e);
51 }
52 return encodedName + "=" + encodedValue;
53 }
54
55 private void initFromQueryString(String queryString)
56 {
57 if (StringUtils.isEmpty(queryString) || queryString.indexOf("=") == -1)
58 {
59 throw new IllegalArgumentException("QueryString '" + queryString + "' does not appear to be a valid query string");
60 }
61
62 try
63 {
64 final String[] encodedQueryKeyValuePair = queryString.split("=");
65 this.name = URLDecoder.decode(encodedQueryKeyValuePair[0], "UTF-8");
66 this.value = URLDecoder.decode(encodedQueryKeyValuePair[1], "UTF-8");
67 }
68 catch (UnsupportedEncodingException e)
69 {
70 throw new RuntimeException(e);
71 }
72 }
73
74 public boolean equals(Object o)
75 {
76 if (this == o)
77 {
78 return true;
79 }
80 if (o == null || getClass() != o.getClass())
81 {
82 return false;
83 }
84
85 BasicSearchParameter that = (BasicSearchParameter) o;
86
87 if (!name.equals(that.name))
88 {
89 return false;
90 }
91 if (!value.equals(that.value))
92 {
93 return false;
94 }
95
96 return true;
97 }
98
99 public int hashCode()
100 {
101 int result;
102 result = name.hashCode();
103 result = 31 * result + value.hashCode();
104 return result;
105 }
106 }