public class JCommander
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
JCommander.Builder |
private class |
JCommander.DefaultVariableArity |
private static class |
JCommander.Options
Options shared with sub commands
|
private static class |
JCommander.ProgramName
Encapsulation of either a main application or an individual command.
|
Modifier and Type | Field and Description |
---|---|
private java.util.Map<FuzzyMap.IKey,JCommander.ProgramName> |
aliasMap
Alias database for reverse lookup
|
private java.util.Map<JCommander.ProgramName,JCommander> |
commands
List of commands and their instance.
|
private static Console |
console |
static java.lang.String |
DEBUG_PROPERTY |
private IVariableArity |
DEFAULT_VARIABLE_ARITY |
private java.util.Map<FuzzyMap.IKey,ParameterDescription> |
descriptions
A map to look up parameter description per option name.
|
private java.util.Map<Parameterized,ParameterDescription> |
fields
A map of all the parameterized fields/methods.
|
private boolean |
firstTimeMainParameter |
private boolean |
helpWasSpecified |
private Parameterized |
mainParameter
This field/method will contain whatever command line parameter is not an option.
|
private Parameter |
mainParameterAnnotation
The annotation found on the main parameter field.
|
private ParameterDescription |
mainParameterDescription |
private java.lang.Object |
mainParameterObject
The object on which we found the main parameter field.
|
private java.util.List<java.lang.Object> |
objects
The objects that contain fields annotated with @Parameter.
|
private JCommander.Options |
options |
private java.lang.String |
parsedAlias
The name of command or alias as it was passed to the
command line
|
private java.lang.String |
parsedCommand
The name of the command after the parsing has run.
|
private JCommander.ProgramName |
programName |
private java.util.Map<Parameterized,ParameterDescription> |
requiredFields
A set of all the parameterizeds that are required.
|
private java.util.List<java.lang.String> |
unknownArgs |
Modifier | Constructor and Description |
---|---|
|
JCommander()
Creates a new un-configured JCommander object.
|
private |
JCommander(JCommander.Options options) |
|
JCommander(java.lang.Object object) |
|
JCommander(java.lang.Object object,
java.util.ResourceBundle bundle) |
|
JCommander(java.lang.Object object,
java.util.ResourceBundle bundle,
java.lang.String... args) |
|
JCommander(java.lang.Object object,
java.lang.String... args)
Deprecated.
Construct a JCommander instance first and then call parse() on it.
|
Modifier and Type | Method and Description |
---|---|
void |
addCommand(java.lang.Object object) |
void |
addCommand(java.lang.String name,
java.lang.Object object)
Add a command object.
|
void |
addCommand(java.lang.String name,
java.lang.Object object,
java.lang.String... aliases)
Add a command object and its aliases.
|
void |
addConverterFactory(IStringConverterFactory converterFactory)
Adds a factory to lookup string converters.
|
void |
addConverterInstanceFactory(IStringConverterInstanceFactory converterInstanceFactory)
Adds a factory to lookup string converters.
|
private void |
addDescription(java.lang.Object object) |
void |
addObject(java.lang.Object object)
Adds the provided arg object to the set of objects that this commander
will parse arguments into.
|
java.lang.Object |
convertValue(Parameterized parameterized,
java.lang.Class type,
java.lang.String optionName,
java.lang.String value) |
private void |
createDescriptions()
Create the ParameterDescriptions for all the \@Parameter found.
|
private int |
determineArity(java.lang.String[] args,
int index,
ParameterDescription pd,
IVariableArity va) |
private java.lang.String[] |
expandArgs(java.lang.String[] originalArgv)
Expand the command line parameters to take @ parameters into account.
|
private java.util.List<java.lang.String> |
expandDynamicArg(java.lang.String arg) |
private JCommander |
findCommand(JCommander.ProgramName name) |
private JCommander |
findCommandByAlias(java.lang.String commandOrAlias) |
private IStringConverter<?> |
findConverterInstance(Parameter parameter,
java.lang.Class<?> forType,
java.lang.String optionName) |
private ParameterDescription |
findParameterDescription(java.lang.String arg) |
private JCommander.ProgramName |
findProgramName(java.lang.String name) |
int |
getColumnSize() |
java.lang.String |
getCommandDescription(java.lang.String commandName) |
java.util.Map<java.lang.String,JCommander> |
getCommands() |
static Console |
getConsole() |
private ParameterDescription |
getDescriptionFor(java.lang.String arg)
If arg is an option, we can look it up directly, but if it's a value,
we need to find the description for the option that precedes it.
|
private java.lang.String |
getI18nString(java.util.ResourceBundle bundle,
java.lang.String key,
java.lang.String def) |
ParameterDescription |
getMainParameter() |
private java.util.List<?> |
getMainParameter(java.lang.String arg) |
java.lang.String |
getMainParameterDescription() |
java.util.List<java.lang.Object> |
getObjects() |
private java.util.Comparator<? super ParameterDescription> |
getParameterDescriptionComparator() |
java.util.List<ParameterDescription> |
getParameters() |
java.lang.String |
getParsedAlias()
The name of the command or the alias in the form it was
passed to the command line.
|
java.lang.String |
getParsedCommand() |
private ParameterDescription |
getPrefixDescriptionFor(java.lang.String arg) |
java.lang.String |
getProgramName()
Get the program name (used only in the usage).
|
private java.lang.String |
getSeparatorFor(java.lang.String arg) |
java.util.List<java.lang.String> |
getUnknownOptions() |
private void |
initializeDefaultValue(ParameterDescription pd) |
private void |
initializeDefaultValues() |
private static <T> T |
instantiateConverter(java.lang.String optionName,
java.lang.Class<? extends T> converterClass) |
private boolean |
isOption(java.lang.String passedArg) |
boolean |
isParameterOverwritingAllowed() |
private java.lang.StringBuilder |
join(java.lang.Object[] args) |
private boolean |
matchArg(java.lang.String arg,
FuzzyMap.IKey key) |
static JCommander.Builder |
newBuilder() |
private void |
p(java.lang.String string) |
private void |
parse(boolean validate,
java.lang.String... args) |
void |
parse(java.lang.String... args)
Parse and validate the command line parameters.
|
private void |
parseValues(java.lang.String[] args,
boolean validate)
Main method that parses the values and initializes the fields accordingly.
|
void |
parseWithoutValidation(java.lang.String... args)
Parse the command line parameters without validating them.
|
private static java.lang.String |
pluralize(int quantity,
java.lang.String singular,
java.lang.String plural) |
private int |
processFixedArity(java.lang.String[] args,
int index,
ParameterDescription pd,
boolean validate,
java.lang.Class<?> fieldType) |
private int |
processFixedArity(java.lang.String[] args,
int originalIndex,
ParameterDescription pd,
boolean validate,
java.lang.Class<?> fieldType,
int arity) |
private int |
processPassword(java.lang.String[] args,
int index,
ParameterDescription pd,
boolean validate) |
private int |
processVariableArity(java.lang.String[] args,
int index,
ParameterDescription pd,
boolean validate) |
private java.util.List<java.lang.String> |
readFile(java.lang.String fileName)
Reads the file specified by filename and returns the file content as a string.
|
private char[] |
readPassword(java.lang.String description,
boolean echoInput)
Invoke Console.readPassword through reflection to avoid depending
on Java 6.
|
private java.lang.String |
s(int count) |
void |
setAcceptUnknownOptions(boolean b) |
void |
setAllowAbbreviatedOptions(boolean b) |
void |
setAllowParameterOverwriting(boolean b) |
void |
setAtFileCharset(java.nio.charset.Charset charset)
Sets the charset used to expand
@files . |
void |
setCaseSensitiveOptions(boolean b) |
void |
setColumnSize(int columnSize) |
void |
setDefaultProvider(IDefaultProvider defaultProvider)
Define the default provider for this instance.
|
void |
setDescriptionsBundle(java.util.ResourceBundle bundle)
Sets the
ResourceBundle to use for looking up descriptions. |
void |
setExpandAtSign(boolean expandAtSign)
Disables expanding
@file . |
void |
setParameterDescriptionComparator(java.util.Comparator<? super ParameterDescription> c) |
void |
setProgramName(java.lang.String name)
Set the program name (used only in the usage).
|
void |
setProgramName(java.lang.String name,
java.lang.String... aliases)
Set the program name
|
void |
setVerbose(int verbose) |
private java.lang.String[] |
subArray(java.lang.String[] args,
int index) |
private static java.lang.String |
trim(java.lang.String string)
Remove spaces at both ends and handle double quotes.
|
private static <T> T |
tryInstantiateConverter(java.lang.String optionName,
java.lang.Class<T> converterClass) |
void |
usage()
Display the help on System.out.
|
void |
usage(java.lang.String commandName)
Display the usage for this command.
|
void |
usage(java.lang.StringBuilder out)
Store the help in the passed string builder.
|
void |
usage(java.lang.StringBuilder out,
java.lang.String indent) |
void |
usage(java.lang.String commandName,
java.lang.StringBuilder out)
Store the help for the command in the passed string builder.
|
void |
usage(java.lang.String commandName,
java.lang.StringBuilder out,
java.lang.String indent)
Store the help for the command in the passed string builder, indenting
every line with "indent".
|
private void |
validateOptions()
Make sure that all the required parameters have received a value.
|
private void |
wrapDescription(java.lang.StringBuilder out,
int indent,
java.lang.String description)
Wrap a potentially long line to
getColumnSize() . |
public static final java.lang.String DEBUG_PROPERTY
private java.util.Map<FuzzyMap.IKey,ParameterDescription> descriptions
private java.util.List<java.lang.Object> objects
private boolean firstTimeMainParameter
private Parameterized mainParameter
private java.lang.Object mainParameterObject
private Parameter mainParameterAnnotation
private ParameterDescription mainParameterDescription
private java.util.Map<Parameterized,ParameterDescription> requiredFields
private java.util.Map<Parameterized,ParameterDescription> fields
private java.util.Map<JCommander.ProgramName,JCommander> commands
private java.util.Map<FuzzyMap.IKey,JCommander.ProgramName> aliasMap
private java.lang.String parsedCommand
private java.lang.String parsedAlias
private JCommander.ProgramName programName
private boolean helpWasSpecified
private java.util.List<java.lang.String> unknownArgs
private static Console console
private final JCommander.Options options
private final IVariableArity DEFAULT_VARIABLE_ARITY
private JCommander(JCommander.Options options)
public JCommander()
public JCommander(java.lang.Object object)
object
- The arg object expected to contain Parameter
annotations.public JCommander(java.lang.Object object, java.util.ResourceBundle bundle)
object
- The arg object expected to contain Parameter
annotations.bundle
- The bundle to use for the descriptions. Can be null.public JCommander(java.lang.Object object, java.util.ResourceBundle bundle, java.lang.String... args)
object
- The arg object expected to contain Parameter
annotations.bundle
- The bundle to use for the descriptions. Can be null.args
- The arguments to parse (optional).@Deprecated public JCommander(java.lang.Object object, java.lang.String... args)
object
- The arg object expected to contain Parameter
annotations.args
- The arguments to parse (optional).public void setExpandAtSign(boolean expandAtSign)
@file
.
JCommander supports the @file
syntax, which allows you to put all your options
into a file and pass this file as parameter @param expandAtSign whether to expand @file
.public static Console getConsole()
public final void addObject(java.lang.Object object)
object
- The arg object expected to contain Parameter
annotations. If object
is an array or is Iterable
,
the child objects will be added instead.public final void setDescriptionsBundle(java.util.ResourceBundle bundle)
ResourceBundle
to use for looking up descriptions.
Set this to null
to use description text directly.public void parse(java.lang.String... args)
public void parseWithoutValidation(java.lang.String... args)
private void parse(boolean validate, java.lang.String... args)
private java.lang.StringBuilder join(java.lang.Object[] args)
private void initializeDefaultValues()
private void validateOptions()
private static java.lang.String pluralize(int quantity, java.lang.String singular, java.lang.String plural)
private java.lang.String[] expandArgs(java.lang.String[] originalArgv)
originalArgv
- the original command line parametersprivate java.util.List<java.lang.String> expandDynamicArg(java.lang.String arg)
private boolean matchArg(java.lang.String arg, FuzzyMap.IKey key)
private boolean isOption(java.lang.String passedArg)
private ParameterDescription getPrefixDescriptionFor(java.lang.String arg)
private ParameterDescription getDescriptionFor(java.lang.String arg)
private java.lang.String getSeparatorFor(java.lang.String arg)
private java.util.List<java.lang.String> readFile(java.lang.String fileName)
fileName
- the command line filenameprivate static java.lang.String trim(java.lang.String string)
private void createDescriptions()
private void addDescription(java.lang.Object object)
private void initializeDefaultValue(ParameterDescription pd)
private void parseValues(java.lang.String[] args, boolean validate)
private final int determineArity(java.lang.String[] args, int index, ParameterDescription pd, IVariableArity va)
private int processPassword(java.lang.String[] args, int index, ParameterDescription pd, boolean validate)
private int processVariableArity(java.lang.String[] args, int index, ParameterDescription pd, boolean validate)
private int processFixedArity(java.lang.String[] args, int index, ParameterDescription pd, boolean validate, java.lang.Class<?> fieldType)
private int processFixedArity(java.lang.String[] args, int originalIndex, ParameterDescription pd, boolean validate, java.lang.Class<?> fieldType, int arity)
private char[] readPassword(java.lang.String description, boolean echoInput)
private java.lang.String[] subArray(java.lang.String[] args, int index)
private java.util.List<?> getMainParameter(java.lang.String arg)
arg
- the arg that we're about to add (only passed here to output a meaningful
error message).public java.lang.String getMainParameterDescription()
public void setProgramName(java.lang.String name)
public java.lang.String getProgramName()
public void setProgramName(java.lang.String name, java.lang.String... aliases)
name
- program namealiases
- aliases to the program namepublic void usage(java.lang.String commandName)
public void usage(java.lang.String commandName, java.lang.StringBuilder out)
public void usage(java.lang.String commandName, java.lang.StringBuilder out, java.lang.String indent)
public java.lang.String getCommandDescription(java.lang.String commandName)
private java.lang.String getI18nString(java.util.ResourceBundle bundle, java.lang.String key, java.lang.String def)
public void usage()
public static JCommander.Builder newBuilder()
public void usage(java.lang.StringBuilder out)
public void usage(java.lang.StringBuilder out, java.lang.String indent)
private java.util.Comparator<? super ParameterDescription> getParameterDescriptionComparator()
public void setParameterDescriptionComparator(java.util.Comparator<? super ParameterDescription> c)
public void setColumnSize(int columnSize)
public int getColumnSize()
private void wrapDescription(java.lang.StringBuilder out, int indent, java.lang.String description)
getColumnSize()
.out
- the outputindent
- the indentation in spaces for lines after the first line.description
- the text to wrap. No extra spaces are inserted before description
. If the first line needs to be indented prepend the
correct number of spaces to description
.public java.util.List<ParameterDescription> getParameters()
public ParameterDescription getMainParameter()
private void p(java.lang.String string)
public void setDefaultProvider(IDefaultProvider defaultProvider)
public void addConverterFactory(IStringConverterFactory converterFactory)
converterFactory
- the factory determining string converterspublic void addConverterInstanceFactory(IStringConverterInstanceFactory converterInstanceFactory)
converterInstanceFactory
- the factory generating string converter instancesprivate IStringConverter<?> findConverterInstance(Parameter parameter, java.lang.Class<?> forType, java.lang.String optionName)
public java.lang.Object convertValue(Parameterized parameterized, java.lang.Class type, java.lang.String optionName, java.lang.String value)
type
- The type of the actual parameteroptionName
- value
- The value to convertprivate static <T> T tryInstantiateConverter(java.lang.String optionName, java.lang.Class<T> converterClass)
private static <T> T instantiateConverter(java.lang.String optionName, java.lang.Class<? extends T> converterClass) throws java.lang.InstantiationException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
java.lang.InstantiationException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
public void addCommand(java.lang.String name, java.lang.Object object)
public void addCommand(java.lang.Object object)
public void addCommand(java.lang.String name, java.lang.Object object, java.lang.String... aliases)
public java.util.Map<java.lang.String,JCommander> getCommands()
public java.lang.String getParsedCommand()
public java.lang.String getParsedAlias()
null
if no
command or alias was specified.null
.private java.lang.String s(int count)
public java.util.List<java.lang.Object> getObjects()
private ParameterDescription findParameterDescription(java.lang.String arg)
private JCommander findCommand(JCommander.ProgramName name)
private JCommander.ProgramName findProgramName(java.lang.String name)
private JCommander findCommandByAlias(java.lang.String commandOrAlias)
public void setVerbose(int verbose)
public void setCaseSensitiveOptions(boolean b)
public void setAllowAbbreviatedOptions(boolean b)
public void setAcceptUnknownOptions(boolean b)
public java.util.List<java.lang.String> getUnknownOptions()
public void setAllowParameterOverwriting(boolean b)
public boolean isParameterOverwritingAllowed()
public void setAtFileCharset(java.nio.charset.Charset charset)
@files
.charset
- the charset