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 370f99a5f3..e5731c513d 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 @@ -152,15 +152,7 @@ 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()); - } + printHelp(parser, i18n); } else { @@ -199,6 +191,37 @@ public class App } } + /** + * Method description + * + * + * @param parser + * @param i18n + */ + private void printHelp(CmdLineParser parser, I18n i18n) + { + parser.printUsage(output, i18n.getBundle()); + output.println(); + output.println(i18n.getMessage(I18n.SUBCOMMANDS_TITLE)); + output.println(); + + String group = null; + + for (CommandDescriptor desc : + SubCommandHandler.getInstance().getDescriptors()) + { + if ((group == null) ||!group.equals(desc.getGroup())) + { + output.println(); + group = desc.getGroup(); + output.append(i18n.getMessage(group)).println(":"); + output.println(); + } + + output.append(" ").println(desc.getName()); + } + } + //~--- fields --------------------------------------------------------------- /** Field description */ diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/AddMembersSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/AddMembersSubCommand.java index 0a6389004c..f97b2d2a84 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/AddMembersSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/AddMembersSubCommand.java @@ -45,7 +45,7 @@ import java.util.List; * * @author Sebastian Sdorra */ -@Command("add-members") +@Command(name = "add-members", group = "group") public class AddMembersSubCommand extends MembersSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/AddPermissionSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/AddPermissionSubCommand.java index 791ed735ab..e1b481d7c5 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/AddPermissionSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/AddPermissionSubCommand.java @@ -48,7 +48,7 @@ import java.util.List; * * @author Sebastian Sdorra */ -@Command("add-permission") +@Command(name="add-permission", group="repository") public class AddPermissionSubCommand extends PermissionSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/Command.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/Command.java index 033e61b192..227356d47d 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/Command.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/Command.java @@ -47,6 +47,7 @@ import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Command { - String value() default ""; + String name() default ""; String usage() default ""; + String group() default "misc"; } 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 35e803c366..a3f4559a76 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 @@ -69,7 +69,8 @@ public class CommandDescriptor implements Comparable if (cmd != null) { - this.name = cmd.value(); + this.name = cmd.name(); + this.group = cmd.group(); this.usage = cmd.usage(); } @@ -108,7 +109,14 @@ public class CommandDescriptor implements Comparable @Override public int compareTo(CommandDescriptor desc) { - return name.compareTo(desc.name); + int result = group.compareTo(desc.group); + + if (result == 0) + { + result = name.compareTo(desc.name); + } + + return result; } /** @@ -147,6 +155,17 @@ public class CommandDescriptor implements Comparable return commandClass; } + /** + * Method description + * + * + * @return + */ + public String getGroup() + { + return group; + } + /** * Method description * @@ -174,6 +193,9 @@ public class CommandDescriptor implements Comparable /** Field description */ private Class commandClass; + /** Field description */ + private String group = "misc"; + /** Field description */ private String name; diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateGroupSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateGroupSubCommand.java index 419f8f2228..6cdff00cd2 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateGroupSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateGroupSubCommand.java @@ -50,7 +50,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("create-group") +@Command(name="create-group", group="group") public class CreateGroupSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateRepositorySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateRepositorySubCommand.java index 8c4fef81f6..8a97b0cfdc 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateRepositorySubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateRepositorySubCommand.java @@ -49,7 +49,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("create-repository") +@Command(name="create-repository",group="repository") public class CreateRepositorySubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateUserSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateUserSubCommand.java index 811c767796..bf01ee556f 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateUserSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/CreateUserSubCommand.java @@ -49,7 +49,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("create-user") +@Command(name="create-user", group="user") public class CreateUserSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteConfigSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteConfigSubCommand.java index e89a1aef86..48da75f87c 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteConfigSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteConfigSubCommand.java @@ -41,7 +41,7 @@ import sonia.scm.cli.config.ScmClientConfig; * * @author Sebastian Sdorra */ -@Command("delete-config") +@Command(name="delete-config", group="config") public class DeleteConfigSubCommand extends SubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteGroupSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteGroupSubCommand.java index bc582756ba..9cc7bc8e9c 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteGroupSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteGroupSubCommand.java @@ -43,7 +43,7 @@ import sonia.scm.client.ScmClientSession; * * @author Sebastian Sdorra */ -@Command("delete-group") +@Command(name="delete-group",group="group") public class DeleteGroupSubCommand extends SubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteMembersSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteMembersSubCommand.java index d759e58ea3..4b717bc4da 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteMembersSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteMembersSubCommand.java @@ -45,7 +45,7 @@ import java.util.List; * * @author Sebastian Sdorra */ -@Command("delete-members") +@Command(name="delete-members",group="group") public class DeleteMembersSubCommand extends MembersSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeletePermissionSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeletePermissionSubCommand.java index 7dc7027330..f4559032af 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeletePermissionSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeletePermissionSubCommand.java @@ -48,7 +48,7 @@ import java.util.List; * * @author Sebastian Sdorra */ -@Command("delete-permission") +@Command(name="delete-permission",group="repository") public class DeletePermissionSubCommand extends PermissionSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteRepositorySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteRepositorySubCommand.java index 6999d48694..4706666369 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteRepositorySubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteRepositorySubCommand.java @@ -43,7 +43,7 @@ import sonia.scm.client.ScmClientSession; * * @author Sebastian Sdorra */ -@Command("delete-repository") +@Command(name="delete-repository",group="repository") public class DeleteRepositorySubCommand extends SubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteUserSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteUserSubCommand.java index a5ec95a32c..a450902508 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteUserSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/DeleteUserSubCommand.java @@ -43,7 +43,7 @@ import sonia.scm.client.ScmClientSession; * * @author Sebastian Sdorra */ -@Command("delete-user") +@Command(name="delete-user",group="user") public class DeleteUserSubCommand extends SubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetGroupSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetGroupSubCommand.java index 80c5cce761..0877249a29 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetGroupSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetGroupSubCommand.java @@ -50,7 +50,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("get-group") +@Command(name="get-group",group="group") public class GetGroupSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetRepositorySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetRepositorySubCommand.java index 041c5c8f96..c39b9262ef 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetRepositorySubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetRepositorySubCommand.java @@ -50,7 +50,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("get-repository") +@Command(name="get-repository",group="repository") public class GetRepositorySubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetUserSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetUserSubCommand.java index 9473eafacd..377aca86b1 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetUserSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/GetUserSubCommand.java @@ -50,7 +50,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("get-user") +@Command(name="get-user",group="user") public class GetUserSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListGroupsSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListGroupsSubCommand.java index b6e18e8e24..350f5d0a12 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListGroupsSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListGroupsSubCommand.java @@ -48,7 +48,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("list-groups") +@Command(name="list-groups",group="group") public class ListGroupsSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListRepositoriesSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListRepositoriesSubCommand.java index 51e91cf592..92399eff9e 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListRepositoriesSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListRepositoriesSubCommand.java @@ -48,7 +48,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("list-repositories") +@Command(name="list-repositories",group="repository") public class ListRepositoriesSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListUsersSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListUsersSubCommand.java index 5262c75624..934ce4f8bc 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListUsersSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ListUsersSubCommand.java @@ -48,7 +48,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("list-users") +@Command(name="list-users",group="user") public class ListUsersSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyGroupSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyGroupSubCommand.java index 32c30b4dd9..e43e1ff9c6 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyGroupSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyGroupSubCommand.java @@ -53,7 +53,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("modify-group") +@Command(name="modify-group",group="group") public class ModifyGroupSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyRepositorySubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyRepositorySubCommand.java index 75af2e8bdf..2bd9c81c32 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyRepositorySubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyRepositorySubCommand.java @@ -53,7 +53,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("modify-repository") +@Command(name="modify-repository",group="repository") public class ModifyRepositorySubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyUserSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyUserSubCommand.java index f4753e2f17..59268e0f8d 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyUserSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/ModifyUserSubCommand.java @@ -53,7 +53,7 @@ import java.util.Map; * * @author Sebastian Sdorra */ -@Command("modify-user") +@Command(name="modify-user",group="user") public class ModifyUserSubCommand extends TemplateSubCommand { diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/StoreConfigSubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/StoreConfigSubCommand.java index 83d17b9eb9..649bbfdd12 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/StoreConfigSubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/cmd/StoreConfigSubCommand.java @@ -41,7 +41,7 @@ import sonia.scm.cli.config.ScmClientConfig; * * @author Sebastian Sdorra */ -@Command("store-config") +@Command(name = "store-config", group = "config") public class StoreConfigSubCommand extends SubCommand { diff --git a/scm-clients/scm-cli-client/src/main/resources/logback.xml b/scm-clients/scm-cli-client/src/main/resources/logback.xml index 0f7aafa125..3af702a1e5 100644 --- a/scm-clients/scm-cli-client/src/main/resources/logback.xml +++ b/scm-clients/scm-cli-client/src/main/resources/logback.xml @@ -18,7 +18,7 @@ - + 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 3844645758..c37aa3d6d4 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 @@ -31,7 +31,7 @@ VAL = value FILE = file error = Error -subCommandsTitle = SubCommands +subCommandsTitle = list of commands optionConfig = Configuration name optionServerUrl = SCM-Manager URL @@ -70,3 +70,9 @@ groupNotFoun = The group could not be found metaVar_config = configname metaVar_arg = subcommand arguments metaVar_command = subcommand + +config = Configuration +misc = Miscellaneous +repository = Repository +group = Group +user = User \ No newline at end of file