1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.seasar.cubby.internal.util;
17
18 import java.io.UnsupportedEncodingException;
19 import java.net.URLEncoder;
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class QueryStringBuilder {
37
38
39
40
41 private final StringBuilder queryString = new StringBuilder();
42
43
44
45
46 private String encode = "UTF-8";
47
48
49
50
51 private final String baseUri;
52
53
54
55
56
57
58
59 public QueryStringBuilder() {
60 this(null);
61 }
62
63
64
65
66
67
68
69
70
71
72 public QueryStringBuilder(final String baseUri) {
73 this.baseUri = baseUri;
74 }
75
76
77
78
79
80
81 public void setEncode(final String encode) {
82 this.encode = encode;
83 }
84
85
86
87
88
89
90
91
92
93 public void addParam(final String name, final Object value) {
94 if (value != null && value.getClass().isArray()) {
95 final Object[] values = (Object[]) value;
96 for (final Object v : values) {
97 appendParams(name, v);
98 }
99 } else {
100 appendParams(name, value);
101 }
102 }
103
104
105
106
107 @Override
108 public String toString() {
109 if (this.baseUri == null) {
110 return queryString.toString();
111 } else {
112 final StringBuilder baseUrlBuf = new StringBuilder(this.baseUri);
113 if (baseUrlBuf.indexOf("?") == -1) {
114 baseUrlBuf.append("?");
115 } else if (queryString.indexOf("?") < queryString.length()) {
116 baseUrlBuf.append("&");
117 }
118 return baseUrlBuf.toString() + queryString.toString();
119 }
120 }
121
122
123
124
125
126
127
128
129
130 private void appendParams(final String name, final Object value) {
131 if (queryString.length() > 0) {
132 queryString.append("&");
133 }
134 try {
135 queryString.append(URLEncoder.encode(name, encode));
136 queryString.append("=");
137 if (value != null) {
138 queryString.append(URLEncoder.encode(value.toString(), encode));
139 }
140 } catch (final UnsupportedEncodingException e) {
141 throw new IllegalArgumentException(e);
142 }
143 }
144
145 }