View Javadoc

1   package com.atlassian.sal.core.search.query;
2   
3   import java.util.LinkedHashMap;
4   import java.util.Map;
5   
6   import org.apache.commons.lang.StringUtils;
7   
8   import com.atlassian.sal.api.search.parameter.SearchParameter;
9   import com.atlassian.sal.api.search.query.SearchQuery;
10  import com.atlassian.sal.core.search.parameter.BasicSearchParameter;
11  import com.atlassian.sal.core.util.URIUtil;
12  
13  /**
14   */
15  public class DefaultSearchQuery implements SearchQuery
16  {
17      private StringBuffer searchString = new StringBuffer();
18      private Map<String, SearchParameter> parameters = new LinkedHashMap<String, SearchParameter>();
19  
20      public DefaultSearchQuery(String query)
21      {
22          append(query);
23      }
24  
25      public SearchQuery setParameter(String name, String value)
26      {
27          parameters.put(name, new BasicSearchParameter(name, value));
28          return this;
29      }
30  
31      public String getParameter(String name)
32      {
33          final SearchParameter value = parameters.get(name);
34  
35          return value == null ? null : value.getValue();
36      }
37  
38      public String buildQueryString()
39      {
40          StringBuilder builder = new StringBuilder(searchString);
41          for (SearchParameter parameter : parameters.values())
42          {
43              builder.append('&');
44              builder.append(parameter.buildQueryString());
45          }
46          return builder.toString();
47      }
48  
49      public SearchQuery append(String query)
50      {
51          if (StringUtils.isEmpty(query))
52          {
53              throw new IllegalArgumentException("Cannot parse empty query string!");
54          }
55          if (query.indexOf(SearchQuery.PARAMETER_SEPARATOR) == -1)
56          {
57              //looks like there's no params.
58              searchString.append(query);
59              return this;
60          }
61  
62          final String[] strings = query.split(SearchQuery.PARAMETER_SEPARATOR);
63          searchString.append(strings[0]);
64          for (int i = 1; i < strings.length; i++)
65          {
66              String string = strings[i];
67              BasicSearchParameter searchParam = new BasicSearchParameter(string);
68              parameters.put(searchParam.getName(), searchParam);
69          }
70          return this;
71      }
72  
73      public String getSearchString()
74      {
75          return URIUtil.decode(searchString.toString());
76      }
77  
78      public int getParameter(String name, int defaultValue)
79      {
80          try
81          {
82              return Integer.parseInt(getParameter(name));
83          }
84          catch (NumberFormatException e)
85          {
86              // ignore
87          }
88          return defaultValue;
89      }
90  
91  }