1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.io.support;
29
30 import java.net.URI;
31 import java.net.URISyntaxException;
32 import java.nio.charset.Charset;
33 import java.util.Arrays;
34 import java.util.List;
35
36 import org.apache.hc.core5.http.ClassicHttpRequest;
37 import org.apache.hc.core5.http.ContentType;
38 import org.apache.hc.core5.http.Header;
39 import org.apache.hc.core5.http.HttpEntity;
40 import org.apache.hc.core5.http.HttpHost;
41 import org.apache.hc.core5.http.Method;
42 import org.apache.hc.core5.http.NameValuePair;
43 import org.apache.hc.core5.http.ProtocolVersion;
44 import org.apache.hc.core5.http.io.entity.ByteArrayEntity;
45 import org.apache.hc.core5.http.io.entity.HttpEntities;
46 import org.apache.hc.core5.http.io.entity.StringEntity;
47 import org.apache.hc.core5.http.message.BasicClassicHttpRequest;
48 import org.apache.hc.core5.http.support.AbstractRequestBuilder;
49 import org.apache.hc.core5.net.URIAuthority;
50 import org.apache.hc.core5.net.URIBuilder;
51 import org.apache.hc.core5.util.Args;
52 import org.apache.hc.core5.util.TextUtils;
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public class ClassicRequestBuilder extends AbstractRequestBuilder<ClassicHttpRequest> {
67
68 private HttpEntity entity;
69
70 ClassicRequestBuilder(final String method) {
71 super(method);
72 }
73
74 ClassicRequestBuilder(final Method method) {
75 super(method);
76 }
77
78 ClassicRequestBuilder(final String method, final URI uri) {
79 super(method, uri);
80 }
81
82 ClassicRequestBuilder(final Method method, final URI uri) {
83 super(method, uri);
84 }
85
86 ClassicRequestBuilder(final Method method, final String uri) {
87 super(method, uri);
88 }
89
90 ClassicRequestBuilder(final String method, final String uri) {
91 super(method, uri);
92 }
93
94 public static ClassicRequestBuilder create(final String method) {
95 Args.notBlank(method, "HTTP method");
96 return new ClassicRequestBuilder(method);
97 }
98
99 public static ClassicRequestBuilder get() {
100 return new ClassicRequestBuilder(Method.GET);
101 }
102
103 public static ClassicRequestBuilder get(final URI uri) {
104 return new ClassicRequestBuilder(Method.GET, uri);
105 }
106
107 public static ClassicRequestBuilder get(final String uri) {
108 return new ClassicRequestBuilder(Method.GET, uri);
109 }
110
111 public static ClassicRequestBuilder head() {
112 return new ClassicRequestBuilder(Method.HEAD);
113 }
114
115 public static ClassicRequestBuilder head(final URI uri) {
116 return new ClassicRequestBuilder(Method.HEAD, uri);
117 }
118
119 public static ClassicRequestBuilder head(final String uri) {
120 return new ClassicRequestBuilder(Method.HEAD, uri);
121 }
122
123 public static ClassicRequestBuilder patch() {
124 return new ClassicRequestBuilder(Method.PATCH);
125 }
126
127 public static ClassicRequestBuilder patch(final URI uri) {
128 return new ClassicRequestBuilder(Method.PATCH, uri);
129 }
130
131 public static ClassicRequestBuilder patch(final String uri) {
132 return new ClassicRequestBuilder(Method.PATCH, uri);
133 }
134
135 public static ClassicRequestBuilder post() {
136 return new ClassicRequestBuilder(Method.POST);
137 }
138
139 public static ClassicRequestBuilder post(final URI uri) {
140 return new ClassicRequestBuilder(Method.POST, uri);
141 }
142
143 public static ClassicRequestBuilder post(final String uri) {
144 return new ClassicRequestBuilder(Method.POST, uri);
145 }
146
147 public static ClassicRequestBuilder put() {
148 return new ClassicRequestBuilder(Method.PUT);
149 }
150
151 public static ClassicRequestBuilder put(final URI uri) {
152 return new ClassicRequestBuilder(Method.PUT, uri);
153 }
154
155 public static ClassicRequestBuilder put(final String uri) {
156 return new ClassicRequestBuilder(Method.PUT, uri);
157 }
158
159 public static ClassicRequestBuilder delete() {
160 return new ClassicRequestBuilder(Method.DELETE);
161 }
162
163 public static ClassicRequestBuilder delete(final URI uri) {
164 return new ClassicRequestBuilder(Method.DELETE, uri);
165 }
166
167 public static ClassicRequestBuilder delete(final String uri) {
168 return new ClassicRequestBuilder(Method.DELETE, uri);
169 }
170
171 public static ClassicRequestBuilder trace() {
172 return new ClassicRequestBuilder(Method.TRACE);
173 }
174
175 public static ClassicRequestBuilder trace(final URI uri) {
176 return new ClassicRequestBuilder(Method.TRACE, uri);
177 }
178
179 public static ClassicRequestBuilder trace(final String uri) {
180 return new ClassicRequestBuilder(Method.TRACE, uri);
181 }
182
183 public static ClassicRequestBuilder options() {
184 return new ClassicRequestBuilder(Method.OPTIONS);
185 }
186
187 public static ClassicRequestBuilder options(final URI uri) {
188 return new ClassicRequestBuilder(Method.OPTIONS, uri);
189 }
190
191 public static ClassicRequestBuilder options(final String uri) {
192 return new ClassicRequestBuilder(Method.OPTIONS, uri);
193 }
194
195
196
197
198 public static ClassicRequestBuilder copy(final ClassicHttpRequest request) {
199 Args.notNull(request, "HTTP request");
200 final ClassicRequestBuilder builder = new ClassicRequestBuilder(request.getMethod());
201 builder.digest(request);
202 return builder;
203 }
204
205 protected void digest(final ClassicHttpRequest request) {
206 super.digest(request);
207 setEntity(request.getEntity());
208 }
209
210 @Override
211 public ClassicRequestBuilder setVersion(final ProtocolVersion version) {
212 super.setVersion(version);
213 return this;
214 }
215
216 @Override
217 public ClassicRequestBuilder setUri(final URI uri) {
218 super.setUri(uri);
219 return this;
220 }
221
222 @Override
223 public ClassicRequestBuilder setUri(final String uri) {
224 super.setUri(uri);
225 return this;
226 }
227
228 @Override
229 public ClassicRequestBuilder setScheme(final String scheme) {
230 super.setScheme(scheme);
231 return this;
232 }
233
234 @Override
235 public ClassicRequestBuilder setAuthority(final URIAuthority authority) {
236 super.setAuthority(authority);
237 return this;
238 }
239
240
241
242
243 @Override
244 public ClassicRequestBuilder setHttpHost(final HttpHost httpHost) {
245 super.setHttpHost(httpHost);
246 return this;
247 }
248
249 @Override
250 public ClassicRequestBuilder setPath(final String path) {
251 super.setPath(path);
252 return this;
253 }
254
255 @Override
256 public ClassicRequestBuilder setHeaders(final Header... headers) {
257 super.setHeaders(headers);
258 return this;
259 }
260
261 @Override
262 public ClassicRequestBuilder addHeader(final Header header) {
263 super.addHeader(header);
264 return this;
265 }
266
267 @Override
268 public ClassicRequestBuilder addHeader(final String name, final String value) {
269 super.addHeader(name, value);
270 return this;
271 }
272
273 @Override
274 public ClassicRequestBuilder removeHeader(final Header header) {
275 super.removeHeader(header);
276 return this;
277 }
278
279 @Override
280 public ClassicRequestBuilder removeHeaders(final String name) {
281 super.removeHeaders(name);
282 return this;
283 }
284
285 @Override
286 public ClassicRequestBuilder setHeader(final Header header) {
287 super.setHeader(header);
288 return this;
289 }
290
291 @Override
292 public ClassicRequestBuilder setHeader(final String name, final String value) {
293 super.setHeader(name, value);
294 return this;
295 }
296
297 @Override
298 public ClassicRequestBuilder setCharset(final Charset charset) {
299 super.setCharset(charset);
300 return this;
301 }
302
303 @Override
304 public ClassicRequestBuilder addParameter(final NameValuePair nvp) {
305 super.addParameter(nvp);
306 return this;
307 }
308
309 @Override
310 public ClassicRequestBuilder addParameter(final String name, final String value) {
311 super.addParameter(name, value);
312 return this;
313 }
314
315 @Override
316 public ClassicRequestBuilder addParameters(final NameValuePair... nvps) {
317 super.addParameters(nvps);
318 return this;
319 }
320
321 @Override
322 public ClassicRequestBuilder setAbsoluteRequestUri(final boolean absoluteRequestUri) {
323 super.setAbsoluteRequestUri(absoluteRequestUri);
324 return this;
325 }
326
327 public HttpEntity getEntity() {
328 return entity;
329 }
330
331 public ClassicRequestBuilder setEntity(final HttpEntity entity) {
332 this.entity = entity;
333 return this;
334 }
335
336 public ClassicRequestBuilder setEntity(final String content, final ContentType contentType) {
337 this.entity = new StringEntity(content, contentType);
338 return this;
339 }
340
341 public ClassicRequestBuilder setEntity(final String content) {
342 this.entity = new StringEntity(content);
343 return this;
344 }
345
346 public ClassicRequestBuilder setEntity(final byte[] content, final ContentType contentType) {
347 this.entity = new ByteArrayEntity(content, contentType);
348 return this;
349 }
350
351 @Override
352 public ClassicHttpRequest build() {
353 String path = getPath();
354 if (TextUtils.isEmpty(path)) {
355 path = "/";
356 }
357 HttpEntity entityCopy = this.entity;
358 final String method = getMethod();
359 final List<NameValuePair> parameters = getParameters();
360 if (parameters != null && !parameters.isEmpty()) {
361 if (entityCopy == null && (Method.POST.isSame(method) || Method.PUT.isSame(method))) {
362 entityCopy = HttpEntities.createUrlEncoded(parameters, getCharset());
363 } else {
364 try {
365 final URI uri = new URIBuilder(path)
366 .setCharset(getCharset())
367 .addParameters(parameters)
368 .build();
369 path = uri.toASCIIString();
370 } catch (final URISyntaxException ex) {
371
372 }
373 }
374 }
375
376 if (entityCopy != null && Method.TRACE.isSame(method)) {
377 throw new IllegalStateException(Method.TRACE + " requests may not include an entity");
378 }
379
380 final BasicClassicHttpRequest result = new BasicClassicHttpRequest(method, getScheme(), getAuthority(), path);
381 result.setVersion(getVersion());
382 result.setHeaders(getHeaders());
383 result.setEntity(entityCopy);
384 result.setAbsoluteRequestUri(isAbsoluteRequestUri());
385 return result;
386 }
387
388 @Override
389 public String toString() {
390 final StringBuilder builder = new StringBuilder();
391 builder.append("ClassicRequestBuilder [method=");
392 builder.append(getMethod());
393 builder.append(", scheme=");
394 builder.append(getScheme());
395 builder.append(", authority=");
396 builder.append(getAuthority());
397 builder.append(", path=");
398 builder.append(getPath());
399 builder.append(", parameters=");
400 builder.append(getParameters());
401 builder.append(", headerGroup=");
402 builder.append(Arrays.toString(getHeaders()));
403 builder.append(", entity=");
404 builder.append(entity != null ? entity.getClass() : null);
405 builder.append("]");
406 return builder.toString();
407 }
408
409 }