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/ClassicRequestBuilder.html#ClassicRequestBuilder">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 public ClassicHttpRequest build() {
352 String path = getPath();
353 if (TextUtils.isEmpty(path)) {
354 path = "/";
355 }
356 HttpEntity entityCopy = this.entity;
357 final String method = getMethod();
358 final List<NameValuePair> parameters = getParameters();
359 if (parameters != null && !parameters.isEmpty()) {
360 if (entityCopy == null && (Method.POST.isSame(method) || Method.PUT.isSame(method))) {
361 entityCopy = HttpEntities.createUrlEncoded(parameters, getCharset());
362 } else {
363 try {
364 final URI uri = new URIBuilder(path)
365 .setCharset(getCharset())
366 .addParameters(parameters)
367 .build();
368 path = uri.toASCIIString();
369 } catch (final URISyntaxException ex) {
370
371 }
372 }
373 }
374
375 if (entityCopy != null && Method.TRACE.isSame(method)) {
376 throw new IllegalStateException(Method.TRACE + " requests may not include an entity");
377 }
378
379 final BasicClassicHttpRequesticClassicHttpRequest.html#BasicClassicHttpRequest">BasicClassicHttpRequest result = new BasicClassicHttpRequest(method, getScheme(), getAuthority(), path);
380 result.setVersion(getVersion());
381 result.setHeaders(getHeaders());
382 result.setEntity(entityCopy);
383 result.setAbsoluteRequestUri(isAbsoluteRequestUri());
384 return result;
385 }
386
387 @Override
388 public String toString() {
389 final StringBuilder builder = new StringBuilder();
390 builder.append("ClassicRequestBuilder [method=");
391 builder.append(getMethod());
392 builder.append(", scheme=");
393 builder.append(getScheme());
394 builder.append(", authority=");
395 builder.append(getAuthority());
396 builder.append(", path=");
397 builder.append(getPath());
398 builder.append(", parameters=");
399 builder.append(getParameters());
400 builder.append(", headerGroup=");
401 builder.append(Arrays.toString(getHeaders()));
402 builder.append(", entity=");
403 builder.append(entity != null ? entity.getClass() : null);
404 builder.append("]");
405 return builder.toString();
406 }
407
408 }