From 44191cbc7b8752ae5df109024be2d4ed030faf19 Mon Sep 17 00:00:00 2001
From: ludovicp <ludovicp@localhost>
Date: Mon, 31 May 2010 12:03:51 +0000
Subject: [PATCH] Add support for statistics for WorkFlowElements

---
 opendj-sdk/opends/src/server/org/opends/server/workflowelement/WorkflowElement.java |   27 ++++++++++++++++++++++++++-
 1 files changed, 26 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 70e57c0..4038899 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
@@ -33,8 +33,11 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CopyOnWriteArrayList;
+import org.opends.server.admin.std.server.MonitorProviderCfg;
 
 import org.opends.server.admin.std.server.WorkflowElementCfg;
+import org.opends.server.api.MonitorProvider;
+import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.Operation;
 import org.opends.server.types.CanceledOperationException;
 
@@ -86,6 +89,8 @@
   private ObservableWorkflowElementStatus observableStatus =
     new ObservableWorkflowElementStatus(this);
 
+  // The statistics exported by the workflow element
+  private MonitorProvider<MonitorProviderCfg> statistics;
 
   /**
    * Provides the observable state of the workflow element.
@@ -275,6 +280,10 @@
   {
     this.workflowElementID = workflowElementID;
     this.workflowElementTypeInfo = workflowElementTypeInfo;
+    this.statistics = this.createStatistics();
+    if (this.statistics != null) {
+      DirectoryServer.registerMonitorProvider(this.statistics);
+    }
   }
 
 
@@ -331,7 +340,11 @@
    */
   public void finalizeWorkflowElement()
   {
-    // No action is required by default.
+    // Deregister the monitor provider.
+    if (this.statistics != null) {
+      DirectoryServer.deregisterMonitorProvider(
+          this.statistics.getMonitorInstanceName());
+    }
   }
 
   /**
@@ -461,4 +474,16 @@
     }
     return false;
   }
+
+  /**
+   * Creates the statistics exposed by the workflow element. By default,
+   * workflow elements do not expose anything but specific implementations
+   * can override this method and provide their own stats.
+   * @return the statistics exposed by the workflow element.
+   */
+  public MonitorProvider<MonitorProviderCfg> createStatistics() {
+    // by default, no stats are created;
+    // This method should be overriden if necessary
+    return null;
+  }
 }

--
Gitblit v1.10.0