mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

jdemendi
19.46.2007 1ad53161c35dfbd2c08b1f124d237f5f3cad9110
opends/src/server/org/opends/server/core/DeleteOperationBasis.java
@@ -469,13 +469,17 @@
    setProcessingStartTime();
    // Check for and handle a request to cancel this operation.
    if (getCancelRequest() != null)
    if (cancelRequest != null)
    {
      indicateCancelled(getCancelRequest());
      indicateCancelled(cancelRequest);
      setProcessingStopTime();
      return;
    }
    // This flag is set to true as soon as a workflow has been executed.
    boolean workflowExecuted = false;
    // Create a labeled block of code that we can break out of if a problem is
    // detected.
deleteProcessing:
@@ -514,14 +518,10 @@
      logDeleteRequest(this);
      // Check for and handle a request to cancel this operation.
      if (getCancelRequest() != null)
      // Check for a request to cancel this operation.
      if (cancelRequest != null)
      {
        indicateCancelled(getCancelRequest());
        setProcessingStopTime();
        logDeleteResponse(this);
        pluginConfigManager.invokePostResponseDeletePlugins(this);
        return;
        break deleteProcessing;
      }
@@ -545,18 +545,37 @@
        break deleteProcessing;
      }
      workflow.execute(this);
      workflowExecuted = true;
    } // end of processing block
    // Check for a terminated connection.
    if (getCancelResult() == CancelResult.CANCELED)
    {
      // Stop the processing timer.
      setProcessingStopTime();
      // Log the add response message.
      logDeleteResponse(this);
      return;
    }
    // Check for and handle a request to cancel this operation.
    if ((getCancelRequest() != null) ||
        (getCancelResult() == CancelResult.CANCELED))
    if (cancelRequest != null)
    {
      if (getCancelRequest() != null){
        indicateCancelled(getCancelRequest());
      }
      indicateCancelled(cancelRequest);
      // Stop the processing timer.
      setProcessingStopTime();
      // Log the delete response message.
      logDeleteResponse(this);
      invokePostResponsePlugins();
      // Invoke the post-response delete plugins.
      invokePostResponsePlugins(workflowExecuted);
      return;
    }
@@ -566,18 +585,82 @@
    // Stop the processing timer.
    setProcessingStopTime();
    // Send the delete response to the client.
    getClientConnection().sendResponse(this);
    // Log the delete response.
    logDeleteResponse(this);
    // Check wether there are local operations in attachments
    // Notifies any persistent searches that might be registered with the
    // server.
    notifyPersistentSearches(workflowExecuted);
    // Invoke the post-response delete plugins.
    invokePostResponsePlugins(workflowExecuted);
  }
  /**
   * Invokes the post response plugins. If a workflow has been executed
   * then invoke the post response plugins provided by the workflow
   * elements of the worklfow, otherwise invoke the post reponse plugins
   * that have been registered with the current operation.
   *
   * @param workflowExecuted <code>true</code> if a workflow has been
   *                         executed
   */
  private void invokePostResponsePlugins(boolean workflowExecuted)
  {
    // Get the plugin config manager that will be used for invoking plugins.
    PluginConfigManager pluginConfigManager =
      DirectoryServer.getPluginConfigManager();
    // Invoke the post response plugins
    if (workflowExecuted)
    {
      // Invoke the post response plugins that have been registered by
      // the workflow elements
      List localOperations =
        (List)getAttachment(Operation.LOCALBACKENDOPERATIONS);
      if (localOperations != null)
      {
        for (Object localOp : localOperations)
        {
          LocalBackendDeleteOperation localOperation =
            (LocalBackendDeleteOperation)localOp;
          pluginConfigManager.invokePostResponseDeletePlugins(localOperation);
        }
      }
    }
    else
    {
      // Invoke the post response plugins that have been registered with
      // the current operation
      pluginConfigManager.invokePostResponseDeletePlugins(this);
    }
  }
  /**
   * Notifies any persistent searches that might be registered with the server.
   * If no workflow has been executed then don't notify persistent searches.
   *
   * @param workflowExecuted <code>true</code> if a workflow has been
   *                         executed
   */
  private void notifyPersistentSearches(boolean workflowExecuted)
  {
    if (! workflowExecuted)
    {
      return;
    }
    List localOperations =
      (List)getAttachment(Operation.LOCALBACKENDOPERATIONS);
    if (localOperations != null && (! localOperations.isEmpty())){
    if (localOperations != null)
    {
      for (Object localOp : localOperations)
      {
        LocalBackendDeleteOperation localOperation =
@@ -613,13 +696,11 @@
            }
          }
        }
        // Invoke the post-response delete plugins.
        pluginConfigManager.invokePostResponseDeletePlugins(localOperation);
      }
    }
  }
  /**
   * Updates the error message and the result code of the operation.
   *
@@ -633,29 +714,6 @@
                                  String.valueOf(getEntryDN())));
  }
  /**
   * Execute the postResponseDeletePlugins.
   */
  private void invokePostResponsePlugins()
  {
    // Get the plugin config manager that will be used for invoking plugins.
    PluginConfigManager pluginConfigManager =
      DirectoryServer.getPluginConfigManager();
    // Check wether there are local operations in attachments
    List localOperations =
      (List)getAttachment(Operation.LOCALBACKENDOPERATIONS);
    if (localOperations != null && (! localOperations.isEmpty())){
      for (Object localOp : localOperations)
      {
        LocalBackendDeleteOperation localOperation =
          (LocalBackendDeleteOperation)localOp;
        // Invoke the post-response delete plugins.
        pluginConfigManager.invokePostResponseDeletePlugins(localOperation);
      }
    }
  }
  /**
   * {@inheritDoc}