re base code
[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.openecomp.sdc.common.log.wrappers.Logger;
12
13 public class HttpClientFactory {
14
15     private static final Logger logger = Logger.getLogger(HttpClientFactory.class.getName());
16     private static final UserTokenHandler userTokenHandler = context -> null;
17     private final HttpConnectionMngFactory connectionMngFactory;
18     
19     HttpClientFactory(HttpConnectionMngFactory connectionMngFactory) {
20         this.connectionMngFactory = connectionMngFactory;
21     }
22
23     HttpClient createClient(String protocol, HttpClientConfigImmutable config) {
24         logger.debug("Create {} client based on {}", protocol, config);
25
26         ClientCertificate clientCertificate = Constants.HTTPS.equals(protocol) ? config.getClientCertificate() : null; 
27         HttpClientConnectionManager connectionManager = connectionMngFactory.getOrCreate(clientCertificate);
28         RequestConfig requestConfig = createClientTimeoutConfiguration(config);
29         CloseableHttpClient client = HttpClients.custom()
30                     .setDefaultRequestConfig(requestConfig)
31                     .setConnectionManager(connectionManager)
32                     .setUserTokenHandler(userTokenHandler)
33                     .setRetryHandler(resolveRetryHandler(config))
34                     .build();
35
36         return new HttpClient(client, config);
37     }
38
39     private HttpRequestRetryHandler resolveRetryHandler(HttpClientConfigImmutable config) {
40         return config.getNumOfRetries() > 0 ? config.getRetryHandler() : null;
41     }
42         
43     private RequestConfig createClientTimeoutConfiguration(HttpClientConfigImmutable config) {
44         return RequestConfig.custom()
45                 .setConnectTimeout(config.getConnectTimeoutMs())
46                 .setSocketTimeout(config.getReadTimeoutMs())
47                 .setConnectionRequestTimeout(config.getConnectPoolTimeoutMs())
48                 .build();
49     }
50 }