diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIExceptionHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIExceptionHandler.java index 4ce938d26e..5c67d147e9 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIExceptionHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIExceptionHandler.java @@ -38,6 +38,7 @@ import com.google.common.base.Charsets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.i18n.Bundle; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; import sonia.scm.web.cgi.CGIExceptionHandler; @@ -49,8 +50,6 @@ import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; -import java.text.MessageFormat; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -62,20 +61,20 @@ public class HgCGIExceptionHandler implements CGIExceptionHandler, CGIStatusCodeHandler { + /** Field description */ + public static final String BUNDLE_PATH = "sonia.scm.web.cgimessages"; + /** Field description */ public static final String CONTENT_TYPE_ERROR = "application/hg-error"; /** TODO create a bundle for error messages */ - public static final String ERROR_NOT_CONFIGURED = - "The mercurial installation on the scm-manager server seems to be not configured correctly. Please check the settings."; + public static final String ERROR_NOT_CONFIGURED = "error.notConfigured"; /** Field description */ - public static final String ERROR_STATUSCODE = - "Mercurial process ends with return code {0}"; + public static final String ERROR_STATUSCODE = "error.statusCode"; /** Field description */ - public static final String ERROR_UNKNOWN = - "There is an unknown error occurred: '{0}'"; + public static final String ERROR_UNEXPECTED = "error.unexpected"; /** * the logger for HgCGIExceptionHandler @@ -83,6 +82,17 @@ public class HgCGIExceptionHandler private static final Logger logger = LoggerFactory.getLogger(HgCGIExceptionHandler.class); + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public HgCGIExceptionHandler() + { + this.bundle = Bundle.getBundle(BUNDLE_PATH); + } + //~--- methods -------------------------------------------------------------- /** @@ -102,7 +112,8 @@ public class HgCGIExceptionHandler logger.error("not able to handle mercurial request", ex); } - sendError(response, createErrorMessage(ex)); + sendError(response, + bundle.getString(ERROR_UNEXPECTED, Util.nonNull(ex.getMessage()))); } /** @@ -126,7 +137,7 @@ public class HgCGIExceptionHandler { response.setContentType(CONTENT_TYPE_ERROR); - String msg = MessageFormat.format(ERROR_STATUSCODE, statusCode); + String msg = bundle.getLine(ERROR_STATUSCODE, statusCode); if (logger.isWarnEnabled()) { @@ -197,12 +208,16 @@ public class HgCGIExceptionHandler * Method description * * - * @param ex - * - * @return + * @param response + * @param key */ - private String createErrorMessage(Throwable ex) + public void sendFormattedError(HttpServletResponse response, String key) { - return MessageFormat.format(ERROR_UNKNOWN, Util.nonNull(ex.getMessage())); + sendError(response, bundle.getString(key)); } + + //~--- fields --------------------------------------------------------------- + + /** Field description */ + private Bundle bundle; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java index a364278f49..ac6884dfaa 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java @@ -180,8 +180,8 @@ public class HgCGIServlet extends HttpServlet } else if (!handler.isConfigured()) { - exceptionHandler.sendError(response, - HgCGIExceptionHandler.ERROR_NOT_CONFIGURED); + exceptionHandler.sendFormattedError(response, + HgCGIExceptionHandler.ERROR_NOT_CONFIGURED); } else { diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/web/cgimessages.properties b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/web/cgimessages.properties new file mode 100644 index 0000000000..6fac1956dd --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/web/cgimessages.properties @@ -0,0 +1,32 @@ +# 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, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# 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 +# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# 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 +# + +error.notConfigured = The mercurial installation on the scm-manager server seems to be not configured correctly. Please check the settings. +error.statusCode = Mercurial/Python process ends with return code {0} +error.unexpected = There is an unexpected error occurred: {0} \ No newline at end of file