From 8005c934acce2c79f86460dd8997209cc45e3975 Mon Sep 17 00:00:00 2001
From: jdemendi <jdemendi@localhost>
Date: Tue, 30 Oct 2007 13:09:42 +0000
Subject: [PATCH] s set of files provides the workflow configuration manual mode.

---
 opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java |  142 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 141 insertions(+), 1 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java
index ce81dd2..eb9eeaa 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java
@@ -26,6 +26,15 @@
  */
 package org.opends.server.workflowelement;
 
+import static org.opends.server.util.Validator.ensureNotNull;
+import static org.opends.messages.ConfigMessages.*;
+
+import java.util.List;
+import java.util.TreeMap;
+
+import org.opends.messages.Message;
+import org.opends.server.admin.std.server.WorkflowElementCfg;
+import org.opends.server.config.ConfigException;
 import org.opends.server.types.Operation;
 
 
@@ -37,25 +46,48 @@
  * case for load balancing and distribution. And workflow element can be used
  * in a virtual environment to transform data (DN and attribute renaming,
  * attribute value renaming...).
+ *
+ * @param  <T>  The type of configuration handled by this workflow elelemnt.
  */
 public abstract class WorkflowElement
+       <T extends WorkflowElementCfg>
 {
   // Indicates whether the workflow element encapsulates a private local
   // backend.
   private boolean isPrivate = false;
 
+
   // The workflow element identifier.
   private String workflowElementID = null;
 
 
+  // The set of workflow elements registered with the server.
+  // The workflow element identifier is used as a key in the map.
+  private static TreeMap<String, WorkflowElement> registeredWorkflowElements =
+    new TreeMap<String, WorkflowElement>();
+
+
+  // A lock to protect access to the registered workflow elements.
+  private static Object registeredWorkflowElementsLock = new Object();
+
 
   /**
    * Creates a new instance of the workflow element.
+   */
+  public WorkflowElement()
+  {
+    // There is nothing to do in the constructor.
+  }
+
+
+
+  /**
+   * Initializes the instance of the workflow element.
    *
    * @param workflowElementID  the workflow element identifier as defined
    *                           in the configuration.
    */
-  public WorkflowElement(String workflowElementID)
+  public void initialize(String workflowElementID)
   {
     this.workflowElementID = workflowElementID;
   }
@@ -63,6 +95,41 @@
 
 
   /**
+   * Indicates whether the provided configuration is acceptable for
+   * this workflow elelement.
+   *
+   * @param  configuration        The workflow element configuration for
+   *                              which to make the determination.
+   * @param  unacceptableReasons  A list that may be used to hold the
+   *                              reasons that the provided
+   *                              configuration is not acceptable.
+   *
+   * @return  {@code true} if the provided configuration is acceptable
+   *          for this workflow element, or {@code false} if not.
+   */
+  public boolean isConfigurationAcceptable(
+      WorkflowElementCfg configuration,
+      List<String> unacceptableReasons)
+  {
+    // This default implementation does not perform any special
+    // validation.  It should be overridden by workflow element
+    // implementations that wish to perform more detailed validation.
+    return true;
+  }
+
+
+  /**
+   * Performs any finalization that might be required when this
+   * workflow element is unloaded.  No action is taken in the default
+   * implementation.
+   */
+  public void finalizeWorkflowElement()
+  {
+    // No action is required by default.
+  }
+
+
+  /**
    * Executes the workflow element for an operation.
    *
    * @param operation the operation to execute
@@ -108,5 +175,78 @@
   {
     return workflowElementID;
   }
+
+
+  /**
+   * Registers the workflow element (this) with the server.
+   *
+   * @throws  ConfigException  If the workflow element ID for the provided
+   *                           workflow element conflicts with the workflow
+   *                           element ID of an existing workflow element.
+   */
+  public void register()
+      throws ConfigException
+  {
+    ensureNotNull(workflowElementID);
+
+    synchronized (registeredWorkflowElementsLock)
+    {
+      // the workflow element must not be already registered
+      if (registeredWorkflowElements.containsKey(workflowElementID))
+      {
+        Message message = ERR_CONFIG_WORKFLOW_ELEMENT_ALREADY_REGISTERED.get(
+            workflowElementID);
+        throw new ConfigException(message);
+      }
+
+      TreeMap<String, WorkflowElement> newWorkflowElements =
+        new TreeMap<String, WorkflowElement>(registeredWorkflowElements);
+      newWorkflowElements.put(workflowElementID, this);
+      registeredWorkflowElements = newWorkflowElements;
+    }
+  }
+
+
+  /**
+   * Deregisters the workflow element (this) with the server.
+   */
+  public void deregister()
+  {
+    ensureNotNull(workflowElementID);
+
+    synchronized (registeredWorkflowElementsLock)
+    {
+      TreeMap<String, WorkflowElement> newWorkflowElements =
+        new TreeMap<String, WorkflowElement>(registeredWorkflowElements);
+      newWorkflowElements.remove(workflowElementID);
+      registeredWorkflowElements = newWorkflowElements;
+    }
+  }
+
+
+  /**
+   * Gets a workflow element that was registered with the server.
+   *
+   * @param workflowElementID  the ID of the workflow element to get
+   * @return the requested workflow element
+   */
+  public static WorkflowElement getWorkflowElement(
+      String workflowElementID)
+  {
+    return registeredWorkflowElements.get(workflowElementID);
+  }
+
+
+  /**
+   * Resets all the registered workflows.
+   */
+  public static void resetConfig()
+  {
+    synchronized (registeredWorkflowElementsLock)
+    {
+      registeredWorkflowElements = new TreeMap<String, WorkflowElement>();
+    }
+  }
+
 }
 

--
Gitblit v1.10.0