From 486ffa6d0abfa0b91dc7ab22ee71758b5eecfb88 Mon Sep 17 00:00:00 2001
From: jvergara <jvergara@localhost>
Date: Wed, 26 Sep 2007 18:57:15 +0000
Subject: [PATCH] Fix for 2306: configure replication encryption on or off in dsreplication and setup-gui

---
 opends/src/quicksetup/org/opends/quicksetup/installer/DataReplicationOptions.java |  122 +++++++++++++++++++++++++++++++---------
 1 files changed, 93 insertions(+), 29 deletions(-)

diff --git a/opends/src/quicksetup/org/opends/quicksetup/installer/DataReplicationOptions.java b/opends/src/quicksetup/org/opends/quicksetup/installer/DataReplicationOptions.java
index 8a78b43..889277d 100644
--- a/opends/src/quicksetup/org/opends/quicksetup/installer/DataReplicationOptions.java
+++ b/opends/src/quicksetup/org/opends/quicksetup/installer/DataReplicationOptions.java
@@ -28,6 +28,9 @@
 
 package org.opends.quicksetup.installer;
 
+import org.opends.quicksetup.Constants;
+import org.opends.quicksetup.util.Utils;
+
 /**
  * This class is used to provide a data model for the Data Replication
  * Options panel of the installer.
@@ -57,41 +60,67 @@
   }
 
   private Type type;
-  private int replicationPort;
-  private AuthenticationData authenticationData;
+  private int replicationPort = getDefaultReplicationPort();
+  private boolean secureReplication;
+  private AuthenticationData authenticationData = new AuthenticationData();
+  {
+    authenticationData.setDn(Constants.DIRECTORY_MANAGER_DN);
+    authenticationData.setPort(389);
+  };
 
   /**
-   * Constructor for the DataReplicationOptions object.
-   *
-   * If the Data Replication Options is STANDALONE or FIRST_IN_TOPOLOGY no
-   * args are considered.
-   *
-   * If the Data Options is IN_EXISTING_TOPOLOGY the args is the authentication
-   * data on the remote server (AuthenticationData object).
-   *
-   * @param type the Type of DataReplicationOptions.
-   * @param args the different argument objects (depending on the Type
-   * specified)
+   * Private constructor for the DataReplicationOptions object.
    */
-  public DataReplicationOptions(Type type, Object... args)
+  private DataReplicationOptions()
   {
-    this.type = type;
+  }
 
-    switch (type)
-    {
-    case IN_EXISTING_TOPOLOGY:
-      authenticationData = (AuthenticationData)args[0];
-      replicationPort = (Integer)args[1];
-      break;
+  /**
+   * Construct an FIRST_IN_TOPOLOGY object.
+   * @param replicationPort the replication port.
+   * @param secureReplication whether servers must encrypt data for the
+   * replication communication with this server.
+   * @return the FIRST_IN_TOPOLOGY object.
+   */
+  public static DataReplicationOptions createFirstInTopology(
+      int replicationPort, boolean secureReplication)
+  {
+    DataReplicationOptions options = new DataReplicationOptions();
+    options.type = Type.FIRST_IN_TOPOLOGY;
+    options.replicationPort = replicationPort;
+    options.secureReplication = secureReplication;
+    return options;
+  }
 
-    default:
-      // If there is something put it.
-      if ((args != null) && (args.length > 0))
-      {
-        authenticationData = (AuthenticationData)args[0];
-        replicationPort = (Integer)args[1];
-      }
-    }
+  /**
+   * Construct an STANDALONE object.
+   * @return the STANDALONE object.
+   */
+  public static DataReplicationOptions createStandalone()
+  {
+    DataReplicationOptions options = new DataReplicationOptions();
+    options.type = Type.STANDALONE;
+    return options;
+  }
+
+  /**
+   * Construct an IN_EXISTING_TOPOLOGY object.
+   * @param authenticationData the authentication data.
+   * @param replicationPort the replication port.
+   * @param secureReplication whether servers must encrypt data for the
+   * replication communication with this server.
+   * @return the IN_EXISTING_TOPOLOGY object.
+   */
+  public static DataReplicationOptions createInExistingTopology(
+      AuthenticationData authenticationData, int replicationPort,
+      boolean secureReplication)
+  {
+    DataReplicationOptions options = new DataReplicationOptions();
+    options.type = Type.IN_EXISTING_TOPOLOGY;
+    options.authenticationData = authenticationData;
+    options.replicationPort = replicationPort;
+    options.secureReplication = secureReplication;
+    return options;
   }
 
   /**
@@ -125,5 +154,40 @@
   {
     return replicationPort;
   }
+
+  /**
+   * Returns whether servers must encrypt data for the replication communication
+   * with this server.
+   *
+   * @return <CODE>true</CODE> if the servers must encrypt data for the
+   * replication communication and <CODE>false</CODE> otherwise.
+   */
+  public boolean useSecureReplication()
+  {
+    return secureReplication;
+  }
+
+  /**
+   * Provides the port that will be proposed to the user in the replication
+   * options panel of the installation wizard. It will check whether we can use
+   * ports of type X989 and if not it will return -1.
+   *
+   * @return the free port of type X989 if it is available and we can use and -1
+   * if not.
+   */
+  static int getDefaultReplicationPort()
+  {
+    int defaultPort = -1;
+
+    for (int i=0;i<10000 && (defaultPort == -1);i+=1000)
+    {
+      int port = i + Constants.DEFAULT_REPLICATION_PORT;
+      if (Utils.canUseAsPort(port))
+      {
+        defaultPort = port;
+      }
+    }
+    return defaultPort;
+  }
 }
 

--
Gitblit v1.10.0