X-Git-Url: http://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fapi%2Fcli%2FDescribedCommand.java;fp=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fapi%2Fcli%2FDescribedCommand.java;h=51cb2cecaa2558698d63a30d89d7a479fbda71a6;hp=0000000000000000000000000000000000000000;hb=40f2d6712d120dd62a42b7db3a6f074ce49c83d4;hpb=c7b612ca9bd7df43b0bec37c8abcae846587c978 diff --git a/org.argeo.cms/src/org/argeo/api/cli/DescribedCommand.java b/org.argeo.cms/src/org/argeo/api/cli/DescribedCommand.java new file mode 100644 index 000000000..51cb2ceca --- /dev/null +++ b/org.argeo.cms/src/org/argeo/api/cli/DescribedCommand.java @@ -0,0 +1,60 @@ +package org.argeo.api.cli; + +import java.io.StringWriter; +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; + +import org.apache.commons.cli.CommandLine; +import org.apache.commons.cli.DefaultParser; +import org.apache.commons.cli.Options; +import org.apache.commons.cli.ParseException; + +/** A command that can be described. */ +public interface DescribedCommand extends Function, T> { + default Options getOptions() { + return new Options(); + } + + String getDescription(); + + default String getUsage() { + return null; + } + + default String getExamples() { + return null; + } + + default CommandLine toCommandLine(List args) { + try { + DefaultParser parser = new DefaultParser(); + return parser.parse(getOptions(), args.toArray(new String[args.size()])); + } catch (ParseException e) { + throw new CommandArgsException(e); + } + } + + /** In order to implement quickly a main method. */ + public static void mainImpl(DescribedCommand command, String[] args) { + try { + Object output = command.apply(Arrays.asList(args)); + System.out.println(output); + System.exit(0); + } catch (PrintHelpRequestException e) { + StringWriter out = new StringWriter(); + HelpCommand.printHelp(command, out); + System.out.println(out.toString()); + System.exit(1); + } catch (IllegalArgumentException e) { + StringWriter out = new StringWriter(); + HelpCommand.printHelp(command, out); + System.err.println(out.toString()); + System.exit(1); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + +}