1 package org.kuali.kpme.edo.util;
2
3
4
5
6
7
8
9
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
45 addParam(URLDecoder.decode(pair), "");
46 } else {
47
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 }