From d2eb6d141ca79f9b8509b0aa10473f95ea70e6f1 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 21 May 2011 12:29:12 +0200 Subject: [PATCH] list subcommands on help --- .../src/main/java/sonia/scm/cli/App.java | 10 ++++++++++ .../src/main/java/sonia/scm/cli/I18n.java | 3 +++ .../sonia/scm/cli/cmd/CommandDescriptor.java | 16 +++++++++++++++- .../sonia/scm/cli/cmd/SubCommandHandler.java | 19 +++++++++++++++++++ .../resources/sonia/resources/i18n.properties | 2 ++ 5 files changed, 49 insertions(+), 1 deletion(-) diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/App.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/App.java index 2c23ae0dec..370f99a5f3 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/App.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/App.java @@ -43,7 +43,9 @@ import org.kohsuke.args4j.Option; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.cli.cmd.CommandDescriptor; import sonia.scm.cli.cmd.SubCommand; +import sonia.scm.cli.cmd.SubCommandHandler; import sonia.scm.cli.cmd.SubCommandOptionHandler; import sonia.scm.cli.config.ConfigOptionHandler; import sonia.scm.cli.config.ScmClientConfig; @@ -151,6 +153,14 @@ public class App if ((args.length == 0) || (subcommand == null) || help) { parser.printUsage(output, i18n.getBundle()); + output.println(); + output.println(i18n.getMessage(I18n.SUBCOMMANDS_TITLE)); + + for (CommandDescriptor desc : + SubCommandHandler.getInstance().getDescriptors()) + { + output.append(" ").println(desc.getName()); + } } else { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/I18n.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/I18n.java index ad2d955579..a7ddecbbac 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/I18n.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/I18n.java @@ -59,6 +59,9 @@ public class I18n /** Field description */ public static final String RESOURCE_BUNDLE = "sonia.resources.i18n"; + /** Field description */ + public static final String SUBCOMMANDS_TITLE = "subCommandsTitle"; + /** Field description */ public static final String USER_NOT_FOUND = "userNotFound"; diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CommandDescriptor.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CommandDescriptor.java index c8e71804cc..35e803c366 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CommandDescriptor.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CommandDescriptor.java @@ -45,7 +45,7 @@ import sonia.scm.util.Util; * * @author Sebastian Sdorra */ -public class CommandDescriptor +public class CommandDescriptor implements Comparable { /** the logger for CommandDescriptor */ @@ -97,6 +97,20 @@ public class CommandDescriptor //~--- methods -------------------------------------------------------------- + /** + * Method description + * + * + * @param desc + * + * @return + */ + @Override + public int compareTo(CommandDescriptor desc) + { + return name.compareTo(desc.name); + } + /** * Method description * diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/SubCommandHandler.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/SubCommandHandler.java index a36dc8fd8e..a59c7ffaa4 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/SubCommandHandler.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/SubCommandHandler.java @@ -50,8 +50,11 @@ import java.io.InputStreamReader; import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -121,6 +124,22 @@ public class SubCommandHandler return subCommands.get(name); } + /** + * Method description + * + * + * @return + */ + public List getDescriptors() + { + List descs = + new ArrayList(subCommands.values()); + + Collections.sort(descs); + + return descs; + } + //~--- methods -------------------------------------------------------------- /** diff --git a/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties b/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties index c5c9b86b3a..379ed14ea9 100644 --- a/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties +++ b/scm-clients/scm-cli-client/src/main/resources/sonia/resources/i18n.properties @@ -30,6 +30,8 @@ VAL = value FILE = file +subCommandsTitle = SubCommands + optionConfig = Configuration name optionServerUrl = SCM-Manager URL optionUsername = Username