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 ab66ffb802..d18d5739e9 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 @@ -139,9 +139,11 @@ public class App System.exit(1); } + I18n i18n = new I18n(); + if ((args.length == 0) || (subcommand == null) || help) { - parser.printUsage(output, I18n.getBundle()); + parser.printUsage(output, i18n.getBundle()); } else { @@ -152,7 +154,7 @@ public class App session = createSession(); } - subcommand.init(input, output, session); + subcommand.init(input, output, i18n, session); subcommand.run(arguments); } } diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/Command.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/Command.java index ccb0bc380d..c5b565f000 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/Command.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/Command.java @@ -47,7 +47,7 @@ import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface Command { - String value() default ""; - String usage() default ""; + String value() default ""; + String usage() default ""; boolean sessionRequired() default true; } 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 07c5d8167c..a2c14fb509 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 @@ -1,10 +1,10 @@ /** * Copyright (c) 2010, Sebastian Sdorra * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, @@ -13,7 +13,7 @@ * 3. Neither the name of SCM-Manager; nor the names of its * contributors may be used to endorse or promote products derived from this * software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -24,12 +24,23 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * http://bitbucket.org/sdorra/scm-manager - * + * */ + + + package sonia.scm.cli; +//~--- non-JDK imports -------------------------------------------------------- + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +//~--- JDK imports ------------------------------------------------------------ + +import java.util.MissingResourceException; import java.util.ResourceBundle; /** @@ -38,9 +49,63 @@ import java.util.ResourceBundle; */ public class I18n { - - public static ResourceBundle getBundle(){ - return null; - }; - + + /** Field description */ + public static final String RESOURCE_BUNDLE = "sonia.resources.i18n"; + + /** the logger for I18n */ + private static final Logger logger = LoggerFactory.getLogger(I18n.class); + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public I18n() + { + bundle = ResourceBundle.getBundle(RESOURCE_BUNDLE); + } + + //~--- get methods ---------------------------------------------------------- + + /** + * Method description + * + * + * @return + */ + public ResourceBundle getBundle() + { + return bundle; + } + + /** + * Method description + * + * + * @param key + * + * @return + */ + public String getMessage(String key) + { + String value = key; + + try + { + key = bundle.getString(key); + } + catch (MissingResourceException ex) + { + logger.warn("could not find resource for key {}", key); + } + + return value; + } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private ResourceBundle bundle; } diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/SubCommand.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/SubCommand.java index 1cfd5aa463..48d2628612 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/SubCommand.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/SubCommand.java @@ -76,13 +76,15 @@ public abstract class SubCommand * * @param input * @param output + * @param i18n * @param session */ - public void init(BufferedReader input, PrintWriter output, + public void init(BufferedReader input, PrintWriter output, I18n i18n, ScmClientSession session) { this.input = input; this.output = output; + this.i18n = i18n; this.session = session; } @@ -102,7 +104,7 @@ public abstract class SubCommand if (help) { - parser.printUsage(output, I18n.getBundle()); + parser.printUsage(output, i18n.getBundle()); System.exit(1); } else @@ -168,6 +170,9 @@ public abstract class SubCommand //~--- fields --------------------------------------------------------------- + /** Field description */ + protected I18n i18n; + /** Field description */ protected BufferedReader input; diff --git a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/SubCommandHandler.java b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/SubCommandHandler.java index 65fd787b76..425f172486 100644 --- a/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/SubCommandHandler.java +++ b/scm-clients/scm-cli-client/src/main/java/sonia/scm/cli/SubCommandHandler.java @@ -95,7 +95,8 @@ public class SubCommandHandler extends OptionHandler * Method description * * - * @param prmtrs + * + * @param parameters * * @return * @@ -106,15 +107,19 @@ public class SubCommandHandler extends OptionHandler { String name = parameters.getParameter(0); CommandDescriptor desc = subCommands.get(name); - if ( desc != null ) + + if (desc != null) { + // owner.stopOptionParsing(); - setter.addValue( desc.createSubCommand() ); - } - else - { - throw new CmdLineException(owner, "command ".concat(name).concat(" not found")); + setter.addValue(desc.createSubCommand()); } + else + { + throw new CmdLineException(owner, + "command ".concat(name).concat(" not found")); + } + return 1; }