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