From 35a408038c1de64a6f13f0e7b246a645e9945e3c Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Tue, 18 Mar 2008 22:44:58 +0000
Subject: [PATCH] With this refactoring:

---
 opends/src/server/org/opends/server/core/AbandonOperationBasis.java |  127 +++++++++---------------------------------
 1 files changed, 27 insertions(+), 100 deletions(-)

diff --git a/opends/src/server/org/opends/server/core/AbandonOperationBasis.java b/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
index 483a940..649f815 100644
--- a/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
+++ b/opends/src/server/org/opends/server/core/AbandonOperationBasis.java
@@ -38,16 +38,10 @@
 import java.util.List;
 
 import org.opends.server.api.ClientConnection;
-import org.opends.server.api.plugin.PreParsePluginResult;
+import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.loggers.debug.DebugLogger;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.server.types.AbstractOperation;
-import org.opends.server.types.CancelRequest;
-import org.opends.server.types.CancelResult;
-import org.opends.server.types.Control;
-import org.opends.server.types.DisconnectReason;
-import org.opends.server.types.OperationType;
-import org.opends.server.types.ResultCode;
+import org.opends.server.types.*;
 import org.opends.server.types.operation.PostOperationAbandonOperation;
 import org.opends.server.types.operation.PreParseAbandonOperation;
 
@@ -95,6 +89,8 @@
 
 
     this.idToAbandon = idToAbandon;
+    this.cancelResult = new CancelResult(ResultCode.CANNOT_CANCEL,
+        ERR_CANNOT_CANCEL_ABANDON.get());
   }
 
 
@@ -129,20 +125,6 @@
    * {@inheritDoc}
    */
   @Override()
-  public final void disconnectClient(DisconnectReason disconnectReason,
-                                     boolean sendNotification, Message message
-  )
-  {
-    clientConnection.disconnect(disconnectReason, sendNotification,
-            message);
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
   public final String[][] getRequestLogElements()
   {
     // Note that no debugging will be done in this method because it is a likely
@@ -239,53 +221,31 @@
   {
     setResultCode(ResultCode.UNDEFINED);
 
+    // Start the processing timer.
+    setProcessingStartTime();
+
+    // Log the abandon request message.
+    logAbandonRequest(this);
 
     // Get the plugin config manager that will be used for invoking plugins.
     PluginConfigManager pluginConfigManager =
          DirectoryServer.getPluginConfigManager();
-    boolean skipPostOperation = false;
-
-
-    // Start the processing timer.
-    setProcessingStartTime();
-
 
     // Create a labeled block of code that we can break out of if a problem is
     // detected.
 abandonProcessing:
     {
       // Invoke the pre-parse abandon plugins.
-      PreParsePluginResult preParseResult =
+      PluginResult.PreParse preParseResult =
            pluginConfigManager.invokePreParseAbandonPlugins(this);
-      if (preParseResult.connectionTerminated())
+      if (!preParseResult.continueProcessing())
       {
-        // There's no point in continuing.  Log the request and result and
-        // return.
-        setResultCode(ResultCode.CANCELED);
-
-        appendErrorMessage(ERR_CANCELED_BY_PREPARSE_DISCONNECT.get());
-
-        setProcessingStopTime();
-
-        logAbandonRequest(this);
-        logAbandonResult(this);
-        return;
-      }
-      else if (preParseResult.sendResponseImmediately())
-      {
-        skipPostOperation = true;
+        setResultCode(preParseResult.getResultCode());
+        appendErrorMessage(preParseResult.getErrorMessage());
+        setMatchedDN(preParseResult.getMatchedDN());
+        setReferralURLs(preParseResult.getReferralURLs());
         break abandonProcessing;
       }
-      else if (preParseResult.skipCoreProcessing())
-      {
-        skipPostOperation = false;
-        break abandonProcessing;
-      }
-
-
-      // Log the abandon request message.
-      logAbandonRequest(this);
-
 
       // Actually perform the abandon operation.  Make sure to set the result
       // code to reflect whether the abandon was successful and an error message
@@ -306,20 +266,22 @@
         // configurable option in the server.
         boolean notifyRequestor = DirectoryServer.notifyAbandonedOperations();
         Message cancelReason = INFO_CANCELED_BY_ABANDON_REQUEST.get(messageID);
-        MessageBuilder cancelResponse = new MessageBuilder();
         CancelResult result =
-             operation.cancel(new CancelRequest(notifyRequestor, cancelReason,
-                                                cancelResponse));
+             operation.cancel(new CancelRequest(notifyRequestor, cancelReason));
         setResultCode(result.getResultCode());
-        setErrorMessage(cancelResponse);
+        appendErrorMessage(result.getResponseMessage());
       }
-    }
 
-
-    // Invoke the post-operation abandon plugins.
-    if (! skipPostOperation)
-    {
-      pluginConfigManager.invokePostOperationAbandonPlugins(this);
+      PluginResult.PostOperation postOpResult =
+          pluginConfigManager.invokePostOperationAbandonPlugins(this);
+      if (!postOpResult.continueProcessing())
+      {
+        setResultCode(preParseResult.getResultCode());
+        appendErrorMessage(preParseResult.getErrorMessage());
+        setMatchedDN(preParseResult.getMatchedDN());
+        setReferralURLs(preParseResult.getReferralURLs());
+        break abandonProcessing;
+      }
     }
 
 
@@ -337,41 +299,6 @@
    * {@inheritDoc}
    */
   @Override()
-  public final CancelResult cancel(CancelRequest cancelRequest)
-  {
-    cancelRequest.addResponseMessage(ERR_CANNOT_CANCEL_ABANDON.get());
-    return CancelResult.CANNOT_CANCEL;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
-  public final CancelRequest getCancelRequest()
-  {
-    return null;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
-  public boolean setCancelRequest(CancelRequest cancelRequest)
-  {
-    // Abandon operations cannot be canceled.
-    return false;
-  }
-
-
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override()
   public final void toString(StringBuilder buffer)
   {
     buffer.append("AbandonOperation(connID=");

--
Gitblit v1.10.0