View Javadoc
1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
25   *
26   */
27  
28  package org.apache.hc.core5.http.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.Header;
37  import org.apache.hc.core5.http.HttpHost;
38  import org.apache.hc.core5.http.HttpRequest;
39  import org.apache.hc.core5.http.Method;
40  import org.apache.hc.core5.http.NameValuePair;
41  import org.apache.hc.core5.http.ProtocolVersion;
42  import org.apache.hc.core5.http.message.BasicHttpRequest;
43  import org.apache.hc.core5.net.URIAuthority;
44  import org.apache.hc.core5.net.URIBuilder;
45  import org.apache.hc.core5.util.Args;
46  
47  /**
48   * Builder for {@link BasicHttpRequest} instances.
49   *
50   * @since 5.1
51   */
52  public class BasicRequestBuilder extends AbstractRequestBuilder<BasicHttpRequest> {
53  
54      BasicRequestBuilder(final String method) {
55          super(method);
56      }
57  
58      BasicRequestBuilder(final Method method) {
59          super(method);
60      }
61  
62      BasicRequestBuilder(final String method, final URI uri) {
63          super(method, uri);
64      }
65  
66      BasicRequestBuilder(final Method method, final URI uri) {
67          super(method, uri);
68      }
69  
70      BasicRequestBuilder(final Method method, final String uri) {
71          super(method, uri);
72      }
73  
74      BasicRequestBuilder(final String method, final String uri) {
75          super(method, uri);
76      }
77  
78      public static BasicRequestBuilder create(final String method) {
79          Args.notBlank(method, "HTTP method");
80          return new BasicRequestBuilder(method);
81      }
82  
83      public static BasicRequestBuilder get() {
84          return new BasicRequestBuilder(Method.GET);
85      }
86  
87      public static BasicRequestBuilder get(final URI uri) {
88          return new BasicRequestBuilder(Method.GET, uri);
89      }
90  
91      public static BasicRequestBuilder get(final String uri) {
92          return new BasicRequestBuilder(Method.GET, uri);
93      }
94  
95      public static BasicRequestBuilder head() {
96          return new BasicRequestBuilder(Method.HEAD);
97      }
98  
99      public static BasicRequestBuilder head(final URI uri) {
100         return new BasicRequestBuilder(Method.HEAD, uri);
101     }
102 
103     public static BasicRequestBuilder head(final String uri) {
104         return new BasicRequestBuilder(Method.HEAD, uri);
105     }
106 
107     public static BasicRequestBuilder patch() {
108         return new BasicRequestBuilder(Method.PATCH);
109     }
110 
111     public static BasicRequestBuilder patch(final URI uri) {
112         return new BasicRequestBuilder(Method.PATCH, uri);
113     }
114 
115     public static BasicRequestBuilder patch(final String uri) {
116         return new BasicRequestBuilder(Method.PATCH, uri);
117     }
118 
119     public static BasicRequestBuilder post() {
120         return new BasicRequestBuilder(Method.POST);
121     }
122 
123     public static BasicRequestBuilder post(final URI uri) {
124         return new BasicRequestBuilder(Method.POST, uri);
125     }
126 
127     public static BasicRequestBuilder post(final String uri) {
128         return new BasicRequestBuilder(Method.POST, uri);
129     }
130 
131     public static BasicRequestBuilder put() {
132         return new BasicRequestBuilder(Method.PUT);
133     }
134 
135     public static BasicRequestBuilder put(final URI uri) {
136         return new BasicRequestBuilder(Method.PUT, uri);
137     }
138 
139     public static BasicRequestBuilder put(final String uri) {
140         return new BasicRequestBuilder(Method.PUT, uri);
141     }
142 
143     public static BasicRequestBuilder delete() {
144         return new BasicRequestBuilder(Method.DELETE);
145     }
146 
147     public static BasicRequestBuilder delete(final URI uri) {
148         return new BasicRequestBuilder(Method.DELETE, uri);
149     }
150 
151     public static BasicRequestBuilder delete(final String uri) {
152         return new BasicRequestBuilder(Method.DELETE, uri);
153     }
154 
155     public static BasicRequestBuilder trace() {
156         return new BasicRequestBuilder(Method.TRACE);
157     }
158 
159     public static BasicRequestBuilder trace(final URI uri) {
160         return new BasicRequestBuilder(Method.TRACE, uri);
161     }
162 
163     public static BasicRequestBuilder trace(final String uri) {
164         return new BasicRequestBuilder(Method.TRACE, uri);
165     }
166 
167     public static BasicRequestBuilder options() {
168         return new BasicRequestBuilder(Method.OPTIONS);
169     }
170 
171     public static BasicRequestBuilder options(final URI uri) {
172         return new BasicRequestBuilder(Method.OPTIONS, uri);
173     }
174 
175     public static BasicRequestBuilder options(final String uri) {
176         return new BasicRequestBuilder(Method.OPTIONS, uri);
177     }
178 
179     public static BasicRequestBuilder copy(final HttpRequest request) {
180         Args.notNull(request, "HTTP request");
181         final BasicRequestBuildericRequestBuilder.html#BasicRequestBuilder">BasicRequestBuilder builder = new BasicRequestBuilder(request.getMethod());
182         builder.digest(request);
183         return builder;
184     }
185 
186     @Override
187     public BasicRequestBuilder setVersion(final ProtocolVersion version) {
188         super.setVersion(version);
189         return this;
190     }
191 
192     @Override
193     public BasicRequestBuilder setUri(final URI uri) {
194         super.setUri(uri);
195         return this;
196     }
197 
198     @Override
199     public BasicRequestBuilder setUri(final String uri) {
200         super.setUri(uri);
201         return this;
202     }
203 
204     @Override
205     public BasicRequestBuilder setScheme(final String scheme) {
206         super.setScheme(scheme);
207         return this;
208     }
209 
210     @Override
211     public BasicRequestBuilder setAuthority(final URIAuthority authority) {
212         super.setAuthority(authority);
213         return this;
214     }
215 
216     /**
217      * @since 5.1
218      */
219     @Override
220     public BasicRequestBuilder setHttpHost(final HttpHost httpHost) {
221         super.setHttpHost(httpHost);
222         return this;
223     }
224 
225     @Override
226     public BasicRequestBuilder setPath(final String path) {
227         super.setPath(path);
228         return this;
229     }
230 
231     @Override
232     public BasicRequestBuilder setHeaders(final Header... headers) {
233         super.setHeaders(headers);
234         return this;
235     }
236 
237     @Override
238     public BasicRequestBuilder addHeader(final Header header) {
239         super.addHeader(header);
240         return this;
241     }
242 
243     @Override
244     public BasicRequestBuilder addHeader(final String name, final String value) {
245         super.addHeader(name, value);
246         return this;
247     }
248 
249     @Override
250     public BasicRequestBuilder removeHeader(final Header header) {
251         super.removeHeader(header);
252         return this;
253     }
254 
255     @Override
256     public BasicRequestBuilder removeHeaders(final String name) {
257         super.removeHeaders(name);
258         return this;
259     }
260 
261     @Override
262     public BasicRequestBuilder setHeader(final Header header) {
263         super.setHeader(header);
264         return this;
265     }
266 
267     @Override
268     public BasicRequestBuilder setHeader(final String name, final String value) {
269         super.setHeader(name, value);
270         return this;
271     }
272 
273     @Override
274     public BasicRequestBuilder setCharset(final Charset charset) {
275         super.setCharset(charset);
276         return this;
277     }
278 
279     @Override
280     public BasicRequestBuilder addParameter(final NameValuePair nvp) {
281         super.addParameter(nvp);
282         return this;
283     }
284 
285     @Override
286     public BasicRequestBuilder addParameter(final String name, final String value) {
287         super.addParameter(name, value);
288         return this;
289     }
290 
291     @Override
292     public BasicRequestBuilder addParameters(final NameValuePair... nvps) {
293         super.addParameters(nvps);
294         return this;
295     }
296 
297     @Override
298     public BasicRequestBuilder setAbsoluteRequestUri(final boolean absoluteRequestUri) {
299         super.setAbsoluteRequestUri(absoluteRequestUri);
300         return this;
301     }
302 
303     @Override
304     public BasicHttpRequest build() {
305         String path = getPath();
306         final List<NameValuePair> parameters = getParameters();
307         if (parameters != null && !parameters.isEmpty()) {
308             try {
309                 final URI uri = new URIBuilder(path)
310                         .setCharset(getCharset())
311                         .addParameters(parameters)
312                         .build();
313                 path = uri.toASCIIString();
314             } catch (final URISyntaxException ex) {
315                 // should never happen
316             }
317         }
318         final BasicHttpRequest/BasicHttpRequest.html#BasicHttpRequest">BasicHttpRequest result = new BasicHttpRequest(getMethod(), getScheme(), getAuthority(), path);
319         result.setVersion(getVersion());
320         result.setHeaders(getHeaders());
321         result.setAbsoluteRequestUri(isAbsoluteRequestUri());
322         return result;
323     }
324 
325     @Override
326     public String toString() {
327         final StringBuilder builder = new StringBuilder();
328         builder.append("BasicRequestBuilder [method=");
329         builder.append(getMethod());
330         builder.append(", scheme=");
331         builder.append(getScheme());
332         builder.append(", authority=");
333         builder.append(getAuthority());
334         builder.append(", path=");
335         builder.append(getPath());
336         builder.append(", parameters=");
337         builder.append(getParameters());
338         builder.append(", headerGroup=");
339         builder.append(Arrays.toString(getHeaders()));
340         builder.append("]");
341         return builder.toString();
342     }
343 
344 }