From cb7d38287159e6134f16433f6b6836c5b8ff1608 Mon Sep 17 00:00:00 2001
From: abobrov <abobrov@localhost>
Date: Thu, 09 Apr 2009 23:05:47 +0000
Subject: [PATCH] - register with internal and admin network groups as well.

---
 opendj-sdk/opends/src/server/org/opends/server/backends/ndb/BackendImpl.java |  103 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 99 insertions(+), 4 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/backends/ndb/BackendImpl.java b/opendj-sdk/opends/src/server/org/opends/server/backends/ndb/BackendImpl.java
index 4c58403..23f8041 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/backends/ndb/BackendImpl.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/backends/ndb/BackendImpl.java
@@ -846,6 +846,8 @@
       {
         DirectoryServer.registerBaseDN(dn, this, false);
         WorkflowImpl workflowImpl = createWorkflow(dn);
+        registerWorkflowWithInternalNetworkGroup(workflowImpl);
+        registerWorkflowWithAdminNetworkGroup(workflowImpl);
         registerWorkflowWithDefaultNetworkGroup(workflowImpl);
       }
       catch (Exception e)
@@ -891,7 +893,9 @@
       try
       {
         DirectoryServer.deregisterBaseDN(dn);
+        deregisterWorkflowWithAdminNetworkGroup(dn);
         deregisterWorkflowWithDefaultNetworkGroup(dn);
+        deregisterWorkflowWithInternalNetworkGroup(dn);
       }
       catch (Exception e)
       {
@@ -2107,10 +2111,41 @@
   }
 
   /**
-   * Deregisters a workflow with the default network group and
-   * deregisters the workflow with the server. This method is
-   * intended to be called when workflow configuration mode is
-   * auto.
+   * Registers a workflow with the admin network group.
+   *
+   * @param workflowImpl  The workflow to register with the
+   *                      admin network group
+   *
+   * @throws  DirectoryException  If the workflow is already registered with
+   *                              the admin network group
+   */
+  private void registerWorkflowWithAdminNetworkGroup(
+      WorkflowImpl workflowImpl
+      ) throws DirectoryException
+  {
+    NetworkGroup adminNetworkGroup = NetworkGroup.getAdminNetworkGroup();
+    adminNetworkGroup.registerWorkflow(workflowImpl);
+  }
+
+  /**
+   * Registers a workflow with the internal network group.
+   *
+   * @param workflowImpl  The workflow to register with the
+   *                      internal network group
+   *
+   * @throws  DirectoryException  If the workflow is already registered with
+   *                              the internal network group
+   */
+  private void registerWorkflowWithInternalNetworkGroup(
+      WorkflowImpl workflowImpl
+      ) throws DirectoryException
+  {
+    NetworkGroup internalNetworkGroup = NetworkGroup.getInternalNetworkGroup();
+    internalNetworkGroup.registerWorkflow(workflowImpl);
+  }
+
+  /**
+   * Deregisters a workflow with the default network group.
    *
    * @param baseDN  the DN of the workflow to deregister
    */
@@ -2138,4 +2173,64 @@
     NDBWorkflowElement.remove(backendID);
     workflowImpl.deregister(workflowID);
   }
+
+  /**
+   * Deregisters a workflow with the admin network group.
+   *
+   * @param baseDN  the DN of the workflow to deregister
+   */
+  private void deregisterWorkflowWithAdminNetworkGroup(
+      DN baseDN
+      )
+  {
+    String backendID = this.getBackendID();
+
+    // Get the admin network group and deregister all the workflows
+    // being configured for the backend (there is one worklfow per
+    // backend base DN).
+    NetworkGroup adminNetworkGroup = NetworkGroup.getAdminNetworkGroup();
+    Workflow workflow = adminNetworkGroup.deregisterWorkflow(baseDN);
+    WorkflowImpl workflowImpl = (WorkflowImpl) workflow;
+
+    // The workflow ID is "backendID + baseDN".
+    // We cannot use backendID as workflow identifier because a backend
+    // may handle several base DNs. We cannot use baseDN either because
+    // we might want to configure several workflows handling the same
+    // baseDN through different network groups. So a mix of both
+    // backendID and baseDN should be ok.
+    String workflowID = backendID + "#" + baseDN.toString();
+
+    NDBWorkflowElement.remove(backendID);
+    workflowImpl.deregister(workflowID);
+  }
+
+  /**
+   * Deregisters a workflow with the internal network group.
+   *
+   * @param baseDN  the DN of the workflow to deregister
+   */
+  private void deregisterWorkflowWithInternalNetworkGroup(
+      DN baseDN
+      )
+  {
+    String backendID = this.getBackendID();
+
+    // Get the internal network group and deregister all the workflows
+    // being configured for the backend (there is one workflow per
+    // backend base DN).
+    NetworkGroup internalNetworkGroup = NetworkGroup.getInternalNetworkGroup();
+    Workflow workflow = internalNetworkGroup.deregisterWorkflow(baseDN);
+    WorkflowImpl workflowImpl = (WorkflowImpl) workflow;
+
+    // The workflow ID is "backendID + baseDN".
+    // We cannot use backendID as workflow identifier because a backend
+    // may handle several base DNs. We cannot use baseDN either because
+    // we might want to configure several workflows handling the same
+    // baseDN through different network groups. So a mix of both
+    // backendID and baseDN should be ok.
+    String workflowID = backendID + "#" + baseDN.toString();
+
+    NDBWorkflowElement.remove(backendID);
+    workflowImpl.deregister(workflowID);
+  }
 }

--
Gitblit v1.10.0