Class SubCommandHandler
OptionHandler used with Argument for parsing typical "sub-command" pattern.
The "sub-command" pattern refers to the design of the command line like git and svn, where
the first argument to the command designates a sub-command (say git checkout), then everything
that follows afterward are parsed by this sub-command (which is usually different depending on
which sub-command was selected.)
This OptionHandler models this design pattern with the SubCommands annotation.
See the following example:
class Git {
@Argument(handler={@link SubCommandHandler}.class)
@SubCommands({
@SubCommand(name="checkout", impl=CheckoutCommand.class),
@SubCommand(name="commit", impl=CommitCommand.class),
...
})
Command cmd;
@Option(name="-r")
boolean recursive;
public static void main(String[] args) {
Git git = new Git();
new CmdLineParser(git).parseArgument(args);
git.cmd.execute();
}
}
class CheckoutCommand {
@Option(name="-a")
boolean all;
...
}
An example of legal command line option for this is -r checkout -a.
-
SubCommandonly works withArgumentand not withOption. -
The same field/setter must be also annotated with
SubCommandsthat specify possible sub-commands. -
Any
Options that you define in the Git class above can parse options that appear prior to the sub-command name. This is useful for defining global options that work across sub-commands. -
The matching sub-command implementation gets instantiated with the default constructor,
then a new
CmdLineParserwill be created to parse its annotations. -
The rest of the arguments that follow the sub-command will be parsed with this new
CmdLineParser - The fully populated sub-command instance is set as the value.
This class defines a number of protected methods that allow subtypes to customize various parts of the behaviours. This should also serve as an example if you want to combine this with more sophisticated sub-command lookup, such as through META-INF/services, sezpoz, or annotation indexer.
- Author:
- Kohsuke Kawaguchi
-
Field Summary
Fields inherited from class OptionHandler
option, owner, setter -
Constructor Summary
ConstructorsConstructorDescriptionSubCommandHandler(CmdLineParser parser, OptionDef option, Setter<Object> setter) -
Method Summary
Modifier and TypeMethodDescriptionprotected CmdLineParserconfigureParser(Object subCmd, SubCommand c) protected intGets the default meta variable name used to print the usage screen.protected ObjectintparseArguments(Parameters params) Called if the option that this owner recognizes is found.protected ObjectsubCommand(SubCommand c, Parameters params) Methods inherited from class OptionHandler
getNameAndMeta, getNameAndMeta, print, printDefaultValue
-
Constructor Details
-
SubCommandHandler
-
-
Method Details
-
parseArguments
Description copied from class:OptionHandlerCalled if the option that this owner recognizes is found.- Specified by:
parseArgumentsin classOptionHandler<Object>- Parameters:
params- The rest of the arguments. This method can use this object to access the arguments of the option if necessary. The object is valid only during the method call.- Returns:
- The number of arguments consumed. (For example, returns
0if this option doesn't take any parameters.) - Throws:
CmdLineException
-
fallback
- Throws:
CmdLineException
-
subCommand
- Throws:
CmdLineException
-
configureParser
-
instantiate
-
getDefaultMetaVariable
Description copied from class:OptionHandlerGets the default meta variable name used to print the usage screen. The value returned by this method can be a reference in theResourceBundle, if one was passed toCmdLineParser.- Specified by:
getDefaultMetaVariablein classOptionHandler<Object>- Returns:
nullto hide a meta variable.
-
getMetaVariable
- Overrides:
getMetaVariablein classOptionHandler<Object>
-