From 4ebf34a195f09e61c461d09b2b730f691921f7a9 Mon Sep 17 00:00:00 2001
From: Gaetan Boismal <gaetan.boismal@forgerock.com>
Date: Fri, 19 Sep 2014 07:46:35 +0000
Subject: [PATCH] OPENDJ-1566 (CR-4587) Migrate core code from FutureResult to Promise

---
 opendj3-server-dev/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java |  154 ++++++++++++++++++--------------------------------
 1 files changed, 56 insertions(+), 98 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java b/opendj3-server-dev/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java
index 23446c7..897ad45 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/http/SdkConnectionAdapter.java
@@ -25,20 +25,20 @@
  */
 package org.opends.server.protocols.http;
 
-import static org.forgerock.opendj.adapter.server3x.Converters.*;
-import static org.forgerock.opendj.ldap.ByteString.*;
 import java.util.LinkedHashSet;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.servlet.http.HttpServletResponse;
 
+import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.AbstractAsynchronousConnection;
+import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ConnectionEventListener;
 import org.forgerock.opendj.ldap.ErrorResultException;
 import org.forgerock.opendj.ldap.FutureResult;
+import org.forgerock.opendj.ldap.FutureResultImpl;
 import org.forgerock.opendj.ldap.IntermediateResponseHandler;
 import org.forgerock.opendj.ldap.ResultCode;
-import org.forgerock.opendj.ldap.ResultHandler;
 import org.forgerock.opendj.ldap.SearchResultHandler;
 import org.forgerock.opendj.ldap.requests.AbandonRequest;
 import org.forgerock.opendj.ldap.requests.AddRequest;
@@ -77,7 +77,6 @@
 import org.opends.server.core.SearchOperationBasis;
 import org.opends.server.core.UnbindOperation;
 import org.opends.server.core.UnbindOperationBasis;
-import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.opends.server.protocols.ldap.AbandonRequestProtocolOp;
 import org.opends.server.protocols.ldap.AddRequestProtocolOp;
 import org.opends.server.protocols.ldap.BindRequestProtocolOp;
@@ -91,11 +90,11 @@
 import org.opends.server.protocols.ldap.SearchRequestProtocolOp;
 import org.opends.server.protocols.ldap.UnbindRequestProtocolOp;
 import org.opends.server.types.AuthenticationInfo;
-import org.forgerock.opendj.ldap.ByteString;
 import org.opends.server.types.DisconnectReason;
 import org.opends.server.types.Operation;
 
-import com.forgerock.opendj.util.AsynchronousFutureResult;
+import static org.forgerock.opendj.adapter.server3x.Converters.*;
+import static org.forgerock.opendj.ldap.ByteString.*;
 
 /**
  * Adapter class between LDAP SDK's {@link org.forgerock.opendj.ldap.Connection}
@@ -115,7 +114,7 @@
    * The next message ID (and operation ID) that should be used for this
    * connection.
    */
-  private AtomicInteger nextMessageID = new AtomicInteger(0);
+  private final AtomicInteger nextMessageID = new AtomicInteger(0);
 
   /** The queueing strategy used for this connection. */
   private final QueueingStrategy queueingStrategy;
@@ -140,32 +139,30 @@
             .getCurrentConfig().getMaxConcurrentOpsPerConnection());
   }
 
-  @SuppressWarnings({ "rawtypes", "unchecked" })
-  private <R> FutureResult<R> enqueueOperation(
-      Operation operation, ResultHandler<? super R> resultHandler)
+  private <R> FutureResult<R> enqueueOperation(Operation operation)
   {
-    final AsynchronousFutureResult<R, ResultHandler<? super R>> futureResult =
-        new AsynchronousFutureResult<R, ResultHandler<? super R>>(
-            resultHandler, operation.getMessageID());
+    return enqueueOperation(operation, null);
+  }
+
+  @SuppressWarnings({ "rawtypes", "unchecked" })
+  private <R> FutureResult<R> enqueueOperation(Operation operation, SearchResultHandler entryHandler)
+  {
+    final FutureResultImpl<R> futureResult = new FutureResultImpl(operation.getMessageID());
 
     try
     {
       operation.setInnerOperation(this.clientConnection.isInnerConnection());
 
-      HTTPConnectionHandler connHandler =
-          this.clientConnection.getConnectionHandler();
+      HTTPConnectionHandler connHandler = this.clientConnection.getConnectionHandler();
       if (connHandler.keepStats())
       {
         connHandler.getStatTracker().updateMessageRead(
-            new LDAPMessage(operation.getMessageID(),
-                toRequestProtocolOp(operation)));
+            new LDAPMessage(operation.getMessageID(), toRequestProtocolOp(operation)));
       }
 
       // need this raw cast here to fool the compiler's generic type safety
       // Problem here is due to the generic type R on enqueueOperation()
-      clientConnection.addOperationInProgress(operation,
-          (AsynchronousFutureResult) futureResult);
-
+      clientConnection.addOperationInProgress(operation, (FutureResultImpl) futureResult, entryHandler);
       queueingStrategy.enqueueRequest(operation);
     }
     catch (Exception e)
@@ -173,9 +170,9 @@
       logger.traceException(e);
       clientConnection.removeOperationInProgress(operation.getMessageID());
       // TODO JNR add error message??
-      futureResult.handleErrorResult(ErrorResultException.newErrorResult(
-          ResultCode.OPERATIONS_ERROR, e));
+      futureResult.handleError(ErrorResultException.newErrorResult(ResultCode.OPERATIONS_ERROR, e));
     }
+
     return futureResult;
   }
 
@@ -246,26 +243,17 @@
   public FutureResult<Void> abandonAsync(AbandonRequest request)
   {
     final int messageID = nextMessageID.getAndIncrement();
-    AbandonOperationBasis operation =
-        new AbandonOperationBasis(clientConnection, messageID, messageID,
-            to(request.getControls()), request.getRequestID());
-
-    return enqueueOperation(operation, null);
+    return enqueueOperation(new AbandonOperationBasis(clientConnection, messageID, messageID,
+        to(request.getControls()), request.getRequestID()));
   }
 
   /** {@inheritDoc} */
   @Override
-  public FutureResult<Result> addAsync(AddRequest request,
-      IntermediateResponseHandler intermediateResponseHandler,
-      ResultHandler<? super Result> resultHandler)
+  public FutureResult<Result> addAsync(AddRequest request, IntermediateResponseHandler intermediateResponseHandler)
   {
     final int messageID = nextMessageID.getAndIncrement();
-    AddOperationBasis operation =
-        new AddOperationBasis(clientConnection, messageID, messageID,
-            to(request.getControls()), valueOf(request.getName()),
-            to(request.getAllAttributes()));
-
-    return enqueueOperation(operation, resultHandler);
+    return enqueueOperation(new AddOperationBasis(clientConnection, messageID, messageID, to(request.getControls()),
+        valueOf(request.getName()), to(request.getAllAttributes())));
   }
 
   /** {@inheritDoc} */
@@ -278,18 +266,13 @@
   /** {@inheritDoc} */
   @Override
   public FutureResult<BindResult> bindAsync(BindRequest request,
-      IntermediateResponseHandler intermediateResponseHandler,
-      ResultHandler<? super BindResult> resultHandler)
+      IntermediateResponseHandler intermediateResponseHandler)
   {
     final int messageID = nextMessageID.getAndIncrement();
     String userName = request.getName();
     byte[] password = ((SimpleBindRequest) request).getPassword();
-    BindOperationBasis operation =
-        new BindOperationBasis(clientConnection, messageID, messageID,
-            to(request.getControls()), "3", ByteString.valueOf(userName),
-            ByteString.wrap(password));
-
-    return enqueueOperation(operation, resultHandler);
+    return enqueueOperation(new BindOperationBasis(clientConnection, messageID, messageID, to(request.getControls()),
+        "3", ByteString.valueOf(userName), ByteString.wrap(password)));
   }
 
   /** {@inheritDoc} */
@@ -323,47 +306,34 @@
   /** {@inheritDoc} */
   @Override
   public FutureResult<CompareResult> compareAsync(CompareRequest request,
-      IntermediateResponseHandler intermediateResponseHandler,
-      ResultHandler<? super CompareResult> resultHandler)
+      IntermediateResponseHandler intermediateResponseHandler)
   {
     final int messageID = nextMessageID.getAndIncrement();
-    CompareOperationBasis operation =
-        new CompareOperationBasis(clientConnection, messageID, messageID,
-            to(request.getControls()), valueOf(request.getName()),
-            request.getAttributeDescription().getAttributeType().getOID(),
-            request.getAssertionValue());
-
-    return enqueueOperation(operation, resultHandler);
+    return enqueueOperation(new CompareOperationBasis(clientConnection, messageID, messageID,
+        to(request.getControls()), valueOf(request.getName()),
+        request.getAttributeDescription().getAttributeType().getOID(),
+        request.getAssertionValue()));
   }
 
   /** {@inheritDoc} */
   @Override
   public FutureResult<Result> deleteAsync(DeleteRequest request,
-      IntermediateResponseHandler intermediateResponseHandler,
-      ResultHandler<? super Result> resultHandler)
+      IntermediateResponseHandler intermediateResponseHandler)
   {
     final int messageID = nextMessageID.getAndIncrement();
-    DeleteOperationBasis operation =
-        new DeleteOperationBasis(clientConnection, messageID, messageID,
-            to(request.getControls()), valueOf(request.getName()));
-
-    return enqueueOperation(operation, resultHandler);
+    return enqueueOperation(new DeleteOperationBasis(clientConnection, messageID, messageID,
+        to(request.getControls()), valueOf(request.getName())));
   }
 
   /** {@inheritDoc} */
   @Override
-  public <R extends ExtendedResult> FutureResult<R> extendedRequestAsync(
-      ExtendedRequest<R> request,
-      IntermediateResponseHandler intermediateResponseHandler,
-      ResultHandler<? super R> resultHandler)
+  public <R extends ExtendedResult> FutureResult<R> extendedRequestAsync(ExtendedRequest<R> request,
+      IntermediateResponseHandler intermediateResponseHandler)
   {
     final int messageID = nextMessageID.getAndIncrement();
-    ExtendedOperationBasis operation =
-        new ExtendedOperationBasis(this.clientConnection, messageID, messageID,
-            to(request.getControls()), request.getOID(),
-            request.getValue());
-
-    return enqueueOperation(operation, resultHandler);
+    return enqueueOperation(new ExtendedOperationBasis(this.clientConnection, messageID, messageID,
+        to(request.getControls()), request.getOID(),
+        request.getValue()));
   }
 
   /**
@@ -393,32 +363,24 @@
   /** {@inheritDoc} */
   @Override
   public FutureResult<Result> modifyAsync(ModifyRequest request,
-      IntermediateResponseHandler intermediateResponseHandler,
-      ResultHandler<? super Result> resultHandler)
+      IntermediateResponseHandler intermediateResponseHandler)
   {
     final int messageID = nextMessageID.getAndIncrement();
-    ModifyOperationBasis operation =
-        new ModifyOperationBasis(clientConnection, messageID, messageID,
-            to(request.getControls()), to(request.getName()),
-            toModifications(request.getModifications()));
-
-    return enqueueOperation(operation, resultHandler);
+    return enqueueOperation(new ModifyOperationBasis(clientConnection, messageID, messageID,
+        to(request.getControls()), to(request.getName()),
+        toModifications(request.getModifications())));
   }
 
   /** {@inheritDoc} */
   @Override
   public FutureResult<Result> modifyDNAsync(ModifyDNRequest request,
-      IntermediateResponseHandler intermediateResponseHandler,
-      ResultHandler<? super Result> resultHandler)
+      IntermediateResponseHandler intermediateResponseHandler)
   {
     final int messageID = nextMessageID.getAndIncrement();
-    ModifyDNOperationBasis operation =
-        new ModifyDNOperationBasis(clientConnection, messageID, messageID,
-            to(request.getControls()), to(request.getName()), to(request
-                .getNewRDN()), request.isDeleteOldRDN(), to(request
-                .getNewSuperior()));
-
-    return enqueueOperation(operation, resultHandler);
+    return enqueueOperation(new ModifyDNOperationBasis(clientConnection, messageID, messageID,
+        to(request.getControls()), to(request.getName()), to(request
+            .getNewRDN()), request.isDeleteOldRDN(), to(request
+            .getNewSuperior())));
   }
 
   /** {@inheritDoc} */
@@ -431,19 +393,15 @@
   /** {@inheritDoc} */
   @Override
   public FutureResult<Result> searchAsync(final SearchRequest request,
-      final IntermediateResponseHandler intermediateResponseHandler,
-      final SearchResultHandler resultHandler)
+      final IntermediateResponseHandler intermediateResponseHandler, final SearchResultHandler entryHandler)
   {
     final int messageID = nextMessageID.getAndIncrement();
-    SearchOperationBasis operation =
-        new SearchOperationBasis(clientConnection, messageID, messageID,
-            to(request.getControls()), valueOf(request.getName()),
-            request.getScope(), request.getDereferenceAliasesPolicy(),
-            request.getSizeLimit(), request.getTimeLimit(),
-            request.isTypesOnly(), to(request.getFilter()),
-            new LinkedHashSet<String>(request.getAttributes()));
-
-    return enqueueOperation(operation, resultHandler);
+    return enqueueOperation(new SearchOperationBasis(clientConnection, messageID, messageID,
+        to(request.getControls()), valueOf(request.getName()),
+        request.getScope(), request.getDereferenceAliasesPolicy(),
+        request.getSizeLimit(), request.getTimeLimit(),
+        request.isTypesOnly(), to(request.getFilter()),
+        new LinkedHashSet<String>(request.getAttributes())), entryHandler);
   }
 
   /** {@inheritDoc} */

--
Gitblit v1.10.0