/*
* The contents of this file are subject to the terms of the Common Development and
* Distribution License (the License). You may not use this file except in compliance with the
* License.
*
* You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
* specific language governing permission and limitations under the License.
*
* When distributing Covered Software, include this CDDL Header Notice in each file and include
* the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
* Header, with the fields enclosed by brackets [] replaced by your own identifying
* information: "Portions Copyright [year] [name of copyright owner]".
*
* Copyright 2006-2008 Sun Microsystems, Inc.
* Portions Copyright 2013-2016 ForgeRock AS.
*/
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.
*/
public class DataReplicationOptions
{
/**
* This enumeration is used to know what the user wants to do for the data
* (import data or not, what use as source of the data...).
*/
public enum Type
{
/** Standalone server. */
STANDALONE,
/** Replicate Contents and this is the first server in topology.. */
FIRST_IN_TOPOLOGY,
/** Replicate Contents of the new Suffix with existing server. */
IN_EXISTING_TOPOLOGY
}
private Type type;
private int replicationPort = getDefaultReplicationPort();
private boolean secureReplication;
private AuthenticationData authenticationData = new AuthenticationData();
{
authenticationData.setDn(Constants.DIRECTORY_MANAGER_DN);
authenticationData.setPort(4444);
}
/** Private constructor for the DataReplicationOptions object. */
private DataReplicationOptions()
{
}
/**
* 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;
}
/**
* 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;
}
/**
* Returns the type of DataReplicationOptions represented by this object
* (replicate or not).
*
* @return the type of DataReplicationOptions.
*/
public Type getType()
{
return type;
}
/**
* Returns the AuthenticationData to the server used to replicate.
* If it is standalone returns null.
*
* @return the AuthenticationData to the server used to replicate.
*/
public AuthenticationData getAuthenticationData()
{
return authenticationData;
}
/**
* Returns the port that is going to be used for replication.
*
* @return the replication that must be used to configure replication.
*/
public int getReplicationPort()
{
return replicationPort;
}
/**
* Returns whether servers must encrypt data for the replication communication
* with this server.
*
* @return true if the servers must encrypt data for the
* replication communication and false 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;
}
}