Skip to content

Commit

Permalink
Dsl for AdvancedConfig
Browse files Browse the repository at this point in the history
  • Loading branch information
slandelle committed Oct 13, 2015
1 parent 6e711e8 commit 8b43bdb
Show file tree
Hide file tree
Showing 74 changed files with 518 additions and 445 deletions.
182 changes: 125 additions & 57 deletions client/src/main/java/org/asynchttpclient/AdvancedConfig.java
Expand Up @@ -33,27 +33,46 @@

public class AdvancedConfig {

private final Map<ChannelOption<Object>, Object> channelOptions = new HashMap<>();
private EventLoopGroup eventLoopGroup;
private boolean preferNative;
private AdditionalPipelineInitializer httpAdditionalPipelineInitializer;
private AdditionalPipelineInitializer wsAdditionalPipelineInitializer;
private ResponseBodyPartFactory bodyPartFactory = new EagerResponseBodyPartFactory();
private ChannelPool channelPool;
private Timer nettyTimer;
private NettyWebSocketFactory nettyWebSocketFactory = new DefaultNettyWebSocketFactory();
private ConnectionStrategy connectionStrategy = new DefaultConnectionStrategy();

/**
* @param name the name of the ChannelOption
* @param value the value of the ChannelOption
* @param <T> the type of value
* @return this instance of AdvancedConfig
*/
@SuppressWarnings("unchecked")
public <T> AdvancedConfig addChannelOption(ChannelOption<T> name, T value) {
channelOptions.put((ChannelOption<Object>) name, value);
return this;
private final Map<ChannelOption<Object>, Object> channelOptions;
private final EventLoopGroup eventLoopGroup;
private final boolean preferNative;
private final AdditionalPipelineInitializer httpAdditionalPipelineInitializer;
private final AdditionalPipelineInitializer wsAdditionalPipelineInitializer;
private final ResponseBodyPartFactory bodyPartFactory;
private final ChannelPool channelPool;
private final Timer nettyTimer;
private final NettyWebSocketFactory nettyWebSocketFactory;
private final ConnectionStrategy connectionStrategy;

public AdvancedConfig(//
Map<ChannelOption<Object>, Object> channelOptions,//
EventLoopGroup eventLoopGroup,//
boolean preferNative,//
AdditionalPipelineInitializer httpAdditionalPipelineInitializer,//
AdditionalPipelineInitializer wsAdditionalPipelineInitializer,//
ResponseBodyPartFactory bodyPartFactory,//
ChannelPool channelPool,//
Timer nettyTimer,//
NettyWebSocketFactory nettyWebSocketFactory,//
ConnectionStrategy connectionStrategy) {

if (bodyPartFactory == null)
throw new NullPointerException("bodyPartFactory");
if (nettyWebSocketFactory == null)
throw new NullPointerException("nettyWebSocketFactory");
if (connectionStrategy == null)
throw new NullPointerException("connectionStrategy");

this.channelOptions = channelOptions;
this.eventLoopGroup = eventLoopGroup;
this.preferNative = preferNative;
this.httpAdditionalPipelineInitializer = httpAdditionalPipelineInitializer;
this.wsAdditionalPipelineInitializer = wsAdditionalPipelineInitializer;
this.bodyPartFactory = bodyPartFactory;
this.channelPool = channelPool;
this.nettyTimer = nettyTimer;
this.nettyWebSocketFactory = nettyWebSocketFactory;
this.connectionStrategy = connectionStrategy;
}

public Map<ChannelOption<Object>, Object> getChannelOptions() {
Expand All @@ -64,14 +83,6 @@ public EventLoopGroup getEventLoopGroup() {
return eventLoopGroup;
}

public void setEventLoopGroup(EventLoopGroup eventLoopGroup) {
this.eventLoopGroup = eventLoopGroup;
}

public void setPreferNative(boolean preferNative) {
this.preferNative = preferNative;
}

public boolean isPreferNative() {
return preferNative;
}
Expand All @@ -80,58 +91,115 @@ public AdditionalPipelineInitializer getHttpAdditionalPipelineInitializer() {
return httpAdditionalPipelineInitializer;
}

public void setHttpAdditionalPipelineInitializer(AdditionalPipelineInitializer httpAdditionalPipelineInitializer) {
this.httpAdditionalPipelineInitializer = httpAdditionalPipelineInitializer;
}

public AdditionalPipelineInitializer getWsAdditionalPipelineInitializer() {
return wsAdditionalPipelineInitializer;
}

public void setWsAdditionalPipelineInitializer(AdditionalPipelineInitializer wsAdditionalPipelineInitializer) {
this.wsAdditionalPipelineInitializer = wsAdditionalPipelineInitializer;
}

public ResponseBodyPartFactory getBodyPartFactory() {
return bodyPartFactory;
}

public void setBodyPartFactory(ResponseBodyPartFactory bodyPartFactory) {
this.bodyPartFactory = bodyPartFactory;
}

public ChannelPool getChannelPool() {
return channelPool;
}

public void setChannelPool(ChannelPool channelPool) {
this.channelPool = channelPool;
}

public Timer getNettyTimer() {
return nettyTimer;
}

public void setNettyTimer(Timer nettyTimer) {
this.nettyTimer = nettyTimer;
}

public NettyWebSocketFactory getNettyWebSocketFactory() {
return nettyWebSocketFactory;
}

public void setNettyWebSocketFactory(NettyWebSocketFactory nettyWebSocketFactory) {
this.nettyWebSocketFactory = nettyWebSocketFactory;
}

public ConnectionStrategy getConnectionStrategy() {
return connectionStrategy;
}

public void setConnectionStrategy(ConnectionStrategy connectionStrategy) {
this.connectionStrategy = connectionStrategy;
public static class Builder {

private Map<ChannelOption<Object>, Object> channelOptions = new HashMap<>();
private EventLoopGroup eventLoopGroup;
private boolean preferNative;
private AdditionalPipelineInitializer httpAdditionalPipelineInitializer;
private AdditionalPipelineInitializer wsAdditionalPipelineInitializer;
private ResponseBodyPartFactory bodyPartFactory = new EagerResponseBodyPartFactory();
private ChannelPool channelPool;
private Timer nettyTimer;
private NettyWebSocketFactory nettyWebSocketFactory = new DefaultNettyWebSocketFactory();
private ConnectionStrategy connectionStrategy = new DefaultConnectionStrategy();

/**
* @param name the name of the ChannelOption
* @param value the value of the ChannelOption
* @param <T> the type of value
* @return this instance of AdvancedConfig
*/
@SuppressWarnings("unchecked")
public <T> Builder addChannelOption(ChannelOption<T> name, T value) {
channelOptions.put((ChannelOption<Object>) name, value);
return this;
}

public Builder eventLoopGroup(EventLoopGroup eventLoopGroup) {
this.eventLoopGroup = eventLoopGroup;
return this;
}

public Builder preferNative(boolean preferNative) {
this.preferNative = preferNative;
return this;
}

public Builder httpAdditionalPipelineInitializer(AdditionalPipelineInitializer httpAdditionalPipelineInitializer) {
this.httpAdditionalPipelineInitializer = httpAdditionalPipelineInitializer;
return this;
}

public Builder wsAdditionalPipelineInitializer(AdditionalPipelineInitializer wsAdditionalPipelineInitializer) {
this.wsAdditionalPipelineInitializer = wsAdditionalPipelineInitializer;
return this;
}

public Builder bodyPartFactory(ResponseBodyPartFactory bodyPartFactory) {
this.bodyPartFactory = bodyPartFactory;
return this;
}

public Builder channelPool(ChannelPool channelPool) {
this.channelPool = channelPool;
return this;
}

public Builder nettyTimer(Timer nettyTimer) {
this.nettyTimer = nettyTimer;
return this;
}

public Builder nettyWebSocketFactory(NettyWebSocketFactory nettyWebSocketFactory) {
this.nettyWebSocketFactory = nettyWebSocketFactory;
return this;
}

public Builder connectionStrategy(ConnectionStrategy connectionStrategy) {
this.connectionStrategy = connectionStrategy;
return this;
}

public AdvancedConfig build() {
return new AdvancedConfig(//
channelOptions,//
eventLoopGroup,//
preferNative,//
httpAdditionalPipelineInitializer,//
wsAdditionalPipelineInitializer,//
bodyPartFactory,//
channelPool,//
nettyTimer,//
nettyWebSocketFactory,//
connectionStrategy);
}
}

public static interface AdditionalPipelineInitializer {

void initPipeline(ChannelPipeline pipeline) throws Exception;
Expand Down Expand Up @@ -162,7 +230,7 @@ public static interface NettyWebSocketFactory {
NettyWebSocket newNettyWebSocket(Channel channel, AsyncHttpClientConfig config);
}

public class DefaultNettyWebSocketFactory implements NettyWebSocketFactory {
public static class DefaultNettyWebSocketFactory implements NettyWebSocketFactory {

@Override
public NettyWebSocket newNettyWebSocket(Channel channel, AsyncHttpClientConfig config) {
Expand Down
Expand Up @@ -21,6 +21,7 @@

import java.util.concurrent.atomic.AtomicBoolean;

import org.asynchttpclient.AdvancedConfig.Builder;
import org.asynchttpclient.filter.FilterContext;
import org.asynchttpclient.filter.FilterException;
import org.asynchttpclient.filter.RequestFilter;
Expand Down Expand Up @@ -69,7 +70,7 @@ public DefaultAsyncHttpClient(AsyncHttpClientConfig config) {

this.config = config;

AdvancedConfig advancedConfig = config.getAdvancedConfig() != null ? config.getAdvancedConfig() : new AdvancedConfig();
AdvancedConfig advancedConfig = config.getAdvancedConfig() != null ? config.getAdvancedConfig() : new Builder().build();

allowStopNettyTimer = advancedConfig.getNettyTimer() == null;
nettyTimer = allowStopNettyTimer ? newNettyTimer() : advancedConfig.getNettyTimer();
Expand Down
32 changes: 18 additions & 14 deletions client/src/main/java/org/asynchttpclient/Dsl.java
Expand Up @@ -20,30 +20,34 @@
public final class Dsl {

// /////////// Client ////////////////
public static AsyncHttpClient newAsyncHttpClient() {
public static AsyncHttpClient asyncHttpClient() {
return new DefaultAsyncHttpClient();
}

public static AsyncHttpClient newAsyncHttpClient(DefaultAsyncHttpClientConfig.Builder configBuilder) {
public static AsyncHttpClient asyncHttpClient(DefaultAsyncHttpClientConfig.Builder configBuilder) {
return new DefaultAsyncHttpClient(configBuilder.build());
}
public static AsyncHttpClient newAsyncHttpClient(AsyncHttpClientConfig config) {

public static AsyncHttpClient asyncHttpClient(AsyncHttpClientConfig config) {
return new DefaultAsyncHttpClient(config);
}

// /////////// ProxyServer ////////////////
public static ProxyServerBuilder newProxyServer(String host, int port) {
public static ProxyServerBuilder proxyServer(String host, int port) {
return new ProxyServerBuilder(host, port);
}

// /////////// Config ////////////////
public static DefaultAsyncHttpClientConfig.Builder newConfig() {
public static DefaultAsyncHttpClientConfig.Builder config() {
return new DefaultAsyncHttpClientConfig.Builder();
}

public static AdvancedConfig.Builder advancedConfig() {
return new AdvancedConfig.Builder();
}

// /////////// Realm ////////////////
public static RealmBuilder newRealm(Realm prototype) {
public static RealmBuilder realm(Realm prototype) {
return new RealmBuilder()//
.realmName(prototype.getRealmName())//
.algorithm(prototype.getAlgorithm())//
Expand All @@ -64,23 +68,23 @@ public static RealmBuilder newRealm(Realm prototype) {
.omitQuery(prototype.isOmitQuery());
}

public static RealmBuilder newRealm(AuthScheme scheme, String principal, String password) {
public static RealmBuilder realm(AuthScheme scheme, String principal, String password) {
return new RealmBuilder()//
.scheme(scheme)//
.principal(principal)//
.password(password);
}

public static RealmBuilder newBasicAuth(String principal, String password) {
return newRealm(AuthScheme.BASIC, principal, password);
public static RealmBuilder basicAuthRealm(String principal, String password) {
return realm(AuthScheme.BASIC, principal, password);
}

public static RealmBuilder newDigestAuth(String principal, String password) {
return newRealm(AuthScheme.DIGEST, principal, password);
public static RealmBuilder digestAuthRealm(String principal, String password) {
return realm(AuthScheme.DIGEST, principal, password);
}

public static RealmBuilder newNtlmAuth(String principal, String password) {
return newRealm(AuthScheme.NTLM, principal, password);
public static RealmBuilder ntlmAuthRealm(String principal, String password) {
return realm(AuthScheme.NTLM, principal, password);
}

private Dsl() {
Expand Down
Expand Up @@ -199,8 +199,10 @@ public Semaphore apply(Object partitionKey) {
httpBootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);
wsBootstrap.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT);

if (config.getConnectTimeout() > 0)
advancedConfig.addChannelOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.getConnectTimeout());
if (config.getConnectTimeout() > 0) {
httpBootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.getConnectTimeout());
wsBootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.getConnectTimeout());
}
for (Entry<ChannelOption<Object>, Object> entry : advancedConfig.getChannelOptions().entrySet()) {
ChannelOption<Object> key = entry.getKey();
Object value = entry.getValue();
Expand Down

0 comments on commit 8b43bdb

Please sign in to comment.