Class CommandLine.RunLast

java.lang.Object
org.apache.logging.log4j.core.tools.picocli.CommandLine.RunLast
All Implemented Interfaces:
CommandLine.IParseResultHandler
Enclosing class:
CommandLine

public static class CommandLine.RunLast extends Object implements CommandLine.IParseResultHandler
Command line parse result handler that prints help if requested, and otherwise executes the most specific Runnable or Callable subcommand. For use in the parseWithHandler methods.

Something like this:

     // RunLast implementation: print help if requested, otherwise execute the most specific subcommand
     if (CommandLine.printHelpIfRequested(parsedCommands, System.err, Help.Ansi.AUTO)) {
         return emptyList();
     }
     CommandLine last = parsedCommands.get(parsedCommands.size() - 1);
     Object command = last.getCommand();
     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) {
         Object result;
         try {
             result = ((Callable) command).call();
         } catch (Exception ex) {
             throw new ExecutionException(last, "Error in callable " + command, ex);
         }
         // ...do something with result
     } else {
         throw new ExecutionException(last, "Parsed command (" + command + ") is not Runnable or Callable");
     }
 
Since:
2.0
  • Constructor Details

    • RunLast

      public RunLast()
  • Method Details

    • handleParseResult

      public List<Object> handleParseResult(List<CommandLine> parsedCommands, PrintStream out, CommandLine.Help.Ansi ansi)
      Prints help if requested, and otherwise executes the most specific Runnable or Callable subcommand. If the last (sub)command does not implement either Runnable or Callable, a ExecutionException is thrown detailing the problem and capturing the offending CommandLine object.
      Specified by:
      handleParseResult in interface CommandLine.IParseResultHandler
      Parameters:
      parsedCommands - the CommandLine objects that resulted from successfully parsing the command line arguments
      out - the PrintStream to print help to if requested
      ansi - 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 a null element if the last (sub)command was a Runnable
      Throws:
      CommandLine.ExecutionException - if a problem occurred while processing the parse results; use CommandLine.ExecutionException.getCommandLine() to get the command or subcommand where processing failed