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
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 }