View Javadoc

1   package com.atlassian.jira.rest.client.internal.async;
2   
3   import com.atlassian.httpclient.apache.httpcomponents.DefaultRequest;
4   import com.atlassian.httpclient.api.HttpClient;
5   import com.atlassian.httpclient.api.Request;
6   import com.atlassian.httpclient.api.ResponsePromise;
7   import com.atlassian.httpclient.api.ResponseTransformation;
8   import com.atlassian.jira.rest.client.api.AuthenticationHandler;
9   
10  import java.net.URI;
11  import java.util.regex.Pattern;
12  
13  /**
14   * Abstract wrapper for an Atlassian HttpClient.
15   */
16  public abstract class AtlassianHttpClientDecorator implements DisposableHttpClient {
17  
18      private final HttpClient httpClient;
19      private final AuthenticationHandler authenticationHandler;
20  
21      public AtlassianHttpClientDecorator(HttpClient httpClient, AuthenticationHandler authenticationHandler) {
22          this.httpClient = httpClient;
23          this.authenticationHandler = authenticationHandler;
24      }
25  
26      public void flushCacheByUriPattern(Pattern urlPattern) {
27          httpClient.flushCacheByUriPattern(urlPattern);
28      }
29  
30      public Request.Builder newRequest() {
31          return new AuthenticatedRequestBuilder();
32      }
33  
34      public Request.Builder newRequest(URI uri) {
35          final Request.Builder builder = new AuthenticatedRequestBuilder();
36          builder.setUri(uri);
37          return builder;
38      }
39  
40      public Request.Builder newRequest(URI uri, String contentType, String entity) {
41          final Request.Builder builder = new AuthenticatedRequestBuilder();
42          builder.setUri(uri);
43          builder.setContentType(contentType);
44          builder.setEntity(entity);
45          return builder;
46      }
47  
48      public Request.Builder newRequest(String uri) {
49          final Request.Builder builder = new AuthenticatedRequestBuilder();
50          builder.setUri(URI.create(uri));
51          return builder;
52      }
53  
54      public Request.Builder newRequest(String uri, String contentType, String entity) {
55          final Request.Builder builder = new AuthenticatedRequestBuilder();
56          builder.setUri(URI.create(uri));
57          builder.setContentType(contentType);
58          builder.setEntity(entity);
59          return builder;
60      }
61  
62      @Override
63      public <A> ResponseTransformation.Builder<A> transformation() {
64          return httpClient.transformation();
65      }
66  
67      @Override
68      public ResponsePromise execute(Request request) {
69          return httpClient.execute(request);
70      }
71  
72      private class AuthenticatedRequestBuilder extends DefaultRequest.DefaultRequestBuilder {
73          public AuthenticatedRequestBuilder() {
74              super(httpClient);
75          }
76  
77          @Override
78          public ResponsePromise execute(Request.Method method) {
79              if (authenticationHandler != null) {
80                  this.setMethod(method);
81                  authenticationHandler.configure(this);
82              }
83              return super.execute(method);
84          }
85      }
86  }