ControlPanelArgumentParser.java revision 27d398c0bcca6adaf643fa3f6fd02ed67ff4adf1
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
* or http://forgerock.org/license/CDDLv1.0.html.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at legal-notices/CDDLv1_0.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information:
* Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*
*
* Copyright 2009-2010 Sun Microsystems, Inc.
* Portions Copyright 2011-2015 ForgeRock AS.
*/
package org.opends.guitools.controlpanel;
import static org.opends.messages.ToolMessages.*;
import java.util.LinkedHashSet;
import org.forgerock.i18n.LocalizableMessage;
import org.opends.quicksetup.Constants;
import org.opends.quicksetup.UserData;
import org.opends.quicksetup.util.Utils;
import org.opends.server.admin.AdministrationConnector;
import org.opends.server.core.DirectoryServer.DirectoryServerVersionHandler;
import com.forgerock.opendj.cli.ArgumentException;
import com.forgerock.opendj.cli.ArgumentParser;
import com.forgerock.opendj.cli.BooleanArgument;
import com.forgerock.opendj.cli.CommonArguments;
import com.forgerock.opendj.cli.FileBasedArgument;
import com.forgerock.opendj.cli.IntegerArgument;
import com.forgerock.opendj.cli.StringArgument;
/**
* Class used to parse the arguments of the control panel command-line.
*/
public class ControlPanelArgumentParser extends ArgumentParser
{
/** The 'hostName' global argument. */
private StringArgument hostNameArg;
/** The 'port' global argument. */
private IntegerArgument portArg;
/** The 'bindDN' global argument. */
private StringArgument bindDnArg;
/** The 'bindPasswordFile' global argument. */
private FileBasedArgument bindPasswordFileArg;
/** The 'bindPassword' global argument. */
private StringArgument bindPasswordArg;
/** The 'trustAllArg' global argument. */
private BooleanArgument trustAllArg;
/** The 'remoteArg' global argument. */
private BooleanArgument remoteArg;
/** Argument to specify the connect timeout. */
private IntegerArgument connectTimeoutArg;
private BooleanArgument showUsageArg;
/**
* The default constructor for this class.
* @param mainClassName the class name of the main class for the command-line
* that is being used.
* @param msg the usage message.
*/
public ControlPanelArgumentParser(String mainClassName,
LocalizableMessage msg)
{
super(mainClassName, msg, false);
setShortToolDescription(REF_SHORT_DESC_CONTROL_PANEL.get());
setVersionHandler(new DirectoryServerVersionHandler());
}
/**
* Returns the default value for the administration port.
* @return the default value for the administration port.
*/
public static int getDefaultAdministrationPort()
{
return AdministrationConnector.DEFAULT_ADMINISTRATION_CONNECTOR_PORT;
}
/**
* Returns the default bind DN.
* @return the default bind DN.
*/
public static String getDefaultBindDN()
{
return "cn=Directory Manager";
}
/**
* Initializes the arguments without parsing them.
* @throws ArgumentException if there was an error creating or adding the
* arguments. If this occurs is likely to be a bug.
*/
public void initializeArguments() throws ArgumentException
{
hostNameArg = CommonArguments.getHostName(UserData.getDefaultHostName());
addArgument(hostNameArg);
portArg =
CommonArguments.getPort(getDefaultAdministrationPort(),
INFO_DESCRIPTION_ADMIN_PORT.get());
addArgument(portArg);
bindDnArg = CommonArguments.getBindDN(getDefaultBindDN());
addArgument(bindDnArg);
bindPasswordArg = CommonArguments.getBindPassword();
addArgument(bindPasswordArg);
bindPasswordFileArg = CommonArguments.getBindPasswordFile();
addArgument(bindPasswordFileArg);
trustAllArg = CommonArguments.getTrustAll();
addArgument(trustAllArg);
remoteArg = CommonArguments.getRemote();
addArgument(remoteArg);
connectTimeoutArg = CommonArguments.getConnectTimeOut();
connectTimeoutArg.setHidden(false);
addArgument(connectTimeoutArg);
showUsageArg = CommonArguments.getShowUsage();
addArgument(showUsageArg);
setUsageArgument(showUsageArg);
}
/** {@inheritDoc} */
@Override
public void parseArguments(String[] args) throws ArgumentException
{
LinkedHashSet<LocalizableMessage> errorMessages = new LinkedHashSet<LocalizableMessage>();
try
{
super.parseArguments(args);
}
catch (ArgumentException ae)
{
errorMessages.add(ae.getMessageObject());
}
if (bindPasswordArg.isPresent() && bindPasswordFileArg.isPresent())
{
LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
bindPasswordArg.getLongIdentifier(),
bindPasswordFileArg.getLongIdentifier());
errorMessages.add(message);
}
if (errorMessages.size() > 0)
{
LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(
Utils.getMessageFromCollection(errorMessages,
Constants.LINE_SEPARATOR));
throw new ArgumentException(message);
}
}
/**
* Returns the host name explicitly provided in the command-line.
* @return the host name bind DN explicitly provided in the command-line.
* Returns <CODE>null</CODE> if no bind DN was explicitly provided.
*/
public String getExplicitHostName()
{
String hostName = null;
if (hostNameArg.isPresent())
{
hostName = hostNameArg.getValue();
}
return hostName;
}
/**
* Returns the administration port explicitly provided in the command-line.
* @return the administration port explicitly provided in the command-line.
* Returns -1 if no port was explicitly provided.
*/
public int getExplicitPort()
{
int port = -1;
if (portArg.isPresent())
{
try
{
port = portArg.getIntValue();
}
catch (ArgumentException ae)
{
throw new IllegalStateException("Error parsing data: "+ae, ae);
}
}
return port;
}
/**
* Returns the bind DN explicitly provided in the command-line.
* @return the bind DN explicitly provided in the command-line.
* Returns <CODE>null</CODE> if no bind DN was explicitly provided.
*/
public String getExplicitBindDn()
{
String dn = null;
if (bindDnArg.isPresent())
{
dn = bindDnArg.getValue();
}
return dn;
}
/**
* Get the password which has to be used for the command without prompting
* the user. If no password was specified, return <CODE>null</CODE>.
*
* @return The password stored into the specified file on by the
* command line argument, or <CODE>null</CODE> it if not specified.
*/
public String getBindPassword()
{
return getBindPassword(bindPasswordArg, bindPasswordFileArg);
}
/**
* Returns whether the user specified to trust all certificates or not.
* @return whether the user specified to trust all certificates or not.
*/
public boolean isTrustAll()
{
return trustAllArg.isPresent();
}
/**
* Returns the timeout to be used to connect in milliseconds. The method
* must be called after parsing the arguments.
* @return the timeout to be used to connect in milliseconds. Returns
* {@code 0} if there is no timeout.
* @throw {@code IllegalStateException} if the method is called before
* parsing the arguments.
*/
public int getConnectTimeout()
{
try
{
return connectTimeoutArg.getIntValue();
}
catch (ArgumentException ae)
{
throw new IllegalStateException("Argument parser is not parsed: "+ae, ae);
}
}
/**
* Returns whether the user specified to connect to a remote server.
* @return whether the user specified to connect to a remote server.
*/
public boolean isRemote()
{
return remoteArg.isPresent();
}
}