Sync Integ to Master
[sdc.git] / common-app-api / src / main / java / org / openecomp / sdc / common / http / client / api / HttpClientFactory.java
1 package org.openecomp.sdc.common.http.client.api;
2
3 import org.apache.http.client.HttpRequestRetryHandler;
4 import org.apache.http.client.UserTokenHandler;
5 import org.apache.http.client.config.RequestConfig;
6 import org.apache.http.conn.HttpClientConnectionManager;
7 import org.apache.http.impl.client.CloseableHttpClient;
8 import org.apache.http.impl.client.HttpClients;
9 import org.openecomp.sdc.common.api.Constants;
10 import org.openecomp.sdc.common.http.config.ClientCertificate;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13
14 public class HttpClientFactory {
15
16     private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientFactory.class);
17     private static final UserTokenHandler userTokenHandler = context -> null;
18     private final HttpConnectionMngFactory connectionMngFactory;
19     
20     HttpClientFactory(HttpConnectionMngFactory connectionMngFactory) {
21         this.connectionMngFactory = connectionMngFactory;
22     }
23
24     HttpClient createClient(String protocol, HttpClientConfigImmutable config) {
25         LOGGER.debug("Create {} client based on {}", protocol, config);
26
27         ClientCertificate clientCertificate = Constants.HTTPS.equals(protocol) ? config.getClientCertificate() : null; 
28         HttpClientConnectionManager connectionManager = connectionMngFactory.getOrCreate(clientCertificate);
29         RequestConfig requestConfig = createClientTimeoutConfiguration(config);
30         CloseableHttpClient client = HttpClients.custom()
31                     .setDefaultRequestConfig(requestConfig)
32                     .setConnectionManager(connectionManager)
33                     .setUserTokenHandler(userTokenHandler)
34                     .setRetryHandler(resolveRetryHandler(config))
35                     .build();
36
37         return new HttpClient(client, config);
38     }
39
40     private HttpRequestRetryHandler resolveRetryHandler(HttpClientConfigImmutable config) {
41         return config.getNumOfRetries() > 0 ? config.getRetryHandler() : null;
42     }
43         
44     private RequestConfig createClientTimeoutConfiguration(HttpClientConfigImmutable config) {
45         return RequestConfig.custom()
46                 .setConnectTimeout(config.getConnectTimeoutMs())
47                 .setSocketTimeout(config.getReadTimeoutMs())
48                 .setConnectionRequestTimeout(config.getConnectPoolTimeoutMs())
49                 .build();
50     }
51 }