/*
* Copyright (c) 2010-2012 Sonatype, Inc. All rights reserved.
*
* This program is licensed to you under the Apache License Version 2.0,
* and you may not use this file except in compliance with the Apache License Version 2.0.
* You may obtain a copy of the Apache License Version 2.0 at http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the Apache License Version 2.0 is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the Apache License Version 2.0 for the specific language governing permissions and limitations there under.
*/
package com.ning.http.client;
import com.ning.http.client.filter.IOExceptionFilter;
import com.ning.http.client.filter.RequestFilter;
import com.ning.http.client.filter.ResponseFilter;
import com.ning.http.util.ProxyUtils;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import java.util.LinkedList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
/**
* Simple JavaBean version of {@link AsyncHttpClientConfig}
*/
public class AsyncHttpClientConfigBean extends AsyncHttpClientConfig {
public AsyncHttpClientConfigBean() {
configureExecutors();
configureDefaults();
configureFilters();
}
void configureFilters() {
requestFilters = new LinkedList<RequestFilter>();
responseFilters = new LinkedList<ResponseFilter>();
ioExceptionFilters = new LinkedList<IOExceptionFilter>();
}
void configureDefaults() {
maxTotalConnections = Integer.getInteger(ASYNC_CLIENT + "defaultMaxTotalConnections", -1);
maxConnectionPerHost = Integer.getInteger(ASYNC_CLIENT + "defaultMaxConnectionsPerHost", -1);
connectionTimeOutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultConnectionTimeoutInMS", 60 * 1000);
idleConnectionInPoolTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultIdleConnectionInPoolTimeoutInMS", 60 * 1000);
idleConnectionTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultIdleConnectionTimeoutInMS", 60 * 1000);
requestTimeoutInMs = Integer.getInteger(ASYNC_CLIENT + "defaultRequestTimeoutInMS", 60 * 1000);
redirectEnabled = Boolean.getBoolean(ASYNC_CLIENT + "defaultRedirectsEnabled");
maxDefaultRedirects = Integer.getInteger(ASYNC_CLIENT + "defaultMaxRedirects", 5);
compressionEnabled = Boolean.getBoolean(ASYNC_CLIENT + "compressionEnabled");
userAgent = System.getProperty(ASYNC_CLIENT + "userAgent", "NING/1.0");
boolean useProxyProperties = Boolean.getBoolean(ASYNC_CLIENT + "useProxyProperties");
if (useProxyProperties) {
proxyServer = ProxyUtils.createProxy(System.getProperties());
}
allowPoolingConnection = true;
requestCompressionLevel = -1;
maxRequestRetry = 5;
allowSslConnectionPool = true;
useRawUrl = false;
removeQueryParamOnRedirect = true;
hostnameVerifier = new HostnameVerifier() {
public boolean verify(String s, SSLSession sslSession) {
return true;
}
};
}
void configureExecutors() {
reaper = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors(), new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread t = new Thread(r, "AsyncHttpClient-Reaper");
t.setDaemon(true);
return t;
}
});
applicationThreadPool = Executors.newCachedThreadPool(new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread t = new Thread(r, "AsyncHttpClient-Callback");
t.setDaemon(true);
return t;
}
});
}
public AsyncHttpClientConfigBean setMaxTotalConnections(int maxTotalConnections) {
this.maxTotalConnections = maxTotalConnections;
return this;
}
public AsyncHttpClientConfigBean setMaxConnectionPerHost(int maxConnectionPerHost) {
this.maxConnectionPerHost = maxConnectionPerHost;
return this;
}
public AsyncHttpClientConfigBean setConnectionTimeOutInMs(int connectionTimeOutInMs) {
this.connectionTimeOutInMs = connectionTimeOutInMs;
return this;
}
public AsyncHttpClientConfigBean setIdleConnectionInPoolTimeoutInMs(int idleConnectionInPoolTimeoutInMs) {
this.idleConnectionInPoolTimeoutInMs = idleConnectionInPoolTimeoutInMs;
return this;
}
public AsyncHttpClientConfigBean setIdleConnectionTimeoutInMs(int idleConnectionTimeoutInMs) {
this.idleConnectionTimeoutInMs = idleConnectionTimeoutInMs;
return this;
}
public AsyncHttpClientConfigBean setRequestTimeoutInMs(int requestTimeoutInMs) {
this.requestTimeoutInMs = requestTimeoutInMs;
return this;
}
public AsyncHttpClientConfigBean setRedirectEnabled(boolean redirectEnabled) {
this.redirectEnabled = redirectEnabled;
return this;
}
public AsyncHttpClientConfigBean setMaxDefaultRedirects(int maxDefaultRedirects) {
this.maxDefaultRedirects = maxDefaultRedirects;
return this;
}
public AsyncHttpClientConfigBean setCompressionEnabled(boolean compressionEnabled) {
this.compressionEnabled = compressionEnabled;
return this;
}
public AsyncHttpClientConfigBean setUserAgent(String userAgent) {
this.userAgent = userAgent;
return this;
}
public AsyncHttpClientConfigBean setAllowPoolingConnection(boolean allowPoolingConnection) {
this.allowPoolingConnection = allowPoolingConnection;
return this;
}
public AsyncHttpClientConfigBean setReaper(ScheduledExecutorService reaper) {
if (this.reaper != null) {
this.reaper.shutdownNow();
}
this.reaper = reaper;
return this;
}
public AsyncHttpClientConfigBean setApplicationThreadPool(ExecutorService applicationThreadPool) {
if (this.applicationThreadPool != null) {
this.applicationThreadPool.shutdownNow();
}
this.applicationThreadPool = applicationThreadPool;
return this;
}
public AsyncHttpClientConfigBean setProxyServer(ProxyServer proxyServer) {
this.proxyServer = proxyServer;
return this;
}
public AsyncHttpClientConfigBean setSslContext(SSLContext sslContext) {
this.sslContext = sslContext;
return this;
}
public AsyncHttpClientConfigBean setSslEngineFactory(SSLEngineFactory sslEngineFactory) {
this.sslEngineFactory = sslEngineFactory;
return this;
}
public AsyncHttpClientConfigBean setProviderConfig(AsyncHttpProviderConfig<?, ?> providerConfig) {
this.providerConfig = providerConfig;
return this;
}
public AsyncHttpClientConfigBean setConnectionsPool(ConnectionsPool<?, ?> connectionsPool) {
this.connectionsPool = connectionsPool;
return this;
}
public AsyncHttpClientConfigBean setRealm(Realm realm) {
this.realm = realm;
return this;
}
public AsyncHttpClientConfigBean addRequestFilter(RequestFilter requestFilter) {
requestFilters.add(requestFilter);
return this;
}
public AsyncHttpClientConfigBean addResponseFilters(ResponseFilter responseFilter) {
responseFilters.add(responseFilter);
return this;
}
public AsyncHttpClientConfigBean addIoExceptionFilters(IOExceptionFilter ioExceptionFilter) {
ioExceptionFilters.add(ioExceptionFilter);
return this;
}
public AsyncHttpClientConfigBean setRequestCompressionLevel(int requestCompressionLevel) {
this.requestCompressionLevel = requestCompressionLevel;
return this;
}
public AsyncHttpClientConfigBean setMaxRequestRetry(int maxRequestRetry) {
this.maxRequestRetry = maxRequestRetry;
return this;
}
public AsyncHttpClientConfigBean setAllowSslConnectionPool(boolean allowSslConnectionPool) {
this.allowSslConnectionPool = allowSslConnectionPool;
return this;
}
public AsyncHttpClientConfigBean setUseRawUrl(boolean useRawUrl) {
this.useRawUrl = useRawUrl;
return this;
}
public AsyncHttpClientConfigBean setRemoveQueryParamOnRedirect(boolean removeQueryParamOnRedirect) {
this.removeQueryParamOnRedirect = removeQueryParamOnRedirect;
return this;
}
public AsyncHttpClientConfigBean setHostnameVerifier(HostnameVerifier hostnameVerifier) {
this.hostnameVerifier = hostnameVerifier;
return this;
}
public AsyncHttpClientConfigBean setIoThreadMultiplier(int ioThreadMultiplier) {
this.ioThreadMultiplier = ioThreadMultiplier;
return this;
}
}