Class CommandLine.RunLast
- java.lang.Object
-
- picocli.CommandLine.AbstractHandler<R,CommandLine.AbstractParseResultHandler<R>>
-
- picocli.CommandLine.AbstractParseResultHandler<java.util.List<java.lang.Object>>
-
- picocli.CommandLine.RunLast
-
- All Implemented Interfaces:
CommandLine.IExecutionStrategy,CommandLine.IParseResultHandler,CommandLine.IParseResultHandler2<java.util.List<java.lang.Object>>
- Enclosing class:
- CommandLine
public static class CommandLine.RunLast extends CommandLine.AbstractParseResultHandler<java.util.List<java.lang.Object>> implements CommandLine.IParseResultHandler
Command line execution strategy that prints help if requested, and otherwise executes the most specificRunnableorCallablesubcommand. For use by theexecutemethod.Something like this:
// RunLast implementation: print help if requested, otherwise execute the most specific subcommand List<CommandLine> parsedCommands = parseResult.asCommandLineList(); if (CommandLine.printHelpIfRequested(parsedCommands, out(), err(), ansi())) { return emptyList(); } CommandLine last = parsedCommands.get(parsedCommands.size() - 1); Object command = last.getCommand(); Object result = null; if (command instanceof Runnable) { try { ((Runnable) command).run(); } catch (Exception ex) { throw new ExecutionException(last, "Error in runnable " + command, ex); } } else if (command instanceof Callable) { try { result = ((Callable) command).call(); } catch (Exception ex) { throw new ExecutionException(last, "Error in callable " + command, ex); } } else { throw new ExecutionException(last, "Parsed command (" + command + ") is not Runnable or Callable"); } last.setExecutionResult(result); return Arrays.asList(result);From picocli v2.0,
RunLastis used to implement therunandcallconvenience methods.- Since:
- 2.0
-
-
Constructor Summary
Constructors Constructor Description RunLast()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intexecute(CommandLine.ParseResult parseResult)"Executes" the user input and returns an exit code.protected java.util.List<CommandLine.IExitCodeGenerator>extractExitCodeGenerators(CommandLine.ParseResult parseResult)protected java.util.List<java.lang.Object>handle(CommandLine.ParseResult parseResult)Executes the most specificRunnableorCallablesubcommand.java.util.List<java.lang.Object>handleParseResult(java.util.List<CommandLine> parsedCommands, java.io.PrintStream out, CommandLine.Help.Ansi ansi)Prints help if requested, and otherwise executes the most specificRunnableorCallablesubcommand.protected CommandLine.RunLastself()Returnsthisto allow method chaining when calling the setters for a fluent API.-
Methods inherited from class picocli.CommandLine.AbstractParseResultHandler
handleParseResult
-
Methods inherited from class picocli.CommandLine.AbstractHandler
andExit, ansi, colorScheme, err, exit, exitCode, hasExitCode, out, returnResultOrExit, throwOrExit, useAnsi, useErr, useOut
-
-
-
-
Method Detail
-
execute
public int execute(CommandLine.ParseResult parseResult) throws CommandLine.ExecutionException
"Executes" the user input and returns an exit code. Execution often means invoking a method on the selected CommandSpec's user object, and making the return value of that invocation available viasetExecutionResult.- Specified by:
executein interfaceCommandLine.IExecutionStrategy- Overrides:
executein classCommandLine.AbstractParseResultHandler<java.util.List<java.lang.Object>>- Parameters:
parseResult- the parse result from which to select one or moreCommandSpecinstances to execute.- Returns:
- an exit code
- Throws:
CommandLine.ExecutionException- if any problem occurred while executing the command. Any exceptions (other than ParameterException) should be wrapped in a ExecutionException and not thrown as is.
-
handleParseResult
public java.util.List<java.lang.Object> handleParseResult(java.util.List<CommandLine> parsedCommands, java.io.PrintStream out, CommandLine.Help.Ansi ansi)
Prints help if requested, and otherwise executes the most specificRunnableorCallablesubcommand.For repeatable subcommands, this method may execute multiple subcommands: the most deeply nested subcommands that have the same parent command.
Finally, either a list of result objects is returned, or the JVM is terminated if an exit code was set.
If the last (sub)command does not implement either
RunnableorCallable, anExecutionExceptionis thrown detailing the problem and capturing the offendingCommandLineobject.- Specified by:
handleParseResultin interfaceCommandLine.IParseResultHandler- Parameters:
parsedCommands- theCommandLineobjects that resulted from successfully parsing the command line argumentsout- thePrintStreamto print help to if requestedansi- for printing help messages using ANSI styles and colors- Returns:
- an empty list if help was requested, or a list containing a single element: the result of calling the
Callable, or anullelement if the last (sub)command was aRunnable - Throws:
CommandLine.ParameterException- if theHelpCommandwas invoked for an unknown subcommand. AnyParameterExceptionsthrown from this method are treated as if this exception was thrown during parsing and passed to theCommandLine.IExceptionHandlerCommandLine.ExecutionException- if a problem occurred while processing the parse results; useCommandLine.ExecutionException.getCommandLine()to get the command or subcommand where processing failed
-
handle
protected java.util.List<java.lang.Object> handle(CommandLine.ParseResult parseResult) throws CommandLine.ExecutionException
Executes the most specificRunnableorCallablesubcommand.For repeatable subcommands, this method may execute multiple subcommands: the most deeply nested subcommands that have the same parent command.
If the user object of the executed (sub)command does not implement either
RunnableorCallableand is not aMethod, anExecutionExceptionis thrown detailing the problem and capturing the offendingCommandLineobject.- Specified by:
handlein classCommandLine.AbstractParseResultHandler<java.util.List<java.lang.Object>>- Parameters:
parseResult- theParseResultthat resulted from successfully parsing the command line arguments- Returns:
- an empty list if help was requested, or a list containing a single element: the result of calling the
Callable, or anullelement if the last (sub)command was aRunnable - Throws:
CommandLine.ExecutionException- if a problem occurred while processing the parse results; useCommandLine.ExecutionException.getCommandLine()to get the command or subcommand where processing failed- Since:
- 3.0
-
extractExitCodeGenerators
protected java.util.List<CommandLine.IExitCodeGenerator> extractExitCodeGenerators(CommandLine.ParseResult parseResult)
- Overrides:
extractExitCodeGeneratorsin classCommandLine.AbstractParseResultHandler<java.util.List<java.lang.Object>>
-
self
protected CommandLine.RunLast self()
Description copied from class:CommandLine.AbstractHandlerReturnsthisto allow method chaining when calling the setters for a fluent API.- Specified by:
selfin classCommandLine.AbstractHandler<java.util.List<java.lang.Object>,CommandLine.AbstractParseResultHandler<java.util.List<java.lang.Object>>>
-
-