/* * 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; } }