From 92ca37b3ae4ee03b8319a1f5586b9bffd8d73f81 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Thu, 07 Apr 2016 20:05:24 +0000
Subject: [PATCH] OPENDJ-2822 Enabling replication throws a NPE OPENDJ-2821 status tool throws an exception with -X option

---
 opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java |  101 +++++++++++++++++++++++++-------------------------
 1 files changed, 50 insertions(+), 51 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
index 3ff3743..0995a1d 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java
@@ -60,19 +60,35 @@
 
 import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.i18n.LocalizableMessageBuilder;
-import org.forgerock.i18n.LocalizedIllegalArgumentException;
 import org.forgerock.i18n.LocalizableMessageDescriptor.Arg0;
 import org.forgerock.i18n.LocalizableMessageDescriptor.Arg1;
 import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2;
+import org.forgerock.i18n.LocalizedIllegalArgumentException;
 import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.forgerock.opendj.config.ConfigurationFramework;
 import org.forgerock.opendj.config.ManagedObjectNotFoundException;
 import org.forgerock.opendj.config.PropertyException;
 import org.forgerock.opendj.config.server.ConfigException;
-import org.opends.admin.ads.*;
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.server.config.client.CryptoManagerCfgClient;
+import org.forgerock.opendj.server.config.client.ReplicationDomainCfgClient;
+import org.forgerock.opendj.server.config.client.ReplicationServerCfgClient;
+import org.forgerock.opendj.server.config.client.ReplicationSynchronizationProviderCfgClient;
+import org.forgerock.opendj.server.config.client.RootCfgClient;
+import org.forgerock.opendj.server.config.meta.ReplicationDomainCfgDefn;
+import org.forgerock.opendj.server.config.meta.ReplicationServerCfgDefn;
+import org.forgerock.opendj.server.config.meta.ReplicationSynchronizationProviderCfgDefn;
+import org.opends.admin.ads.ADSContext;
 import org.opends.admin.ads.ADSContext.ADSPropertySyntax;
 import org.opends.admin.ads.ADSContext.AdministratorProperty;
 import org.opends.admin.ads.ADSContext.ServerProperty;
+import org.opends.admin.ads.ADSContextException;
+import org.opends.admin.ads.ReplicaDescriptor;
+import org.opends.admin.ads.ServerDescriptor;
+import org.opends.admin.ads.SuffixDescriptor;
+import org.opends.admin.ads.TopologyCache;
+import org.opends.admin.ads.TopologyCacheException;
+import org.opends.admin.ads.TopologyCacheFilter;
 import org.opends.admin.ads.util.ApplicationTrustManager;
 import org.opends.admin.ads.util.ConnectionWrapper;
 import org.opends.admin.ads.util.OpendsCertificateException;
@@ -80,7 +96,11 @@
 import org.opends.admin.ads.util.ServerLoader;
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
-import org.opends.guitools.controlpanel.util.*;
+import org.opends.guitools.controlpanel.util.ConfigFromDirContext;
+import org.opends.guitools.controlpanel.util.ConfigFromFile;
+import org.opends.guitools.controlpanel.util.ControlPanelLog;
+import org.opends.guitools.controlpanel.util.ProcessReader;
+import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.Installation;
@@ -91,17 +111,13 @@
 import org.opends.quicksetup.installer.PeerNotFoundException;
 import org.opends.quicksetup.installer.offline.OfflineInstaller;
 import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
-import org.forgerock.opendj.server.config.client.*;
-import org.forgerock.opendj.server.config.meta.ReplicationDomainCfgDefn;
-import org.forgerock.opendj.server.config.meta.ReplicationServerCfgDefn;
-import org.forgerock.opendj.server.config.meta.ReplicationSynchronizationProviderCfgDefn;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tasks.PurgeConflictsHistoricalTask;
 import org.opends.server.tools.dsreplication.EnableReplicationUserData.EnableReplicationServerData;
+import org.opends.server.tools.dsreplication.ReplicationCliArgumentParser.ServerArgs;
 import org.opends.server.tools.tasks.TaskEntry;
 import org.opends.server.tools.tasks.TaskScheduleInteraction;
 import org.opends.server.tools.tasks.TaskScheduleUserData;
-import org.forgerock.opendj.ldap.DN;
 import org.opends.server.types.HostPort;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.NullOutputStream;
@@ -134,15 +150,15 @@
 import com.forgerock.opendj.cli.ValidationCallback;
 
 import static com.forgerock.opendj.cli.ArgumentConstants.*;
+import static com.forgerock.opendj.cli.CommonArguments.*;
 import static com.forgerock.opendj.cli.Utils.*;
 import static com.forgerock.opendj.util.OperatingSystem.*;
-import static com.forgerock.opendj.cli.CommonArguments.*;
 import static java.util.Collections.*;
+
 import static org.forgerock.util.Utils.*;
+import static org.opends.admin.ads.ServerDescriptor.*;
 import static org.opends.admin.ads.util.ConnectionUtils.*;
 import static org.opends.admin.ads.util.PreferredConnection.*;
-import static org.opends.admin.ads.ServerDescriptor.getReplicationServer;
-import static org.opends.admin.ads.ServerDescriptor.getSuffixDisplay;
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.messages.QuickSetupMessages.*;
 import static org.opends.messages.ToolMessages.*;
@@ -3219,7 +3235,6 @@
         adminPwd = sourceServerCI.getBindPassword();
 
         ctxSource = createConnectionInteracting(sourceServerCI);
-
         if (ctxSource == null)
         {
           cancelled = true;
@@ -3293,7 +3308,6 @@
         if (!error)
         {
           ctxDestination = createConnectionInteracting(destinationServerCI, true);
-
           if (ctxDestination == null)
           {
             cancelled = true;
@@ -3315,26 +3329,24 @@
         cancelled = true;
       }
     }
+
     if (!cancelled)
     {
       uData.setHostNameDestination(hostDestination);
       uData.setPortDestination(portDestination);
-    }
 
-    if (!cancelled)
-    {
       List<String> suffixes = argParser.getBaseDNs();
       cancelled = serversOperations.continueAfterUserInput(
           suffixes, ctxSource.getLdapContext(), ctxDestination.getLdapContext(), true);
       uData.setBaseDNs(suffixes);
-    }
 
-    if (!cancelled)
-    {
-      println();
-      cancelled = serversOperations.confirmOperation(
-          uData, ctxSource.getLdapContext(), ctxDestination.getLdapContext(), true);
-      println();
+      if (!cancelled)
+      {
+        println();
+        cancelled = serversOperations.confirmOperation(
+            uData, ctxSource.getLdapContext(), ctxDestination.getLdapContext(), true);
+        println();
+      }
     }
 
     close(ctxSource, ctxDestination);
@@ -4003,9 +4015,9 @@
       println();
       print(formatter.getFormattedWithPoints(INFO_REPLICATION_CONNECTING.get()));
 
-      LinkedList<LocalizableMessage> errorMessages = new LinkedList<>();
-      ctx1 = createAdministrativeConnection(uData, true, errorMessages);
-      ctx2 = createAdministrativeConnection(uData, false, errorMessages);
+      List<LocalizableMessage> errorMessages = new LinkedList<>();
+      ctx1 = createAdministrativeConnection(uData.getServer1(), errorMessages);
+      ctx2 = createAdministrativeConnection(uData.getServer2(), errorMessages);
 
       if (!errorMessages.isEmpty())
       {
@@ -4080,7 +4092,7 @@
   }
 
   private void checksForNonInteractiveMode(EnableReplicationUserData uData,
-      ConnectionWrapper connWrapper1, ConnectionWrapper connWrapper2, LinkedList<LocalizableMessage> errorMessages)
+      ConnectionWrapper connWrapper1, ConnectionWrapper connWrapper2, List<LocalizableMessage> errorMessages)
   {
     EnableReplicationServerData server1 = uData.getServer1();
     EnableReplicationServerData server2 = uData.getServer2();
@@ -4104,7 +4116,7 @@
   }
 
   private int checkReplicationPort(
-      ConnectionWrapper connWrapper, EnableReplicationServerData server, LinkedList<LocalizableMessage> errorMessages)
+      ConnectionWrapper connWrapper, EnableReplicationServerData server, List<LocalizableMessage> errorMessages)
   {
     int replPort = getReplicationPort(connWrapper);
     boolean hasReplicationPort = replPort > 0;
@@ -4126,7 +4138,7 @@
   }
 
   private void checkAdminAndReplicationPortsAreDifferent(
-      int replPort, EnableReplicationServerData server, LinkedList<LocalizableMessage> errorMessages)
+      int replPort, EnableReplicationServerData server, List<LocalizableMessage> errorMessages)
   {
     if (replPort > 0 && replPort == server.getPort())
     {
@@ -4150,7 +4162,7 @@
     println();
   }
 
-  private void errPrintLn(LinkedList<LocalizableMessage> errorMessages)
+  private void errPrintLn(List<LocalizableMessage> errorMessages)
   {
     for (LocalizableMessage msg : errorMessages)
     {
@@ -4159,13 +4171,12 @@
     }
   }
 
-  private ConnectionWrapper createAdministrativeConnection(EnableReplicationUserData uData, boolean isFirstSetOfValues,
-      LinkedList<LocalizableMessage> errorMessages)
+  private ConnectionWrapper createAdministrativeConnection(EnableReplicationServerData server,
+      List<LocalizableMessage> errorMessages)
   {
-    EnableReplicationServerData server = isFirstSetOfValues ? uData.getServer1() : uData.getServer2();
     try
     {
-      return new ConnectionWrapper(createAdministrativeContext(uData, isFirstSetOfValues, errorMessages),
+      return new ConnectionWrapper(createAdministrativeContext(server, errorMessages),
           getConnectTimeout(), getTrustManager(sourceServerCI));
     }
     catch (NamingException e)
@@ -4175,10 +4186,9 @@
     }
   }
 
-  private InitialLdapContext createAdministrativeContext(EnableReplicationUserData uData, boolean isFirstSetOfValues,
-      LinkedList<LocalizableMessage> errorMessages)
+  private InitialLdapContext createAdministrativeContext(EnableReplicationServerData server,
+      List<LocalizableMessage> errorMessages)
   {
-    EnableReplicationServerData server = isFirstSetOfValues ? uData.getServer1() : uData.getServer2();
     try
     {
       return createAdministrativeContext(
@@ -5091,9 +5101,8 @@
    * parameters to update the configuration.
    * @throws ReplicationCliException if there is an error.
    */
-  private void updateConfiguration(ConnectionWrapper ctx1,
-      ConnectionWrapper ctx2, EnableReplicationUserData uData)
-  throws ReplicationCliException
+  private void updateConfiguration(ConnectionWrapper ctx1, ConnectionWrapper ctx2, EnableReplicationUserData uData)
+      throws ReplicationCliException
   {
     final Set<String> twoReplServers = new LinkedHashSet<>();
     final Set<String> allRepServers = new LinkedHashSet<>();
@@ -5885,10 +5894,7 @@
       }
     }
 
-    /**
-     * Try to figure out if we must explicitly disable replication on
-     * cn=admin data and cn=schema.
-     */
+    // Try to figure out if we must explicitly disable replication on cn=admin data and cn=schema.
     boolean forceDisableSchema = false;
     boolean forceDisableADS = false;
     boolean schemaReplicated = false;
@@ -8152,38 +8158,32 @@
     }
   }
 
-  /** {@inheritDoc} */
   @Override
   public boolean isAdvancedMode() {
     return false;
   }
 
-  /** {@inheritDoc} */
   @Override
   public boolean isInteractive() {
     return !forceNonInteractive && argParser.isInteractive();
   }
 
-  /** {@inheritDoc} */
   @Override
   public boolean isMenuDrivenMode() {
     return true;
   }
 
-  /** {@inheritDoc} */
   @Override
   public boolean isQuiet()
   {
     return argParser.isQuiet();
   }
 
-  /** {@inheritDoc} */
   @Override
   public boolean isScriptFriendly() {
     return argParser.isScriptFriendly();
   }
 
-  /** {@inheritDoc} */
   @Override
   public boolean isVerbose() {
     return true;
@@ -9855,7 +9855,6 @@
 /** Class used to compare replication servers. */
 class ReplicationServerComparator implements Comparator<ServerDescriptor>
 {
-  /** {@inheritDoc} */
   @Override
   public int compare(ServerDescriptor s1, ServerDescriptor s2)
   {

--
Gitblit v1.10.0