View Javadoc
1   package org.kuali.kpme.edo.util;
2   
3   /**
4    * $HeadURL$
5    * $Revision$
6    * Created with IntelliJ IDEA.
7    * User: bradleyt
8    * Date: 3/13/13
9    * Time: 8:20 AM
10   */
11  import java.util.*;
12  import java.net.URLEncoder;
13  import java.net.URLDecoder;
14  
15  public class QueryParams {
16      private static class KVP {
17          final String key;
18          final String value;
19          KVP (String key, String value) {
20              this.key = key;
21              this.value = value;
22          }
23      }
24  
25      List<KVP> query = new ArrayList<KVP>();
26  
27      public QueryParams(String queryString) {
28          parse(queryString);
29      }
30  
31      public QueryParams() {
32      }
33  
34      public void addParam(String key, String value) {
35          if (key == null || value == null)
36              throw new NullPointerException("null parameter key or value");
37          query.add(new KVP(key, value));
38      }
39  
40      private void parse(String queryString) {
41          for (String pair : queryString.split("&")) {
42              int eq = pair.indexOf("=");
43              if (eq < 0) {
44                  // key with no value
45                  addParam(URLDecoder.decode(pair), "");
46              } else {
47                  // key=value
48                  String key = URLDecoder.decode(pair.substring(0, eq));
49                  String value = URLDecoder.decode(pair.substring(eq + 1));
50                  query.add(new KVP(key, value));
51              }
52          }
53      }
54  
55      public String toQueryString() {
56          StringBuilder sb = new StringBuilder();
57          for (KVP kvp : query) {
58              if (sb.length() > 0) {
59                  sb.append('&');
60              }
61              sb.append(URLEncoder.encode(kvp.key));
62              if (!kvp.value.equals("")) {
63                  sb.append('=');
64                  sb.append(URLEncoder.encode(kvp.value));
65              }
66          }
67          return sb.toString();
68      }
69  
70      public String getParameter(String key) {
71          for (KVP kvp : query) {
72              if (kvp.key.equals(key)) {
73                  return kvp.value;
74              }
75          }
76          return null;
77      }
78  
79      public List<String> getParameterValues(String key) {
80          List<String> list = new LinkedList<String>();
81          for (KVP kvp : query) {
82              if (kvp.key.equals(key)) {
83                  list.add(kvp.value);
84              }
85          }
86          return list;
87      }
88  
89      public static void main(String[] args) {
90          QueryParams qp = new QueryParams("k1=v1&k2&k3=v3&k1=v4&k1&k5=hello+%22world");
91          System.out.println("getParameter:");
92          String[] keys = new String[] { "k1", "k2", "k3", "k5" };
93          for (String key : keys) {
94              System.out.println(key + ": " + qp.getParameter(key));
95          }
96          System.out.println("getParameters(k1): " + qp.getParameterValues("k1"));
97      }
98  }