OPENDJSDK-42 Code cleanup
PR-45
Remove unused code.
Remove unnecessary JavaDoc.
Use interface type instead of implementation type as declarative type.
Other minor cleanup actions.
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2008 Sun Microsystems, Inc. |
| | | * Portions copyright 2014-2015 ForgeRock AS. |
| | | * Portions copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | | import static com.forgerock.opendj.cli.CliMessages.*; |
| | | import static com.forgerock.opendj.util.StaticUtils.*; |
| | | |
| | | import java.util.Iterator; |
| | | import java.util.LinkedList; |
| | | import java.util.List; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.LocalizableMessageBuilder; |
| | |
| | | |
| | | /** |
| | | * Indicates whether this argument was provided in the set of |
| | | * properties found is a properties file. |
| | | * properties found in a properties file. |
| | | */ |
| | | private boolean isValueSetByProperty; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the value of this argument as a <CODE>Boolean</CODE>. |
| | | * |
| | | * @return The value of this argument as a <CODE>Boolean</CODE>. |
| | | * @throws ArgumentException |
| | | * If this argument cannot be interpreted as a Boolean value. |
| | | */ |
| | | public boolean getBooleanValue() throws ArgumentException { |
| | | if (values.isEmpty()) { |
| | | throw new ArgumentException(ERR_ARG_NO_BOOLEAN_VALUE.get(name)); |
| | | } |
| | | |
| | | final Iterator<String> iterator = values.iterator(); |
| | | final String valueString = toLowerCase(iterator.next()); |
| | | if (iterator.hasNext()) { |
| | | throw new ArgumentException(ERR_ARG_BOOLEAN_MULTIPLE_VALUES.get(name)); |
| | | } |
| | | |
| | | if ("true".equals(valueString) || "yes".equals(valueString) |
| | | || "on".equals(valueString) || "1".equals(valueString)) { |
| | | return true; |
| | | } else if ("false".equals(valueString) || "no".equals(valueString) |
| | | || "off".equals(valueString) || "0".equals(valueString)) { |
| | | return false; |
| | | } else { |
| | | throw new ArgumentException(ERR_ARG_CANNOT_DECODE_AS_BOOLEAN.get(valueString, name)); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the default value that will be used for this argument if it is |
| | | * not specified on the command line and it is not set from a properties |
| | | * file. |
| | |
| | | return description != null ? description : LocalizableMessage.EMPTY; |
| | | } |
| | | |
| | | /** |
| | | * A supplement to the description intended for use in generated reference documentation. |
| | | */ |
| | | /** A supplement to the description intended for use in generated reference documentation. */ |
| | | private LocalizableMessage docDescriptionSupplement; |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public LocalizableMessage getDocDescriptionSupplement() { |
| | | return docDescriptionSupplement != null ? docDescriptionSupplement : LocalizableMessage.EMPTY; |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public void setDocDescriptionSupplement(final LocalizableMessage docDescriptionSupplement) { |
| | | this.docDescriptionSupplement = docDescriptionSupplement; |
| | |
| | | * If there are multiple values, or the value cannot be parsed |
| | | * as an integer. |
| | | */ |
| | | public double getDoubleValue() throws ArgumentException { |
| | | if (values.isEmpty()) { |
| | | throw new ArgumentException(ERR_ARG_NO_INT_VALUE.get(name)); |
| | | } |
| | | |
| | | final Iterator<String> iterator = values.iterator(); |
| | | final String valueString = iterator.next(); |
| | | if (iterator.hasNext()) { |
| | | throw new ArgumentException(ERR_ARG_INT_MULTIPLE_VALUES.get(name)); |
| | | } |
| | | |
| | | try { |
| | | return Double.parseDouble(valueString); |
| | | } catch (final Exception e) { |
| | | throw new ArgumentException(ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, name), e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the set of values for this argument as a list of integers. |
| | | * |
| | | * @return A list of the integer representations of the values for this |
| | | * argument. |
| | | * @throws ArgumentException |
| | | * If any of the values cannot be parsed as an integer. |
| | | */ |
| | | public LinkedList<Double> getDoubleValues() throws ArgumentException { |
| | | final LinkedList<Double> results = new LinkedList<>(); |
| | | for (String valueString : values) { |
| | | try { |
| | | results.add(Double.valueOf(valueString)); |
| | | } catch (final Exception e) { |
| | | throw new ArgumentException(ERR_ARG_CANNOT_DECODE_AS_DOUBLE.get(valueString, name), e); |
| | | } |
| | | } |
| | | return results; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the value of this argument as an integer. |
| | | * |
| | | * @return The value of this argument as an integer. |
| | | * @throws ArgumentException |
| | | * If there are multiple values, or the value cannot be parsed |
| | | * as an integer. |
| | | */ |
| | | public int getIntValue() throws ArgumentException { |
| | | if (values.isEmpty()) { |
| | | throw new ArgumentException(ERR_ARG_NO_INT_VALUE.get(name)); |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the set of values for this argument as a list of integers. |
| | | * |
| | | * @return A list of the integer representations of the values for this |
| | | * argument. |
| | | * @throws ArgumentException |
| | | * If any of the values cannot be parsed as an integer. |
| | | */ |
| | | public LinkedList<Integer> getIntValues() throws ArgumentException { |
| | | final LinkedList<Integer> results = new LinkedList<>(); |
| | | for (String valueString : values) { |
| | | try { |
| | | results.add(Integer.valueOf(valueString)); |
| | | } catch (final Exception e) { |
| | | throw new ArgumentException(ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, name), e); |
| | | } |
| | | } |
| | | return results; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the long (multi-character) identifier that may be used to |
| | | * specify the value of this argument. |
| | | * |
| | |
| | | * |
| | | * @return The set of string values for this argument. |
| | | */ |
| | | public LinkedList<String> getValues() { |
| | | public List<String> getValues() { |
| | | return values; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * Specifies whether a value must be provided with this argument if it is |
| | | * present. If this is changed from <CODE>false</CODE> to <CODE>true</CODE>, |
| | | * then a value placeholder must also be provided. |
| | | * |
| | | * @param needsValue |
| | | * Indicates whether a value must be provided with this argument |
| | | * if it is present. |
| | | */ |
| | | public void setNeedsValue(final boolean needsValue) { |
| | | this.needsValue = needsValue; |
| | | } |
| | | |
| | | /** |
| | | * Specifies whether this argument is present in the parsed set of |
| | | * command-line arguments. |
| | | * |
| | |
| | | * @return <CODE>true</CODE> if the value is acceptable, or |
| | | * <CODE>false</CODE> if it is not. |
| | | */ |
| | | public abstract boolean valueIsAcceptable(String valueString, |
| | | LocalizableMessageBuilder invalidReason); |
| | | public abstract boolean valueIsAcceptable(String valueString, LocalizableMessageBuilder invalidReason); |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public String toString() { |
| | | final StringBuilder sb = new StringBuilder(); |
| | |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Copyright 2014-2015 ForgeRock AS |
| | | * Copyright 2014-2016 ForgeRock AS |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | /** The value for the long option version. */ |
| | | public static final String OPTION_LONG_PRODUCT_VERSION = "version"; |
| | | |
| | | /** The value for the short option groupName attributes. */ |
| | | public static final char OPTION_SHORT_GROUPNAME = 'g'; |
| | | /** The value for the long option groupName attribute. */ |
| | | public static final String OPTION_LONG_GROUPNAME = "groupName"; |
| | | |
| | | /** The value for the short option newGroupName attribute. */ |
| | | public static final char OPTION_SHORT_NEWGROUPNAME = 'n'; |
| | | /** The value for the long option groupName attribute. */ |
| | | public static final String OPTION_LONG_NEWGROUPNAME = "newGroupName"; |
| | | |
| | | /** The value for the short option serverID attributes. */ |
| | | public static final String OPTION_SHORT_SERVERID = null; |
| | | /** The value for the long option serverID attribute. */ |
| | | public static final String OPTION_LONG_SERVERID = "serverID"; |
| | | |
| | | /** The value for the short option userID attributes. */ |
| | | public static final String OPTION_SHORT_USERID = null; |
| | | /** The value for the long option userID attribute. */ |
| | | public static final String OPTION_LONG_USERID = "userID"; |
| | | |
| | | /** The value for the short option set. */ |
| | | public static final Character OPTION_SHORT_SET = null; |
| | | /** The value for the long option set. */ |
| | | public static final String OPTION_LONG_SET = "set"; |
| | | /** The value for the long "checkStoppability" {@link Argument}. */ |
| | | public static final String OPTION_LONG_CHECK_STOPPABILITY = "checkStoppability"; |
| | | /** The value for the long "windowsNetStop" {@link Argument}. */ |
| | | public static final String OPTION_LONG_WINDOWS_NET_STOP = "windowsNetStop"; |
| | | |
| | | /** Value for the quiet option short form. */ |
| | | public static final Character OPTION_SHORT_QUIET = 'Q'; |
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2012-2015 ForgeRock AS. |
| | | * Portions copyright 2012-2016 ForgeRock AS. |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | }; |
| | | |
| | | /** The set of arguments defined for this parser, referenced by short ID. */ |
| | | private final HashMap<Character, Argument> shortIDMap = new HashMap<>(); |
| | | private final Map<Character, Argument> shortIDMap = new HashMap<>(); |
| | | /** The set of arguments defined for this parser, referenced by long ID. */ |
| | | private final HashMap<String, Argument> longIDMap = new HashMap<>(); |
| | | /** The set of arguments defined for this parser, referenced by argument name. */ |
| | | private final HashMap<String, Argument> argumentMap = new HashMap<>(); |
| | | private final Map<String, Argument> longIDMap = new HashMap<>(); |
| | | /** The total set of arguments defined for this parser. */ |
| | | private final LinkedList<Argument> argumentList = new LinkedList<>(); |
| | | private final List<Argument> argumentList = new LinkedList<>(); |
| | | |
| | | /** The maximum number of unnamed trailing arguments that may be provided. */ |
| | | private final int maxTrailingArguments; |
| | |
| | | /** The display name that will be used for the trailing arguments in the usage information. */ |
| | | private final String trailingArgsDisplayName; |
| | | |
| | | /** The raw set of command-line arguments that were provided. */ |
| | | private String[] rawArguments; |
| | | |
| | | /** Set of argument groups. */ |
| | | protected final Set<ArgumentGroup> argumentGroups = new TreeSet<>(); |
| | | |
| | |
| | | return null; |
| | | } |
| | | |
| | | // check if the properties file argument has been set. If not |
| | | // look for default location. |
| | | String propertiesFilePath = null; |
| | | // check if the properties file argument has been set. If not look for default location. |
| | | String propertiesFilePath; |
| | | if (filePropertiesPathArgument.isPresent()) { |
| | | propertiesFilePath = filePropertiesPathArgument.getValue(); |
| | | } else { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the argument with the specified name. |
| | | * |
| | | * @param name |
| | | * The name of the argument to retrieve. |
| | | * @return The argument with the specified name, or <CODE>null</CODE> if |
| | | * there is no such argument. |
| | | */ |
| | | Argument getArgument(final String name) { |
| | | return argumentMap.get(name); |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the argument with the specified long identifier. |
| | | * |
| | | * @param longID |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the argument with the specified short identifier. |
| | | * |
| | | * @param shortID |
| | | * The short ID for the argument to retrieve. |
| | | * @return The argument with the specified short identifier, or |
| | | * <CODE>null</CODE> if there is no such argument. |
| | | */ |
| | | Argument getArgumentForShortID(final Character shortID) { |
| | | return shortIDMap.get(shortID); |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the list of all arguments that have been defined for this |
| | | * argument parser. |
| | | * |
| | | * @return The list of all arguments that have been defined for this |
| | | * argument parser. |
| | | */ |
| | | public LinkedList<Argument> getArgumentList() { |
| | | public List<Argument> getArgumentList() { |
| | | return argumentList; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the set of arguments mapped by the long identifier that may be |
| | | * used to reference them. Note that arguments that do not have a long |
| | | * identifier will not be present in this list. |
| | | * |
| | | * @return The set of arguments mapped by the long identifier that may be |
| | | * used to reference them. |
| | | */ |
| | | HashMap<String, Argument> getArgumentsByLongID() { |
| | | return longIDMap; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the set of arguments mapped by the short identifier that may be |
| | | * used to reference them. Note that arguments that do not have a short |
| | | * identifier will not be present in this list. |
| | | * |
| | | * @return The set of arguments mapped by the short identifier that may be |
| | | * used to reference them. |
| | | */ |
| | | HashMap<Character, Argument> getArgumentsByShortID() { |
| | | return shortIDMap; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the fully-qualified name of the Java class that should be |
| | | * invoked to launch the program with which this argument parser is |
| | | * associated. |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the maximum number of unnamed trailing arguments that may be |
| | | * provided. |
| | | * |
| | | * @return The maximum number of unnamed trailing arguments that may be |
| | | * provided, or a value less than or equal to zero if no maximum |
| | | * will be enforced. |
| | | */ |
| | | int getMaxTrailingArguments() { |
| | | return maxTrailingArguments; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the minimum number of unnamed trailing arguments that must be |
| | | * provided. |
| | | * |
| | | * @return The minimum number of unnamed trailing arguments that must be |
| | | * provided, or a value less than or equal to zero if no minimum |
| | | * will be enforced. |
| | | */ |
| | | int getMinTrailingArguments() { |
| | | return minTrailingArguments; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the raw set of arguments that were provided. |
| | | * |
| | | * @return The raw set of arguments that were provided, or <CODE>null</CODE> |
| | | * if the argument list has not yet been parsed. |
| | | */ |
| | | String[] getRawArguments() { |
| | | return rawArguments; |
| | | } |
| | | |
| | | /** |
| | | * Given an argument, returns an appropriate group. Arguments may be part of |
| | | * one of the special groups or the default group. |
| | | * |
| | |
| | | return usageArgument != null && usageArgument.getName().equals(a.getName()); |
| | | } |
| | | |
| | | /** |
| | | * Retrieves a message containing usage information based on the defined |
| | | * arguments. |
| | | * |
| | | * @return A string containing usage information based on the defined |
| | | * arguments. |
| | | */ |
| | | public LocalizableMessage getUsageMessage() { |
| | | // TODO: rework getUsage(OutputStream) to work with messages framework |
| | | return LocalizableMessage.raw(getUsage()); |
| | | } |
| | | |
| | | /** Prints the version. */ |
| | | void printVersion() { |
| | | versionPresent = true; |
| | |
| | | * If a problem was encountered while parsing the provided |
| | | * arguments. |
| | | */ |
| | | public void parseArguments(final String[] rawArguments, Properties argumentProperties) |
| | | throws ArgumentException { |
| | | this.rawArguments = rawArguments; |
| | | |
| | | public void parseArguments(final String[] rawArguments, Properties argumentProperties) throws ArgumentException { |
| | | boolean inTrailingArgs = false; |
| | | |
| | | final int numArguments = rawArguments.length; |
| | |
| | | String argName = arg.substring(2); |
| | | String argValue = null; |
| | | final int equalPos = argName.indexOf('='); |
| | | if (equalPos < 0) { |
| | | // This is fine. The value is not part of the argument name token. |
| | | } else if (equalPos == 0) { |
| | | // If equalsPos < 0, this is fine. The value is not part of the argument name token. |
| | | if (equalPos == 0) { |
| | | // The argument starts with "--=", which is not acceptable. |
| | | throw new ArgumentException(ERR_ARGPARSER_LONG_ARG_WITHOUT_NAME.get(arg)); |
| | | } else { |
| | | } else if (equalPos > 0) { |
| | | // The argument is in the form --name=value, so parse them both out. |
| | | argValue = argName.substring(equalPos + 1); |
| | | argName = argName.substring(0, equalPos); |
| | |
| | | */ |
| | | public void parseArguments(final String[] rawArguments, final String propertiesFile, |
| | | final boolean requirePropertiesFile) throws ArgumentException { |
| | | this.rawArguments = rawArguments; |
| | | |
| | | Properties argumentProperties = null; |
| | | |
| | | try (final FileInputStream fis = new FileInputStream(propertiesFile)) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * Sets the usage group description for the default argument group. |
| | | * |
| | | * @param description |
| | | * for the default group |
| | | */ |
| | | void setDefaultArgumentGroupDescription(final LocalizableMessage description) { |
| | | this.defaultArgGroup.setDescription(description); |
| | | } |
| | | |
| | | /** |
| | | * Sets the provided argument which will be used to identify the file |
| | | * properties. |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * Sets the usage group description for the general argument group. |
| | | * |
| | | * @param description |
| | | * for the general group |
| | | */ |
| | | void setGeneralArgumentGroupDescription(final LocalizableMessage description) { |
| | | this.generalArgGroup.setDescription(description); |
| | | } |
| | | |
| | | /** |
| | | * Sets the usage group description for the input/output argument group. |
| | | * |
| | | * @param description |
| | | * for the input/output group |
| | | */ |
| | | void setInputOutputArgumentGroupDescription(final LocalizableMessage description) { |
| | | this.ioArgGroup.setDescription(description); |
| | | } |
| | | |
| | | /** |
| | | * Sets the usage group description for the LDAP argument group. |
| | | * |
| | | * @param description |
| | | * for the LDAP group |
| | | */ |
| | | void setLdapArgumentGroupDescription(final LocalizableMessage description) { |
| | | this.ldapArgGroup.setDescription(description); |
| | | } |
| | | |
| | | /** |
| | | * Sets the provided argument which will be used to identify the file |
| | | * properties. |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * Sets the raw set of arguments. |
| | | * |
| | | * @param rawArguments the raw set of arguments to set |
| | | */ |
| | | void setRawArguments(String[] rawArguments) { |
| | | this.rawArguments = rawArguments; |
| | | } |
| | | |
| | | /** |
| | | * Sets the provided argument as one which will automatically trigger the |
| | | * output of usage information if it is provided on the command line and no |
| | | * further argument validation will be performed. Note that the caller will |
| | |
| | | final String value = argumentProperties.getProperty(a.getPropertyName().toLowerCase()); |
| | | final LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder(); |
| | | if (value != null) { |
| | | boolean addValue = (a instanceof BooleanArgument) ? true |
| | | : a.valueIsAcceptable(value, invalidReason); |
| | | boolean addValue = (a instanceof BooleanArgument) || a.valueIsAcceptable(value, invalidReason); |
| | | if (addValue) { |
| | | a.addValue(value); |
| | | if (a.needsValue()) { |
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2008 Sun Microsystems, Inc. |
| | | * Portions copyright 2014 ForgeRock AS |
| | | * Portions copyright 2014-2016 ForgeRock AS |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | | public final void setPresent(final boolean isPresent) { |
| | | addValue(String.valueOf(isPresent)); |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether the provided value is acceptable for use in this |
| | | * argument. |
| | | * |
| | | * @param valueString |
| | | * The value for which to make the determination. |
| | | * @param invalidReason |
| | | * A buffer into which the invalid reason may be written if the |
| | | * value is not acceptable. |
| | | * @return <CODE>true</CODE> if the value is acceptable, or |
| | | * <CODE>false</CODE> if it is not. |
| | | */ |
| | | @Override |
| | | public boolean valueIsAcceptable(final String valueString, |
| | | final LocalizableMessageBuilder invalidReason) { |
| | | public boolean valueIsAcceptable(final String valueString, final LocalizableMessageBuilder invalidReason) { |
| | | // This argument type should never have a value, so any value |
| | | // provided will be unacceptable. |
| | | invalidReason.append(ERR_BOOLEANARG_NO_VALUE_ALLOWED.get(getName())); |
| | |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Copyright 2014-2015 ForgeRock AS. |
| | | * Copyright 2014-2016 ForgeRock AS. |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the "postreadattrs" string argument. |
| | | * |
| | | * @return The "postreadattrs" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static StringArgument getPostReadAttributes() throws ArgumentException { |
| | | return new StringArgument("postreadattrs", null, "postReadAttributes", false, false, true, |
| | | INFO_ATTRIBUTE_LIST_PLACEHOLDER.get(), null, "postReadAttributes", |
| | | INFO_DESCRIPTION_POSTREAD_ATTRS.get()); |
| | | } |
| | | |
| | | /** |
| | | * Returns the "prereadattrs" string argument. |
| | | * |
| | | * @return The "prereadattrs" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static StringArgument getPreReadAttributes() throws ArgumentException { |
| | | return new StringArgument("prereadattrs", null, "preReadAttributes", false, false, true, |
| | | INFO_ATTRIBUTE_LIST_PLACEHOLDER.get(), null, "preReadAttributes", INFO_DESCRIPTION_PREREAD_ATTRS.get()); |
| | | } |
| | | |
| | | /** |
| | | * Returns the "propertiesFilePath" string argument. |
| | | * |
| | | * @return The "propertiesFilePath" argument. |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the "windowsnetstop" boolean argument. |
| | | * |
| | | * @return The "windowsnetstop" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static BooleanArgument getWindowsNetStop() throws ArgumentException { |
| | | final BooleanArgument netStop = new BooleanArgument("windowsnetstop", null, "windowsNetStop", |
| | | INFO_DESCRIPTION_WINDOWS_NET_STOP.get()); |
| | | netStop.setHidden(true); |
| | | return netStop; |
| | | } |
| | | |
| | | /** |
| | | * Returns the "quiet" boolean argument. |
| | | * |
| | | * @return The "quiet" argument. |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the "targetldif" string argument. |
| | | * <br><i> N.B : the 't' short option is also used by timelimit, |
| | | * testonly, trustmanagerproviderdn, stoptime, start(dateTime).</i> |
| | | * |
| | | * @param description |
| | | * The description of this argument. |
| | | * @return The "targetldif" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static StringArgument getTargetLDIF(final LocalizableMessage description) throws ArgumentException { |
| | | return new StringArgument("targetldif", 't', "targetLDIF", true, false, true, INFO_LDIFFILE_PLACEHOLDER.get(), |
| | | null, null, description); |
| | | } |
| | | |
| | | /** |
| | | * Returns the "timelimit" boolean argument. <br> |
| | | * <i> N.B : the 't' short option is also used by targetldif, testonly, trustmanagerproviderdn, stoptime, |
| | | * start(dateTime).</i> |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the "checkstoppability" boolean argument. |
| | | * |
| | | * @return The "checkstoppability" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static BooleanArgument getCheckStoppability() throws ArgumentException { |
| | | final BooleanArgument cs = new BooleanArgument("checkstoppability", null, "checkStoppability", |
| | | INFO_CHECK_STOPPABILITY.get()); |
| | | cs.setHidden(true); |
| | | return cs; |
| | | } |
| | | |
| | | /** |
| | | * Returns the "configfile" string argument. <br> |
| | | * <i> N.B : the 'f' short option is also used by filename</i> |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the "backupID" string argument. |
| | | * |
| | | * @return The "backupID" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static StringArgument getBackupId() throws ArgumentException { |
| | | return new StringArgument("backupid", 'I', "backupID", false, false, true, |
| | | INFO_BACKUPID_PLACEHOLDER.get(), null, null, INFO_DESCRIPTION_BACKUP_ID.get()); |
| | | } |
| | | |
| | | /** |
| | | * Returns the "backupall" boolean argument. <br><i> N.B : the 'a' short option is also used by addbaseentry, |
| | | * defaultAdd.</i> |
| | | * |
| | | * @return The "backupall" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static BooleanArgument getBackupAll() throws ArgumentException { |
| | | return new BooleanArgument("backupall", 'a', "backUpAll", INFO_DESCRIPTION_BACKUP_ALL.get()); |
| | | } |
| | | |
| | | /** |
| | | * Returns the "baseDN" string argument. |
| | | * |
| | | * @return The "baseDN" argument. |
| | |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static MultiChoiceArgument<SearchScope> getSearchScope() throws ArgumentException { |
| | | public static MultiChoiceArgument<SearchScope> getSearchScope() throws ArgumentException { |
| | | final MultiChoiceArgument<SearchScope> searchScope = new MultiChoiceArgument<>( |
| | | OPTION_LONG_SEARCHSCOPE, OPTION_SHORT_SEARCHSCOPE, OPTION_LONG_SEARCHSCOPE, false, true, |
| | | INFO_SEARCH_SCOPE_PLACEHOLDER.get(), SearchScope.values(), false, |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the "sourceldif" string argument. <br> |
| | | * <i> N.B : the 's' short option is also used by searchScope, servicestate, randomSeed, script-friendly.</i> |
| | | * |
| | | * @param description |
| | | * The description of this argument. |
| | | * @return The "sourceldif" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static StringArgument getSourceLDIF(final LocalizableMessage description) throws ArgumentException { |
| | | return new StringArgument("sourceldif", 's', "sourceLDIF", true, false, true, INFO_LDIFFILE_PLACEHOLDER.get(), |
| | | null, null, description); |
| | | } |
| | | |
| | | /** |
| | | * Returns the "startTLS" boolean argument. |
| | | * |
| | | * @return The "startTLS" argument. |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the "defaultAdd" boolean argument. |
| | | * <br><i> N.B : the 'a' short option is also used by addbaseentry, defaultAdd.</i> |
| | | * |
| | | * @return The "defaultAdd" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static BooleanArgument getDefaultAdd() throws ArgumentException { |
| | | return new BooleanArgument("defaultAdd", 'a', "defaultAdd", INFO_MODIFY_DESCRIPTION_DEFAULT_ADD.get()); |
| | | } |
| | | |
| | | /** |
| | | * Returns the "disableservice" boolean argument. <br> |
| | | * <i> N.B : the 'd' short option is also used by backupdirectory, sampledata.</i> |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * Returns the "useSASLExternal" boolean argument. <br> |
| | | * <i> N.B : the 'r' short option is also used by stopreason, remote.</i> |
| | | * |
| | | * @return The "useSASLExternal" argument. |
| | | * @throws ArgumentException |
| | | * If there is a problem with any of the parameters used to create this argument. |
| | | */ |
| | | public static BooleanArgument getUseSASLExternal() throws ArgumentException { |
| | | final BooleanArgument useSASLExternal = new BooleanArgument("useSASLExternal", 'r', "useSASLExternal", |
| | | INFO_DESCRIPTION_USE_SASL_EXTERNAL.get()); |
| | | useSASLExternal.setPropertyName("useSASLExternal"); |
| | | return useSASLExternal; |
| | | } |
| | | |
| | | /** |
| | | * Returns the "useSSL" boolean argument. <br> |
| | | * <i> N.B : the 'Z' short option is also used by ldapsport.</i> |
| | | * |
| | |
| | | OPTION_LONG_CERT_NICKNAME, false, true, true, INFO_NICKNAME_PLACEHOLDER.get(), null, |
| | | OPTION_LONG_CERT_NICKNAME, INFO_ARGUMENT_DESCRIPTION_CERT_NICKNAME.get()); |
| | | } |
| | | |
| | | } |
| | |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Copyright 2015 ForgeRock AS. |
| | | * Copyright 2015-2016 ForgeRock AS. |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | * @return The supplement to the description for use in generated reference documentation, |
| | | * or LocalizableMessage.EMPTY if there is no supplement. |
| | | */ |
| | | public LocalizableMessage getDocDescriptionSupplement(); |
| | | LocalizableMessage getDocDescriptionSupplement(); |
| | | |
| | | /** |
| | | * Sets a supplement to the description intended for use in generated reference documentation. |
| | |
| | | * @param docDescriptionSupplement The supplement to the description |
| | | * for use in generated reference documentation. |
| | | */ |
| | | public void setDocDescriptionSupplement(final LocalizableMessage docDescriptionSupplement); |
| | | void setDocDescriptionSupplement(final LocalizableMessage docDescriptionSupplement); |
| | | } |
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2008 Sun Microsystems, Inc. |
| | | * Portions copyright 2014-2015 ForgeRock AS |
| | | * Portions copyright 2014-2016 ForgeRock AS |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | import java.io.FileReader; |
| | | import java.io.IOException; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.Map; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.LocalizableMessageBuilder; |
| | |
| | | * command line, it will be treated as the path to the file containing the |
| | | * actual value rather than the value itself. <BR> |
| | | * <BR> |
| | | * Note that if if no filename is provided on the command line but a default |
| | | * Note that if no filename is provided on the command line but a default |
| | | * value is specified programmatically or if the default value is read from a |
| | | * specified property, then that default value will be taken as the actual value |
| | | * rather than a filename. <BR> |
| | |
| | | */ |
| | | public final class FileBasedArgument extends Argument { |
| | | /** The mapping between filenames specified and the first lines read from those files. */ |
| | | private final LinkedHashMap<String, String> namesToValues = new LinkedHashMap<>(); |
| | | private final Map<String, String> namesToValues = new LinkedHashMap<>(); |
| | | |
| | | /** |
| | | * Creates a new file-based argument with the provided information. |
| | |
| | | * @return A map between the filenames specified on the command line and the |
| | | * first lines read from those files. |
| | | */ |
| | | public LinkedHashMap<String, String> getNameToValueMap() { |
| | | public Map<String, String> getNameToValueMap() { |
| | | return namesToValues; |
| | | } |
| | | |
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions copyright 2014 ForgeRock AS |
| | | * Portions copyright 2014-2016 ForgeRock AS |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the lower bound that may be enforced for values of this |
| | | * argument. |
| | | * |
| | | * @return The lower bound that may be enforced for values of this argument. |
| | | */ |
| | | public int getLowerBound() { |
| | | return lowerBound; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the upper bound that may be enforced for values of this |
| | | * argument. |
| | | * |
| | | * @return The upper bound that may be enforced for values of this argument. |
| | | */ |
| | | public int getUpperBound() { |
| | | return upperBound; |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether a lower bound should be enforced for values of this |
| | | * argument. |
| | | * |
| | | * @return <CODE>true</CODE> if a lower bound should be enforced for values |
| | | * of this argument, or <CODE>false</CODE> if not. |
| | | */ |
| | | public boolean hasLowerBound() { |
| | | return hasLowerBound; |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether a upper bound should be enforced for values of this |
| | | * argument. |
| | | * |
| | | * @return <CODE>true</CODE> if a upper bound should be enforced for values |
| | | * of this argument, or <CODE>false</CODE> if not. |
| | | */ |
| | | public boolean hasUpperBound() { |
| | | return hasUpperBound; |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether the provided value is acceptable for use in this |
| | | * argument. |
| | | * |
| | |
| | | * <CODE>false</CODE> if it is not. |
| | | */ |
| | | @Override |
| | | public boolean valueIsAcceptable(final String valueString, |
| | | final LocalizableMessageBuilder invalidReason) { |
| | | // First, the value must be decodable as an integer. |
| | | int intValue; |
| | | public boolean valueIsAcceptable(final String valueString, final LocalizableMessageBuilder invalidReason) { |
| | | try { |
| | | intValue = Integer.parseInt(valueString); |
| | | } catch (final Exception e) { |
| | | final int intValue = Integer.parseInt(valueString); |
| | | if (hasLowerBound && intValue < lowerBound) { |
| | | invalidReason.append(ERR_INTARG_VALUE_BELOW_LOWER_BOUND.get(getPropertyName(), intValue, lowerBound)); |
| | | return false; |
| | | } |
| | | |
| | | if (hasUpperBound && intValue > upperBound) { |
| | | invalidReason.append(ERR_INTARG_VALUE_ABOVE_UPPER_BOUND.get(getPropertyName(), intValue, upperBound)); |
| | | return false; |
| | | } |
| | | |
| | | return true; |
| | | } catch (final NumberFormatException e) { |
| | | invalidReason.append(ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, getPropertyName())); |
| | | return false; |
| | | } |
| | | |
| | | // If there is a lower bound, then the value must be greater than or |
| | | // equal to it. |
| | | if (hasLowerBound && (intValue < lowerBound)) { |
| | | invalidReason.append(ERR_INTARG_VALUE_BELOW_LOWER_BOUND.get(getPropertyName(), intValue, |
| | | lowerBound)); |
| | | return false; |
| | | } |
| | | |
| | | // If there is an upper bound, then the value must be less than or |
| | | // equal to it. |
| | | if (hasUpperBound && (intValue > upperBound)) { |
| | | |
| | | invalidReason.append(ERR_INTARG_VALUE_ABOVE_UPPER_BOUND.get(getPropertyName(), intValue, |
| | | upperBound)); |
| | | return false; |
| | | } |
| | | |
| | | // At this point, the value should be acceptable. |
| | | return true; |
| | | } |
| | | } |
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2008 Sun Microsystems, Inc. |
| | | * Portions copyright 2014 ForgeRock AS |
| | | * Portions copyright 2014-2016 ForgeRock AS |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the set of allowed values for this argument. The contents of |
| | | * this set must not be altered by the caller. |
| | | * |
| | | * @return The set of allowed values for this argument. |
| | | */ |
| | | public Collection<T> getAllowedValues() { |
| | | return allowedValues; |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the string vale for this argument. If it has multiple values, |
| | | * Retrieves the string value for this argument. If it has multiple values, |
| | | * then the first will be returned. If it does not have any values, then the |
| | | * default value will be returned. |
| | | * |
| | |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether the set of allowed values for this argument should be |
| | | * treated in a case-sensitive manner. |
| | | * |
| | | * @return <CODE>true</CODE> if the values are to be treated in a |
| | | * case-sensitive manner, or <CODE>false</CODE> if not. |
| | | */ |
| | | public boolean isCaseSensitive() { |
| | | return caseSensitive; |
| | | } |
| | | |
| | | /** |
| | | * Specifies the default value that will be used for this argument if it is |
| | | * not specified on the command line and it is not set from a properties |
| | | * file. |
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2008 Sun Microsystems, Inc. |
| | | * Portions copyright 2014 ForgeRock AS |
| | | * Portions copyright 2014-2016 ForgeRock AS |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | | import org.forgerock.i18n.LocalizableMessage; |
| | | import org.forgerock.i18n.LocalizableMessageBuilder; |
| | | |
| | | /** |
| | | * This class defines an argument type that will accept any string value. |
| | | */ |
| | | /** This class defines an argument type that will accept any string value. */ |
| | | public final class StringArgument extends Argument { |
| | | /** |
| | | * Creates a new string argument with the provided information. |
| | |
| | | valuePlaceholder, null, null, description); |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether the provided value is acceptable for use in this |
| | | * argument. |
| | | * |
| | | * @param valueString |
| | | * The value for which to make the determination. |
| | | * @param invalidReason |
| | | * A buffer into which the invalid reason may be written if the |
| | | * value is not acceptable. |
| | | * @return <CODE>true</CODE> if the value is acceptable, or |
| | | * <CODE>false</CODE> if it is not. |
| | | */ |
| | | |
| | | @Override |
| | | public boolean valueIsAcceptable(final String valueString, |
| | | final LocalizableMessageBuilder invalidReason) { |
| | | public boolean valueIsAcceptable(final String valueString, final LocalizableMessageBuilder invalidReason) { |
| | | // All values will be acceptable for this argument. |
| | | return true; |
| | | } |
| | |
| | | * |
| | | * |
| | | * Copyright 2006-2010 Sun Microsystems, Inc. |
| | | * Portions Copyright 2011-2015 ForgeRock AS. |
| | | * Portions Copyright 2011-2016 ForgeRock AS. |
| | | */ |
| | | package com.forgerock.opendj.cli; |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the list of all global arguments that have been defined for this argument parser. |
| | | * |
| | | * @return The list of all global arguments that have been defined for this argument parser. |
| | | */ |
| | | public List<Argument> getGlobalArgumentList() { |
| | | return globalArgumentList; |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether this argument parser contains a global argument with the specified name. |
| | | * |
| | | * @param argumentName |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the global argument with the specified name. |
| | | * |
| | | * @param name |
| | | * The name of the global argument to retrieve. |
| | | * @return The global argument with the specified name, or <CODE>null</CODE> if there is no such argument. |
| | | */ |
| | | public Argument getGlobalArgument(String name) { |
| | | return globalArgumentMap.get(name); |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the set of global arguments mapped by the short identifier that may be used to reference them. Note |
| | | * that arguments that do not have a short identifier will not be present in this list. |
| | | * |
| | | * @return The set of global arguments mapped by the short identifier that may be used to reference them. |
| | | */ |
| | | public Map<Character, Argument> getGlobalArgumentsByShortID() { |
| | | return globalShortIDMap; |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether this argument parser has a global argument with the specified short ID. |
| | | * |
| | | * @param shortID |
| | | * The short ID character for which to make the determination. |
| | | * @return <CODE>true</CODE> if a global argument exists with the specified short ID, or <CODE>false</CODE> if not. |
| | | */ |
| | | public boolean hasGlobalArgumentWithShortID(Character shortID) { |
| | | return globalShortIDMap.containsKey(shortID); |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the global argument with the specified short identifier. |
| | | * |
| | | * @param shortID |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the set of global arguments mapped by the long identifier that may be used to reference them. Note that |
| | | * arguments that do not have a long identifier will not be present in this list. |
| | | * |
| | | * @return The set of global arguments mapped by the long identifier that may be used to reference them. |
| | | */ |
| | | public Map<String, Argument> getGlobalArgumentsByLongID() { |
| | | return globalLongIDMap; |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether this argument parser has a global argument with the specified long ID. |
| | | * |
| | | * @param longID |
| | | * The long ID string for which to make the determination. |
| | | * @return <CODE>true</CODE> if a global argument exists with the specified long ID, or <CODE>false</CODE> if not. |
| | | */ |
| | | public boolean hasGlobalArgumentWithLongID(String longID) { |
| | | return globalLongIDMap.containsKey(longID); |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the global argument with the specified long identifier. |
| | | * |
| | | * @param longID |
| | |
| | | } |
| | | |
| | | /** |
| | | * Retrieves the set of subcommands defined for this argument parser, referenced by subcommand name. |
| | | * |
| | | * @return The set of subcommands defined for this argument parser, referenced by subcommand name. |
| | | */ |
| | | public SortedMap<String, SubCommand> getSubCommands() { |
| | | return subCommands; |
| | | } |
| | | |
| | | /** |
| | | * Indicates whether this argument parser has a subcommand with the specified name. |
| | | * |
| | | * @param name |
| | |
| | | } |
| | | |
| | | /** |
| | | * Removes the provided argument from the set of global arguments handled by this parser. |
| | | * |
| | | * @param argument |
| | | * The argument to be removed. |
| | | */ |
| | | protected void removeGlobalArgument(Argument argument) { |
| | | String argumentName = argument.getName(); |
| | | globalArgumentMap.remove(argumentName); |
| | | |
| | | Character shortID = argument.getShortIdentifier(); |
| | | if (shortID != null) { |
| | | globalShortIDMap.remove(shortID); |
| | | } |
| | | |
| | | String longID = argument.getLongIdentifier(); |
| | | if (longID != null) { |
| | | if (!longArgumentsCaseSensitive()) { |
| | | longID = toLowerCase(longID); |
| | | } |
| | | |
| | | globalLongIDMap.remove(longID); |
| | | } |
| | | |
| | | globalArgumentList.remove(argument); |
| | | } |
| | | |
| | | /** |
| | | * Sets the provided argument as one which will automatically trigger the output of full usage information if it is |
| | | * provided on the command line and no further argument validation will be performed. |
| | | * <p> |
| | |
| | | */ |
| | | @Override |
| | | public void parseArguments(String[] rawArguments, Properties argumentProperties) throws ArgumentException { |
| | | setRawArguments(rawArguments); |
| | | this.subCommand = null; |
| | | final ArrayList<String> trailingArguments = getTrailingArguments(); |
| | | trailingArguments.clear(); |
| | |
| | | } |
| | | |
| | | if (matchedValuesFilter.isPresent()) { |
| | | final LinkedList<String> mvFilterStrings = matchedValuesFilter.getValues(); |
| | | final List<String> mvFilterStrings = matchedValuesFilter.getValues(); |
| | | final List<Filter> mvFilters = new ArrayList<>(); |
| | | for (final String s : mvFilterStrings) { |
| | | try { |