From 9969e4092753602a028b9c7763afcc8544ae2879 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 21 Jul 2014 08:02:43 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend   to support cn=changelog CR-4036

---
 opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java                         |   61 ++++++++------
 opendj-sdk/opends/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java   |   21 -----
 opendj-sdk/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java |   41 ++-------
 opendj-sdk/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java  |   41 ++-------
 opendj-sdk/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java                 |   44 ++--------
 5 files changed, 67 insertions(+), 141 deletions(-)

diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java b/opendj-sdk/opends/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
index 885bcc9..f75fd21 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
@@ -22,16 +22,14 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 
 import org.opends.messages.Message;
-import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.core.SearchOperation;
@@ -46,7 +44,6 @@
  */
 public class ChangelogBaseDNVirtualAttributeProvider
        extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
-       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
 {
 
   /**
@@ -104,21 +101,5 @@
     searchOperation.appendErrorMessage(message);
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public boolean isConfigurationChangeAcceptable(
-                      UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
-  {
-    return false;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public ConfigChangeResult applyConfigurationChange(
-                                 UserDefinedVirtualAttributeCfg configuration)
-  {
-    return new ConfigChangeResult(ResultCode.OTHER, false);
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java b/opendj-sdk/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
index 99b144e..1f242f0 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -22,24 +22,20 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 
 import org.opends.messages.Message;
-import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
-import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.SearchOperation;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.types.*;
-import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
 
 import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -49,20 +45,22 @@
  */
 public class FirstChangeNumberVirtualAttributeProvider
        extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
-       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
 {
   /** The tracer object for the debug logger. */
   private static final DebugTracer TRACER = getTracer();
 
+  private final ReplicationServer replicationServer;
+
   /**
    * Creates a new instance of this member virtual attribute provider.
+   *
+   * @param replicationServer
+   *          The replication server.
    */
-  public FirstChangeNumberVirtualAttributeProvider()
+  public FirstChangeNumberVirtualAttributeProvider(ReplicationServer replicationServer)
   {
     super();
-
-    // All initialization should be performed in the
-    // initializeVirtualAttributeProvider method.
+    this.replicationServer = replicationServer;
   }
 
   /** {@inheritDoc} */
@@ -87,12 +85,9 @@
     String value = "0";
     try
     {
-      ECLWorkflowElement eclwe = (ECLWorkflowElement)
-      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
-      if (eclwe != null)
+      if (replicationServer != null)
       {
-        final ReplicationServer rs = eclwe.getReplicationServer();
-        final long[] limits = rs.getECLChangeNumberLimits();
+        final long[] limits = replicationServer.getECLChangeNumberLimits();
         value = String.valueOf(limits[0]);
       }
     }
@@ -130,21 +125,5 @@
     searchOperation.appendErrorMessage(message);
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public boolean isConfigurationChangeAcceptable(
-                      UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
-  {
-    return false;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public ConfigChangeResult applyConfigurationChange(
-                                 UserDefinedVirtualAttributeCfg configuration)
-  {
-    return new ConfigChangeResult(ResultCode.OTHER, false);
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java b/opendj-sdk/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
index 5479d1a..edd7af2 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -22,24 +22,20 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 
 import org.opends.messages.Message;
-import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
-import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.SearchOperation;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.types.*;
-import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
 
 import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -49,20 +45,22 @@
  */
 public class LastChangeNumberVirtualAttributeProvider
        extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
-       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
 {
   /** The tracer object for the debug logger. */
   private static final DebugTracer TRACER = getTracer();
 
+  private final ReplicationServer replicationServer;
+
   /**
    * Creates a new instance of this member virtual attribute provider.
+   *
+   * @param replicationServer
+   *            The replication server.
    */
-  public LastChangeNumberVirtualAttributeProvider()
+  public LastChangeNumberVirtualAttributeProvider(ReplicationServer replicationServer)
   {
     super();
-
-    // All initialization should be performed in the
-    // initializeVirtualAttributeProvider method.
+    this.replicationServer = replicationServer;
   }
 
   /** {@inheritDoc} */
@@ -87,12 +85,9 @@
     String value = "0";
     try
     {
-      ECLWorkflowElement eclwe = (ECLWorkflowElement)
-      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
-      if (eclwe != null)
+      if (replicationServer != null)
       {
-        final ReplicationServer rs = eclwe.getReplicationServer();
-        final long[] limits = rs.getECLChangeNumberLimits();
+        final long[] limits = replicationServer.getECLChangeNumberLimits();
         value = String.valueOf(limits[1]);
       }
     }
@@ -130,21 +125,5 @@
     searchOperation.appendErrorMessage(message);
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public boolean isConfigurationChangeAcceptable(
-                      UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
-  {
-    return false;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public ConfigChangeResult applyConfigurationChange(
-                                 UserDefinedVirtualAttributeCfg configuration)
-  {
-    return new ConfigChangeResult(ResultCode.OTHER, false);
-  }
 }
 
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java b/opendj-sdk/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
index dc95096..c3e0ff7 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
@@ -22,26 +22,22 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.common;
 
 import java.util.Collections;
-import java.util.List;
 import java.util.Set;
 
 import org.opends.messages.Message;
-import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
-import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.SearchOperation;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.plugin.MultimasterReplication;
 import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.types.*;
 import org.opends.server.util.ServerConstants;
-import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
 
 import static org.opends.messages.ExtensionMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -53,7 +49,6 @@
  */
 public class LastCookieVirtualProvider
    extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
-   implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
 {
 
   /**
@@ -61,15 +56,18 @@
    */
   private static final DebugTracer TRACER = getTracer();
 
+  private final ReplicationServer replicationServer;
+
   /**
    * Creates a new instance of this member virtual attribute provider.
+   *
+   * @param replicationServer
+   *            The replication server.
    */
-  public LastCookieVirtualProvider()
+  public LastCookieVirtualProvider(ReplicationServer replicationServer)
   {
     super();
-
-    // All initialization should be performed in the
-    // initializeVirtualAttributeProvider method.
+    this.replicationServer = replicationServer;
   }
 
   /** {@inheritDoc} */
@@ -94,17 +92,13 @@
   {
     try
     {
-      ECLWorkflowElement eclwe = (ECLWorkflowElement)
-      DirectoryServer.getWorkflowElement("EXTERNAL CHANGE LOG");
-      if (eclwe!=null)
+      if (replicationServer != null)
       {
         // Set a list of excluded domains (also exclude 'cn=changelog' itself)
-        Set<String> excludedDomains =
-          MultimasterReplication.getECLDisabledDomains();
+        Set<String> excludedDomains = MultimasterReplication.getECLDisabledDomains();
         excludedDomains.add(ServerConstants.DN_EXTERNAL_CHANGELOG_ROOT);
 
-        final ReplicationServer rs = eclwe.getReplicationServer();
-        String newestCookie = rs.getNewestECLCookie(excludedDomains).toString();
+        String newestCookie = replicationServer.getNewestECLCookie(excludedDomains).toString();
         final ByteString cookie = ByteString.valueOf(newestCookie);
         return Collections.singleton(AttributeValues.create(cookie, cookie));
       }
@@ -138,20 +132,4 @@
     searchOperation.appendErrorMessage(message);
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public boolean isConfigurationChangeAcceptable(
-                      UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
-  {
-    return false;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public ConfigChangeResult applyConfigurationChange(
-                                 UserDefinedVirtualAttributeCfg configuration)
-  {
-    return new ConfigChangeResult(ResultCode.OTHER, false);
-  }
 }
diff --git a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
index 9f013a8..652ce4f 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -498,14 +498,40 @@
     NetworkGroup.getAdminNetworkGroup().registerWorkflow(workflowImpl);
     NetworkGroup.getInternalNetworkGroup().registerWorkflow(workflowImpl);
 
-    DirectoryServer.registerVirtualAttribute(buildVirtualAttributeRule(
-        "lastexternalchangelogcookie", new LastCookieVirtualProvider()));
-    DirectoryServer.registerVirtualAttribute(buildVirtualAttributeRule(
-        "firstchangenumber", new FirstChangeNumberVirtualAttributeProvider()));
-    DirectoryServer.registerVirtualAttribute(buildVirtualAttributeRule(
-        "lastchangenumber", new LastChangeNumberVirtualAttributeProvider()));
-    DirectoryServer.registerVirtualAttribute(buildVirtualAttributeRule(
-        "changelog", new ChangelogBaseDNVirtualAttributeProvider()));
+    registerVirtualAttributeRules();
+  }
+
+  private List<VirtualAttributeRule> getVirtualAttributesRules() throws DirectoryException
+  {
+    final List<VirtualAttributeRule> rules = new ArrayList<VirtualAttributeRule>();
+    rules.add(buildVirtualAttributeRule("lastexternalchangelogcookie", new LastCookieVirtualProvider(this)));
+    rules.add(buildVirtualAttributeRule("firstchangenumber", new FirstChangeNumberVirtualAttributeProvider(this)));
+    rules.add(buildVirtualAttributeRule("lastchangenumber", new LastChangeNumberVirtualAttributeProvider(this)));
+    rules.add(buildVirtualAttributeRule("changelog", new ChangelogBaseDNVirtualAttributeProvider()));
+    return rules;
+  }
+
+  private void registerVirtualAttributeRules() throws DirectoryException {
+    for (VirtualAttributeRule rule : getVirtualAttributesRules())
+    {
+      DirectoryServer.registerVirtualAttribute(rule);
+    }
+  }
+
+  private void deregisterVirtualAttributeRules()
+  {
+    try
+    {
+      for (VirtualAttributeRule rule : getVirtualAttributesRules())
+      {
+        DirectoryServer.deregisterVirtualAttribute(rule);
+      }
+    }
+    catch (DirectoryException e)
+    {
+      // Should never happen
+      throw new RuntimeException(e);
+    }
   }
 
   private static VirtualAttributeRule buildVirtualAttributeRule(String attrName,
@@ -553,24 +579,7 @@
 
       NetworkGroup.getDefaultNetworkGroup().deregisterWorkflow(eclWorkflowID);
 
-      try
-      {
-        DirectoryServer.deregisterVirtualAttribute(buildVirtualAttributeRule(
-            "lastexternalchangelogcookie", new LastCookieVirtualProvider()));
-        DirectoryServer.deregisterVirtualAttribute(buildVirtualAttributeRule(
-            "firstchangenumber",
-            new FirstChangeNumberVirtualAttributeProvider()));
-        DirectoryServer.deregisterVirtualAttribute(buildVirtualAttributeRule(
-            "lastchangenumber",
-            new LastChangeNumberVirtualAttributeProvider()));
-        DirectoryServer.deregisterVirtualAttribute(buildVirtualAttributeRule(
-            "changelog", new ChangelogBaseDNVirtualAttributeProvider()));
-      }
-      catch (DirectoryException e)
-      {
-        // Should never happen
-        throw new RuntimeException(e);
-      }
+      deregisterVirtualAttributeRules();
 
       eclwf.deregister();
       eclwf.finalizeWorkflow();

--
Gitblit v1.10.0