From 45141fb11ef698b11c6fb3becca82ca10e11505a Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Mon, 15 Sep 2014 12:50:50 +0000
Subject: [PATCH] OPENDJ-1285 CR-4409 Migrate SDK from Futures to Promises

---
 opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyLDAPConnectionFactory.java |   79 +++++++++++++++++++--------------------
 1 files changed, 38 insertions(+), 41 deletions(-)

diff --git a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyLDAPConnectionFactory.java b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyLDAPConnectionFactory.java
index 4d3b78f..59a1959 100644
--- a/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyLDAPConnectionFactory.java
+++ b/opendj-grizzly/src/main/java/org/forgerock/opendj/grizzly/GrizzlyLDAPConnectionFactory.java
@@ -27,13 +27,6 @@
 
 package org.forgerock.opendj.grizzly;
 
-import static com.forgerock.opendj.grizzly.GrizzlyMessages.LDAP_CONNECTION_CONNECT_TIMEOUT;
-import static org.forgerock.opendj.grizzly.DefaultTCPNIOTransport.DEFAULT_TRANSPORT;
-import static org.forgerock.opendj.grizzly.GrizzlyUtils.buildFilterChain;
-import static org.forgerock.opendj.grizzly.GrizzlyUtils.configureConnection;
-import static org.forgerock.opendj.ldap.ErrorResultException.newErrorResult;
-import static org.forgerock.opendj.ldap.TimeoutChecker.TIMEOUT_CHECKER;
-
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.util.concurrent.ExecutionException;
@@ -46,16 +39,18 @@
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.Connection;
 import org.forgerock.opendj.ldap.ErrorResultException;
-import org.forgerock.opendj.ldap.FutureResult;
+import org.forgerock.opendj.ldap.FutureResultImpl;
 import org.forgerock.opendj.ldap.LDAPOptions;
 import org.forgerock.opendj.ldap.ResultCode;
-import org.forgerock.opendj.ldap.ResultHandler;
 import org.forgerock.opendj.ldap.TimeoutChecker;
 import org.forgerock.opendj.ldap.TimeoutEventListener;
 import org.forgerock.opendj.ldap.requests.Requests;
 import org.forgerock.opendj.ldap.requests.StartTLSExtendedRequest;
 import org.forgerock.opendj.ldap.responses.ExtendedResult;
 import org.forgerock.opendj.ldap.spi.LDAPConnectionFactoryImpl;
+import org.forgerock.util.promise.FailureHandler;
+import org.forgerock.util.promise.Promise;
+import org.forgerock.util.promise.SuccessHandler;
 import org.glassfish.grizzly.CompletionHandler;
 import org.glassfish.grizzly.EmptyCompletionHandler;
 import org.glassfish.grizzly.SocketConnectorHandler;
@@ -63,9 +58,15 @@
 import org.glassfish.grizzly.nio.transport.TCPNIOConnectorHandler;
 import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
 
-import com.forgerock.opendj.util.AsynchronousFutureResult;
 import com.forgerock.opendj.util.ReferenceCountedObject;
 
+import static org.forgerock.opendj.grizzly.DefaultTCPNIOTransport.*;
+import static org.forgerock.opendj.grizzly.GrizzlyUtils.*;
+import static org.forgerock.opendj.ldap.ErrorResultException.*;
+import static org.forgerock.opendj.ldap.TimeoutChecker.*;
+
+import static com.forgerock.opendj.grizzly.GrizzlyMessages.*;
+
 /**
  * LDAP connection factory implementation using Grizzly for transport.
  */
@@ -79,11 +80,10 @@
     @SuppressWarnings("rawtypes")
     private final class CompletionHandlerAdapter implements
             CompletionHandler<org.glassfish.grizzly.Connection>, TimeoutEventListener {
-        private final AsynchronousFutureResult<Connection, ResultHandler<? super Connection>> future;
+        private final FutureResultImpl<Connection> future;
         private final long timeoutEndTime;
 
-        private CompletionHandlerAdapter(
-                final AsynchronousFutureResult<Connection, ResultHandler<? super Connection>> future) {
+        private CompletionHandlerAdapter(final FutureResultImpl<Connection> future) {
             this.future = future;
             final long timeoutMS = getTimeout();
             this.timeoutEndTime = timeoutMS > 0 ? System.currentTimeMillis() + timeoutMS : 0;
@@ -120,37 +120,36 @@
                 final StartTLSExtendedRequest startTLS =
                         Requests.newStartTLSExtendedRequest(options.getSSLContext());
                 startTLS.addEnabledCipherSuite(options.getEnabledCipherSuites().toArray(
-                        new String[options.getEnabledCipherSuites().size()]));
+                    new String[options.getEnabledCipherSuites().size()]));
                 startTLS.addEnabledProtocol(options.getEnabledProtocols().toArray(
-                        new String[options.getEnabledProtocols().size()]));
-                final ResultHandler<ExtendedResult> handler = new ResultHandler<ExtendedResult>() {
-                    @Override
-                    public void handleErrorResult(final ErrorResultException error) {
-                        onFailure(connection, error);
-                    }
+                    new String[options.getEnabledProtocols().size()]));
 
+                connection.extendedRequestAsync(startTLS).onSuccess(new SuccessHandler<ExtendedResult>() {
                     @Override
                     public void handleResult(final ExtendedResult result) {
                         onSuccess(connection);
                     }
-                };
-                connection.extendedRequestAsync(startTLS, null, handler);
+                }).onFailure(new FailureHandler<ErrorResultException>() {
+                    @Override
+                    public void handleError(final ErrorResultException error) {
+                        onFailure(connection, error);
+                    }
+                });
             } else {
                 // Install SSL/TLS layer.
                 try {
                     connection.startTLS(options.getSSLContext(), options.getEnabledProtocols(),
-                            options.getEnabledCipherSuites(),
-                            new EmptyCompletionHandler<SSLEngine>() {
-                                @Override
-                                public void completed(final SSLEngine result) {
-                                    onSuccess(connection);
-                                }
+                        options.getEnabledCipherSuites(), new EmptyCompletionHandler<SSLEngine>() {
+                            @Override
+                            public void completed(final SSLEngine result) {
+                                onSuccess(connection);
+                            }
 
-                                @Override
-                                public void failed(final Throwable throwable) {
-                                    onFailure(connection, throwable);
-                                }
-                            });
+                            @Override
+                            public void failed(final Throwable throwable) {
+                                onFailure(connection, throwable);
+                            }
+                        });
                 } catch (final IOException e) {
                     onFailure(connection, e);
                 }
@@ -161,7 +160,7 @@
         public void failed(final Throwable throwable) {
             // Adapt and forward.
             timeoutChecker.get().removeListener(this);
-            future.handleErrorResult(adaptConnectionException(throwable));
+            future.handleError(adaptConnectionException(throwable));
             releaseTransportAndTimeoutChecker();
         }
 
@@ -197,7 +196,7 @@
         private void onFailure(final GrizzlyLDAPConnection connection, final Throwable t) {
             // Abort connection attempt due to error.
             timeoutChecker.get().removeListener(this);
-            future.handleErrorResult(adaptConnectionException(t));
+            future.handleError(adaptConnectionException(t));
             connection.close();
         }
 
@@ -216,7 +215,7 @@
             } else if (timeoutEndTime > currentTime) {
                 return timeoutEndTime - currentTime;
             } else {
-                future.handleErrorResult(newErrorResult(ResultCode.CLIENT_SIDE_CONNECT_ERROR,
+                future.handleError(newErrorResult(ResultCode.CLIENT_SIDE_CONNECT_ERROR,
                         LDAP_CONNECTION_CONNECT_TIMEOUT.get(getSocketAddress(), getTimeout()).toString()));
                 return 0;
             }
@@ -303,21 +302,19 @@
     @Override
     public Connection getConnection() throws ErrorResultException {
         try {
-            return getConnectionAsync(null).get();
+            return getConnectionAsync().getOrThrow();
         } catch (final InterruptedException e) {
             throw newErrorResult(ResultCode.CLIENT_SIDE_USER_CANCELLED, e);
         }
     }
 
     @Override
-    public FutureResult<Connection> getConnectionAsync(
-            final ResultHandler<? super Connection> handler) {
+    public Promise<Connection, ErrorResultException> getConnectionAsync() {
         acquireTransportAndTimeoutChecker(); // Protect resources.
         final SocketConnectorHandler connectorHandler =
                 TCPNIOConnectorHandler.builder(transport.get()).processor(defaultFilterChain)
                         .build();
-        final AsynchronousFutureResult<Connection, ResultHandler<? super Connection>> future =
-                new AsynchronousFutureResult<Connection, ResultHandler<? super Connection>>(handler);
+        final FutureResultImpl<Connection> future = new FutureResultImpl<Connection>();
         connectorHandler.connect(getSocketAddress(), new CompletionHandlerAdapter(future));
         return future;
     }

--
Gitblit v1.10.0