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