1 package com.atlassian.httpclient.apache.httpcomponents.proxy;
2
3 import com.atlassian.fugue.Option;
4 import com.atlassian.httpclient.api.factory.HttpClientOptions;
5 import com.google.common.collect.Lists;
6 import org.apache.http.HttpHost;
7
8 import static com.atlassian.httpclient.apache.httpcomponents.proxy.ProxyConfig.AuthenticationInfo;
9
10 public class ProxyConfigFactory {
11 public static Option<HttpHost> getProxyHost(final HttpClientOptions options) {
12 return getProxyConfig(options).fold(Option::none, ProxyConfig::getProxyHost);
13 }
14
15 public static Iterable<AuthenticationInfo> getProxyAuthentication(final HttpClientOptions options) {
16 return getProxyConfig(options).fold(Lists::newLinkedList, ProxyConfig::getAuthenticationInfo);
17 }
18
19 public static Option<ProxyConfig> getProxyConfig(final HttpClientOptions options) {
20 final Option<ProxyConfig> config;
21 switch (options.getProxyOptions().getProxyMode()) {
22 case SYSTEM_PROPERTIES:
23 config = Option.some(new SystemPropertiesProxyConfig());
24 break;
25 case CONFIGURED:
26 config = Option.some(new ProvidedProxyConfig(
27 options.getProxyOptions().getProxyHosts(), options.getProxyOptions().getNonProxyHosts()));
28 break;
29 default:
30 config = Option.none();
31 }
32 return config;
33 }
34 }