public class JCommander
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
JCommander.Builder |
private class |
JCommander.DefaultVariableArity |
(package private) static class |
JCommander.MainParameter
Description of a main parameter, which can be either a list of string or a single field.
|
private static class |
JCommander.Options
Options shared with sub commands
|
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 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 |
helpWasSpecified |
private JCommander.MainParameter |
mainParameter |
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 |
private IUsageFormatter |
usageFormatter
The usage formatter to use in
usage() . |
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) |
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) |
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) |
java.util.ResourceBundle |
getBundle() |
int |
getColumnSize() |
java.util.Map<java.lang.String,JCommander> |
getCommands() |
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.
|
java.util.Map<FuzzyMap.IKey,ParameterDescription> |
getDescriptions() |
java.util.Map<Parameterized,ParameterDescription> |
getFields() |
JCommander.MainParameter |
getMainParameter() |
java.lang.String |
getMainParameterDescription() |
ParameterDescription |
getMainParameterValue() |
java.util.List<java.lang.Object> |
getObjects() |
JCommander.Options |
getOptions() |
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 |
getProgramDisplayName()
Get the program display name (used only in the usage).
|
java.lang.String |
getProgramName()
Get the program name (used only in the usage).
|
java.util.Map<JCommander.ProgramName,JCommander> |
getRawCommands() |
private java.lang.String |
getSeparatorFor(java.lang.String arg) |
java.util.List<java.lang.String> |
getUnknownOptions() |
IUsageFormatter |
getUsageFormatter()
Returns the usage formatter.
|
private void |
handleBooleanOption(ParameterDescription pd,
java.lang.Class<?> fieldType) |
private void |
initializeDefaultValue(ParameterDescription pd) |
private void |
initializeDefaultValues() |
private void |
initMainParameterValue(java.lang.String arg)
Init the main parameter with the given arg.
|
private static <T> T |
instantiateConverter(java.lang.String optionName,
java.lang.Class<? extends T> converterClass) |
private boolean |
isBooleanType(java.lang.Class<?> fieldType) |
private boolean |
isOption(java.lang.String passedArg) |
boolean |
isParameterOverwritingAllowed() |
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 |
setConsole(Console console) |
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 |
setUsageFormatter(IUsageFormatter usageFormatter)
Sets the usage formatter.
|
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()
Prints the usage on
getConsole() using the underlying usageFormatter . |
private void |
validateOptions()
Make sure that all the required parameters have received a value.
|
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 IUsageFormatter usageFormatter
usage()
.private JCommander.MainParameter mainParameter
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 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 void setConsole(Console console)
public Console getConsole()
PrintStream
, typically System.out
.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 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)
public void createDescriptions()
private void addDescription(java.lang.Object object)
private void initializeDefaultValue(ParameterDescription pd)
private void parseValues(java.lang.String[] args, boolean validate)
private boolean isBooleanType(java.lang.Class<?> fieldType)
private void handleBooleanOption(ParameterDescription pd, java.lang.Class<?> fieldType)
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 void initMainParameterValue(java.lang.String arg)
public java.lang.String getMainParameterDescription()
public void setProgramName(java.lang.String name)
public java.lang.String getProgramName()
public java.lang.String getProgramDisplayName()
public void setProgramName(java.lang.String name, java.lang.String... aliases)
name
- program namealiases
- aliases to the program namepublic void usage()
getConsole()
using the underlying usageFormatter
.public void setUsageFormatter(IUsageFormatter usageFormatter)
usageFormatter
- the usage formatterjava.lang.IllegalArgumentException
- if the argument is nullpublic IUsageFormatter getUsageFormatter()
public JCommander.Options getOptions()
public java.util.Map<FuzzyMap.IKey,ParameterDescription> getDescriptions()
public JCommander.MainParameter getMainParameter()
public static JCommander.Builder newBuilder()
public java.util.Map<Parameterized,ParameterDescription> getFields()
public java.util.Comparator<? super ParameterDescription> getParameterDescriptionComparator()
public void setParameterDescriptionComparator(java.util.Comparator<? super ParameterDescription> c)
public void setColumnSize(int columnSize)
public int getColumnSize()
public java.util.ResourceBundle getBundle()
public java.util.List<ParameterDescription> getParameters()
public ParameterDescription getMainParameterValue()
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.util.Map<JCommander.ProgramName,JCommander> getRawCommands()
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)
public 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