HTTPASYNC-75: added setter for NHttpClientEventHandler to HttpAsyncClientBuilder
Contributed by Dmitry Potapov <potapov.d at gmail.com>

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpasyncclient/trunk@1586763 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClientBase.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClientBase.java
index 5c5381f..7ee0202 100644
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClientBase.java
+++ b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClientBase.java
@@ -28,6 +28,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.http.nio.NHttpClientEventHandler;
 import org.apache.http.nio.conn.NHttpClientConnectionManager;
 import org.apache.http.nio.reactor.IOEventDispatch;
 
@@ -48,22 +49,23 @@
 
     public CloseableHttpAsyncClientBase(
             final NHttpClientConnectionManager connmgr,
-            final ThreadFactory threadFactory) {
+            final ThreadFactory threadFactory,
+            final NHttpClientEventHandler handler) {
         super();
         this.connmgr = connmgr;
         this.reactorThread = threadFactory.newThread(new Runnable() {
 
             public void run() {
-                doExecute();
+                doExecute(handler);
             }
 
         });
         this.status = new AtomicReference<Status>(Status.INACTIVE);
     }
 
-    private void doExecute() {
+    private void doExecute(final NHttpClientEventHandler handler) {
         try {
-            final IOEventDispatch ioEventDispatch = new InternalIODispatch();
+            final IOEventDispatch ioEventDispatch = new InternalIODispatch(handler);
             this.connmgr.execute(ioEventDispatch);
         } catch (final Exception ex) {
             this.log.error("I/O reactor terminated abnormally", ex);
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.java
index 638fd36..71e8434 100644
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.java
+++ b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.java
@@ -92,6 +92,7 @@
 import org.apache.http.impl.cookie.RFC2965SpecFactory;
 import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
 import org.apache.http.impl.nio.reactor.IOReactorConfig;
+import org.apache.http.nio.NHttpClientEventHandler;
 import org.apache.http.nio.conn.NHttpClientConnectionManager;
 import org.apache.http.nio.conn.NoopIOSessionStrategy;
 import org.apache.http.nio.conn.SchemeIOSessionStrategy;
@@ -181,6 +182,7 @@
     private RequestConfig defaultRequestConfig;
 
     private ThreadFactory threadFactory;
+    private NHttpClientEventHandler eventHandler;
 
     private boolean systemProperties;
     private boolean cookieManagementDisabled;
@@ -531,6 +533,16 @@
     }
 
     /**
+     * Assigns {@link NHttpClientEventHandler} instance.
+     *
+     * @since 4.1
+     */
+    public final HttpAsyncClientBuilder setEventHandler(final NHttpClientEventHandler eventHandler) {
+        this.eventHandler = eventHandler;
+        return this;
+    }
+
+    /**
      * Disables connection state tracking.
      */
     public final HttpAsyncClientBuilder disableConnectionState() {
@@ -779,6 +791,11 @@
             threadFactory = Executors.defaultThreadFactory();
         }
 
+        NHttpClientEventHandler eventHandler = this.eventHandler;
+        if (eventHandler == null) {
+            eventHandler = new LoggingAsyncRequestExecutor();
+        }
+
         final MainClientExec exec = new MainClientExec(
             connManager,
             httpprocessor,
@@ -798,7 +815,8 @@
             defaultCookieStore,
             defaultCredentialsProvider,
             defaultRequestConfig,
-            threadFactory);
+            threadFactory,
+            eventHandler);
     }
 
 }
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalHttpAsyncClient.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalHttpAsyncClient.java
index fac96d3..8e6dc10 100644
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalHttpAsyncClient.java
+++ b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalHttpAsyncClient.java
@@ -41,6 +41,7 @@
 import org.apache.http.concurrent.FutureCallback;
 import org.apache.http.config.Lookup;
 import org.apache.http.cookie.CookieSpecProvider;
+import org.apache.http.nio.NHttpClientEventHandler;
 import org.apache.http.nio.conn.NHttpClientConnectionManager;
 import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
 import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
@@ -68,8 +69,9 @@
             final CookieStore cookieStore,
             final CredentialsProvider credentialsProvider,
             final RequestConfig defaultConfig,
-            final ThreadFactory threadFactory) {
-        super(connmgr, threadFactory);
+            final ThreadFactory threadFactory,
+            final NHttpClientEventHandler eventHandler) {
+        super(connmgr, threadFactory, eventHandler);
         this.connmgr = connmgr;
         this.exec = exec;
         this.cookieSpecRegistry = cookieSpecRegistry;
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIODispatch.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIODispatch.java
index 0c4fd44..cfdd4dc 100644
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIODispatch.java
+++ b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIODispatch.java
@@ -38,9 +38,9 @@
 
     private final NHttpClientEventHandler handler;
 
-    public InternalIODispatch() {
+    public InternalIODispatch(final NHttpClientEventHandler handler) {
         super();
-        this.handler = new LoggingAsyncRequestExecutor();
+        this.handler = handler;
     }
 
     @Override
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClient.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClient.java
index 0174046..ca5a2f2 100644
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClient.java
+++ b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClient.java
@@ -38,6 +38,7 @@
 import org.apache.http.concurrent.FutureCallback;
 import org.apache.http.impl.DefaultConnectionReuseStrategy;
 import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
+import org.apache.http.nio.NHttpClientEventHandler;
 import org.apache.http.nio.conn.NHttpClientConnectionManager;
 import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
 import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
@@ -60,8 +61,9 @@
 
     public MinimalHttpAsyncClient(
             final NHttpClientConnectionManager connmgr,
-            final ThreadFactory threadFactory) {
-        super(connmgr, threadFactory);
+            final ThreadFactory threadFactory,
+            final NHttpClientEventHandler eventHandler) {
+        super(connmgr, threadFactory, eventHandler);
         this.connmgr = connmgr;
         final HttpProcessor httpProcessor = new ImmutableHttpProcessor(new RequestContent(),
                 new RequestTargetHost(),
@@ -76,6 +78,12 @@
     }
 
     public MinimalHttpAsyncClient(
+            final NHttpClientConnectionManager connmgr,
+            final ThreadFactory threadFactory) {
+        this(connmgr, threadFactory, new LoggingAsyncRequestExecutor());
+    }
+
+    public MinimalHttpAsyncClient(
             final NHttpClientConnectionManager connmgr) {
         this(connmgr, Executors.defaultThreadFactory());
     }
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java b/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java
index 65c3166..a774715 100644
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java
+++ b/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java
@@ -28,7 +28,6 @@
 package org.apache.http.localserver;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.Locale;
 
 import org.apache.http.Consts;