From fc2267b6e73ca9707f8eaaf37f3c6d730944f1ae Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Mon, 22 Sep 2014 13:26:33 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1206 : Create a new ReplicationBackend/ChangelogBackend   to support cn=changelog CR-4036

---
 opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java                 |   42 ++--------
 opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java  |   40 ++-------
 opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java |   40 ++-------
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java                         |   61 ++++++++------
 opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java   |   20 -----
 5 files changed, 63 insertions(+), 140 deletions(-)

diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
index d86a685..8d68dac 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
@@ -26,11 +26,8 @@
  */
 package org.opends.server.replication.common;
 
-import java.util.List;
-
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.ResultCode;
-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;
@@ -45,7 +42,6 @@
  */
 public class ChangelogBaseDNVirtualAttributeProvider
        extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
-       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
 {
 
   /**
@@ -104,21 +100,5 @@
     searchOperation.appendErrorMessage(message);
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public boolean isConfigurationChangeAcceptable(
-                      UserDefinedVirtualAttributeCfg configuration,
-                      List<LocalizableMessage> unacceptableReasons)
-  {
-    return false;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public ConfigChangeResult applyConfigurationChange(
-                                 UserDefinedVirtualAttributeCfg configuration)
-  {
-    return new ConfigChangeResult(ResultCode.OTHER, false);
-  }
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
index 2a870a1..4b46bcc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java
@@ -26,19 +26,14 @@
  */
 package org.opends.server.replication.common;
 
-import java.util.List;
-
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ResultCode;
-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.replication.server.ReplicationServer;
 import org.opends.server.types.*;
-import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
 
 import static org.opends.messages.ExtensionMessages.*;
 
@@ -47,20 +42,22 @@
  */
 public class FirstChangeNumberVirtualAttributeProvider
        extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
-       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
 {
   /** The tracer object for the debug logger. */
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
+  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} */
@@ -85,12 +82,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]);
       }
     }
@@ -127,21 +121,5 @@
     searchOperation.appendErrorMessage(message);
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public boolean isConfigurationChangeAcceptable(
-                      UserDefinedVirtualAttributeCfg configuration,
-                      List<LocalizableMessage> unacceptableReasons)
-  {
-    return false;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public ConfigChangeResult applyConfigurationChange(
-                                 UserDefinedVirtualAttributeCfg configuration)
-  {
-    return new ConfigChangeResult(ResultCode.OTHER, false);
-  }
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
index e9af32f..04e30f8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java
@@ -26,19 +26,14 @@
  */
 package org.opends.server.replication.common;
 
-import java.util.List;
-
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ResultCode;
-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.replication.server.ReplicationServer;
 import org.opends.server.types.*;
-import org.opends.server.workflowelement.externalchangelog.ECLWorkflowElement;
 
 import static org.opends.messages.ExtensionMessages.*;
 
@@ -47,20 +42,22 @@
  */
 public class LastChangeNumberVirtualAttributeProvider
        extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
-       implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
 {
   /** The tracer object for the debug logger. */
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
+  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} */
@@ -85,12 +82,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]);
       }
     }
@@ -127,21 +121,5 @@
     searchOperation.appendErrorMessage(message);
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public boolean isConfigurationChangeAcceptable(
-                      UserDefinedVirtualAttributeCfg configuration,
-                      List<LocalizableMessage> unacceptableReasons)
-  {
-    return false;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public ConfigChangeResult applyConfigurationChange(
-                                 UserDefinedVirtualAttributeCfg configuration)
-  {
-    return new ConfigChangeResult(ResultCode.OTHER, false);
-  }
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
index 7f0f109..a711dd2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java
@@ -26,22 +26,18 @@
  */
 package org.opends.server.replication.common;
 
-import java.util.List;
 import java.util.Set;
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.ldap.ResultCode;
-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.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.*;
 
@@ -52,19 +48,21 @@
  */
 public class LastCookieVirtualProvider
    extends VirtualAttributeProvider<UserDefinedVirtualAttributeCfg>
-   implements ConfigurationChangeListener<UserDefinedVirtualAttributeCfg>
 {
   private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
 
+  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} */
@@ -89,17 +87,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();
         return Attributes.create(rule.getAttributeType(), newestCookie);
       }
     }
@@ -132,20 +126,4 @@
     searchOperation.appendErrorMessage(message);
   }
 
-  /** {@inheritDoc} */
-  @Override
-  public boolean isConfigurationChangeAcceptable(
-                      UserDefinedVirtualAttributeCfg configuration,
-                      List<LocalizableMessage> unacceptableReasons)
-  {
-    return false;
-  }
-
-  /** {@inheritDoc} */
-  @Override
-  public ConfigChangeResult applyConfigurationChange(
-                                 UserDefinedVirtualAttributeCfg configuration)
-  {
-    return new ConfigChangeResult(ResultCode.OTHER, false);
-  }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
index 957d470..c1f52c6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java
@@ -490,14 +490,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,
@@ -545,24 +571,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