From df7e9d9de29829915ef9c71ce168d3c26eac3190 Mon Sep 17 00:00:00 2001
From: Jean-Noël Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 12 Jul 2016 13:09:59 +0000
Subject: [PATCH] ReplicationCliMain.java: code cleanup

---
 opendj-server-legacy/src/main/java/org/opends/server/tools/dsreplication/ReplicationCliMain.java |  135 ++++++++++++++++++++++----------------------
 1 files changed, 68 insertions(+), 67 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 e59e27f..b435df5 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
@@ -47,6 +47,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
@@ -5871,35 +5872,30 @@
     boolean displayAll = userBaseDNs.isEmpty();
     for (SuffixDescriptor suffix : cache.getSuffixes())
     {
-      DN dn = suffix.getDN();
+      DN suffixDn = suffix.getDN();
 
       // If no base DNs where specified display all the base DNs but the schema
       // and cn=admin data.
-      boolean found = userBaseDNs.contains(dn) || (displayAll && !isSchemaOrInternalAdminSuffix(dn));
-      if (found)
+      if (userBaseDNs.contains(suffixDn)
+          || (displayAll && !isSchemaOrInternalAdminSuffix(suffixDn)))
       {
-        if (isAnyReplicated(suffix))
+        Set<ReplicaDescriptor> suffixReplicas = suffix.getReplicas();
+        if (isAnyReplicated(suffixReplicas))
         {
           oneReplicated = true;
-          replicaLists.add(suffix.getReplicas());
+          replicaLists.add(suffixReplicas);
         }
         else
         {
           // Check if there are already some non replicated base DNs.
-          found = false;
-          for (Set<ReplicaDescriptor> replicas : replicaLists)
+          Set<ReplicaDescriptor> replicas = findNonReplicatedReplicasForSuffixDn(replicaLists, suffixDn);
+          if (replicas != null)
           {
-            ReplicaDescriptor replica = replicas.iterator().next();
-            if (!replica.isReplicated() && replica.getSuffix().getDN().equals(dn))
-            {
-              replicas.addAll(suffix.getReplicas());
-              found = true;
-              break;
-            }
+            replicas.addAll(suffixReplicas);
           }
-          if (!found)
+          else
           {
-            replicaLists.add(suffix.getReplicas());
+            replicaLists.add(suffixReplicas);
           }
         }
       }
@@ -5918,35 +5914,17 @@
       }
       if (!rServers.isEmpty())
       {
-        displayStatus(rServers, uData.isScriptFriendly(), getPreferredConnections(conn));
+        displayReplicationServerStatuses(rServers, uData.isScriptFriendly(), getPreferredConnections(conn));
         somethingDisplayed = true;
       }
     }
 
     if (!replicaLists.isEmpty())
     {
-      List<Set<ReplicaDescriptor>> orderedReplicaLists = new LinkedList<>();
-      for (Set<ReplicaDescriptor> replicas : replicaLists)
-      {
-        DN dn1 = replicas.iterator().next().getSuffix().getDN();
-        boolean inserted = false;
-        for (int i=0; i<orderedReplicaLists.size() && !inserted; i++)
-        {
-          DN dn2 = orderedReplicaLists.get(i).iterator().next().getSuffix().getDN();
-          if (dn1.compareTo(dn2) < 0)
-          {
-            orderedReplicaLists.add(i, replicas);
-            inserted = true;
-          }
-        }
-        if (!inserted)
-        {
-          orderedReplicaLists.add(replicas);
-        }
-      }
+      sort(replicaLists);
       Set<ReplicaDescriptor> replicasWithNoReplicationServer = new HashSet<>();
       Set<ServerDescriptor> serversWithNoReplica = new HashSet<>();
-      displayStatus(orderedReplicaLists, uData.isScriptFriendly(),
+      displayReplicaStatuses(replicaLists, uData.isScriptFriendly(),
             getPreferredConnections(conn), cache.getServers(),
             replicasWithNoReplicationServer, serversWithNoReplica);
       somethingDisplayed = true;
@@ -5986,9 +5964,23 @@
     }
   }
 
-  private boolean isAnyReplicated(SuffixDescriptor suffix)
+  private Set<ReplicaDescriptor> findNonReplicatedReplicasForSuffixDn(List<Set<ReplicaDescriptor>> replicaLists,
+      DN suffixDn)
   {
-    for (ReplicaDescriptor replica : suffix.getReplicas())
+    for (Set<ReplicaDescriptor> replicas : replicaLists)
+    {
+      ReplicaDescriptor replica = replicas.iterator().next();
+      if (!replica.isReplicated() && replica.getSuffix().getDN().equals(suffixDn))
+      {
+        return replicas;
+      }
+    }
+    return null;
+  }
+
+  private boolean isAnyReplicated(Set<ReplicaDescriptor> replicas)
+  {
+    for (ReplicaDescriptor replica : replicas)
     {
       if (replica.isReplicated())
       {
@@ -5998,6 +5990,20 @@
     return false;
   }
 
+  private void sort(List<Set<ReplicaDescriptor>> replicaLists)
+  {
+    Collections.sort(replicaLists, new Comparator<Set<ReplicaDescriptor>>()
+    {
+      @Override
+      public int compare(Set<ReplicaDescriptor> o1, Set<ReplicaDescriptor> o2)
+      {
+        DN dn1 = o1.iterator().next().getSuffix().getDN();
+        DN dn2 = o2.iterator().next().getSuffix().getDN();
+        return dn1.compareTo(dn2);
+      }
+    });
+  }
+
   /**
    * Displays the replication status of the replicas provided.  The code assumes
    * that all the replicas have the same baseDN and that if they are replicated
@@ -6015,7 +6021,7 @@
    * all the servers that act as replication server in the topology but have
    * no replica.
    */
-  private void displayStatus(
+  private void displayReplicaStatuses(
       List<Set<ReplicaDescriptor>> orderedReplicaLists,
       boolean scriptFriendly, Set<PreferredConnection> cnx,
       Set<ServerDescriptor> servers,
@@ -6264,10 +6270,10 @@
    * are associated with no replication domain.
    * @param servers the servers
    * @param cnx the preferred connections used to connect to the server.
-   * @param scriptFriendly wheter to display it on script-friendly mode or not.
+   * @param scriptFriendly whether to display it on script-friendly mode or not.
    */
-  private void displayStatus(Set<ServerDescriptor> servers,
-      boolean scriptFriendly, Set<PreferredConnection> cnx)
+  private void displayReplicationServerStatuses(
+      Set<ServerDescriptor> servers, boolean scriptFriendly, Set<PreferredConnection> cnx)
   {
     TableBuilder tableBuilder = new TableBuilder();
     tableBuilder.appendHeading(INFO_REPLICATION_STATUS_HEADER_SERVERPORT.get());
@@ -6277,7 +6283,7 @@
     for (ServerDescriptor server : servers)
     {
       tableBuilder.startRow();
-      // Server port
+      // Server host+port
       tableBuilder.appendCell(fromObject(getHostPort2(server, cnx)));
       // Replication port
       tableBuilder.appendCell(fromPositiveInt(server.getReplicationServerPort()));
@@ -6285,36 +6291,38 @@
       tableBuilder.appendCell(fromBoolean(server.isReplicationSecure()));
     }
 
-    PrintStream out = getOutputStream();
     TablePrinter printer;
-
     if (scriptFriendly)
     {
       print(INFO_REPLICATION_STATUS_INDEPENDENT_REPLICATION_SERVERS.get());
       println();
-      printer = new TabSeparatedTablePrinter(out);
+      printer = new TabSeparatedTablePrinter(getOutputStream());
     }
     else
     {
       LocalizableMessage msg = INFO_REPLICATION_STATUS_INDEPENDENT_REPLICATION_SERVERS.get();
       print(msg);
       println();
-      int length = msg.length();
-      StringBuilder buf = new StringBuilder();
-      for (int i=0; i<length; i++)
-      {
-        buf.append("=");
-      }
-      print(LocalizableMessage.raw(buf.toString()));
+      print(LocalizableMessage.raw(times('=', msg.length())));
       println();
 
-      printer = new TextTablePrinter(getOutputStream());
-      ((TextTablePrinter)printer).setColumnSeparator(
-        LIST_TABLE_SEPARATOR);
+      final TextTablePrinter ttPrinter = new TextTablePrinter(getOutputStream());
+      ttPrinter.setColumnSeparator(LIST_TABLE_SEPARATOR);
+      printer = ttPrinter;
     }
     tableBuilder.print(printer);
   }
 
+  private String times(char c, int nb)
+  {
+    StringBuilder buf = new StringBuilder();
+    for (int i = 0; i < nb; i++)
+    {
+      buf.append(c);
+    }
+    return buf.toString();
+  }
+
   /**
    * Retrieves all the replication servers for a given baseDN.  The
    * ServerDescriptor is used to identify the server where the suffix is
@@ -9472,18 +9480,11 @@
   public int compare(ServerDescriptor s1, ServerDescriptor s2)
   {
     int compare = s1.getHostName().compareTo(s2.getHostName());
-    if (compare == 0)
+    if (compare != 0)
     {
-      if (s1.getReplicationServerPort() > s2.getReplicationServerPort())
-      {
-        return 1;
-      }
-      else if (s1.getReplicationServerPort() < s2.getReplicationServerPort())
-      {
-        return -1;
-      }
+      return compare;
     }
-    return compare;
+    return ((Integer) s1.getReplicationServerPort()).compareTo(s2.getReplicationServerPort());
   }
 }
 

--
Gitblit v1.10.0