/* * 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 2008-2009 Sun Microsystems, Inc. * Portions Copyright 2012-2016 ForgeRock AS. */ package org.opends.server.tools.status; import static com.forgerock.opendj.cli.CommonArguments.*; import static org.opends.messages.AdminToolMessages.*; import static org.opends.messages.ToolMessages.*; import java.io.OutputStream; import java.util.ArrayList; import org.opends.server.admin.client.cli.SecureConnectionCliArgs; import org.opends.server.admin.client.cli.SecureConnectionCliParser; import org.opends.server.core.DirectoryServer.DirectoryServerVersionHandler; import com.forgerock.opendj.cli.Argument; import com.forgerock.opendj.cli.ArgumentException; import com.forgerock.opendj.cli.BooleanArgument; import com.forgerock.opendj.cli.IntegerArgument; import com.forgerock.opendj.cli.StringArgument; /** * The class that is used to parse the arguments provided in the status command * line. */ public class StatusCliArgumentParser extends SecureConnectionCliParser { private BooleanArgument noPromptArg; /** This CLI is always using the administration connector with SSL. */ private static final boolean alwaysSSL = true; /** The 'refresh' argument. */ private IntegerArgument refreshArg; /** The 'scriptFriendly' argument. */ private BooleanArgument scriptFriendlyArg; /** * Creates a new instance of this argument parser with no arguments. * * @param mainClassName * The fully-qualified name of the Java class that should * be invoked to launch the program with which this * argument parser is associated. */ public StatusCliArgumentParser(String mainClassName) { super(mainClassName, INFO_STATUS_CLI_USAGE_DESCRIPTION.get(), false); setVersionHandler(new DirectoryServerVersionHandler()); setShortToolDescription(REF_SHORT_DESC_STATUS.get()); } /** * Initialize Global option. * * @param outStream * The output stream used for the usage. * @throws ArgumentException * If there is a problem with any of the parameters used * to create this argument. */ public void initializeGlobalArguments(OutputStream outStream) throws ArgumentException { ArrayList defaultArgs = new ArrayList<>(createGlobalArguments(outStream, alwaysSSL)); defaultArgs.remove(secureArgsList.portArg); defaultArgs.remove(secureArgsList.hostNameArg); defaultArgs.remove(verboseArg); defaultArgs.remove(noPropertiesFileArg); defaultArgs.remove(propertiesFileArg); noPromptArg = getNoPrompt(); defaultArgs.add(0, noPromptArg); scriptFriendlyArg = getScriptFriendly(); defaultArgs.add(1, scriptFriendlyArg); StringArgument propertiesFileArgument = getPropertiesFile(); defaultArgs.add(propertiesFileArgument); setFilePropertiesArgument(propertiesFileArgument); BooleanArgument noPropertiesFileArgument = getNoPropertiesFile(); defaultArgs.add(noPropertiesFileArgument); setNoPropertiesFileArgument(noPropertiesFileArgument); initializeGlobalArguments(defaultArgs); refreshArg = IntegerArgument.builder("refresh") .shortIdentifier('r') .description(INFO_DESCRIPTION_REFRESH_PERIOD.get()) .lowerBound(1) .valuePlaceholder(INFO_PERIOD_PLACEHOLDER.get()) .buildArgument(); addGlobalArgument(refreshArg, ioArgGroup); } /** * Returns the SecureConnectionCliArgs object containing the arguments * of this parser. * @return the SecureConnectionCliArgs object containing the arguments * of this parser. */ SecureConnectionCliArgs getSecureArgsList() { return secureArgsList; } /** * Tells whether the user specified to have an interactive status CLI or not. * This method must be called after calling parseArguments. * @return true if the user specified to have an interactive * status CLI and false otherwise. */ public boolean isInteractive() { return !noPromptArg.isPresent(); } /** * Tells whether the user specified to have a script-friendly output or not. * This method must be called after calling parseArguments. * @return true if the user specified to have a script-friendly * output and false otherwise. */ public boolean isScriptFriendly() { return scriptFriendlyArg.isPresent(); } /** * Returns the refresh period (in seconds) specified in the command-line. * If no refresh period was specified, returns -1. * The code assumes that the attributes have been successfully parsed. * @return the specified refresh period in the command-line. */ public int getRefreshPeriod() { if (refreshArg.isPresent()) { try { return refreshArg.getIntValue(); } catch (ArgumentException ae) { // Bug throw new IllegalStateException("Error getting value, this method "+ "should be called after parsing the attributes: "+ae, ae); } } return -1; } /** * Returns the bind DN explicitly provided in the command-line. * @return the bind DN explicitly provided in the command-line. * Returns null if no bind DN was explicitly provided. */ public String getExplicitBindDn() { if (secureArgsList.bindDnArg.isPresent()) { return secureArgsList.bindDnArg.getValue(); } return null; } /** * Returns the bind DN default value. * @return the bind DN default value. */ public String getDefaultBindDn() { return secureArgsList.bindDnArg.getDefaultValue(); } }