diff --git a/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java b/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java index 2985539cd7..58ec01b5a5 100644 --- a/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java +++ b/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java @@ -37,6 +37,7 @@ package sonia.scm.template; import com.github.mustachejava.Mustache; +import com.google.common.util.concurrent.UncheckedExecutionException; import com.google.inject.Inject; import org.slf4j.Logger; @@ -104,20 +105,47 @@ public class MustacheTemplateEngine implements TemplateEngine } Template template = null; - Mustache mustache = factory.compile(templatePath); - if (mustache != null) + try { - if (logger.isTraceEnabled()) + + Mustache mustache = factory.compile(templatePath); + + if (mustache != null) { - logger.trace("return mustache template for {}", templatePath); + if (logger.isTraceEnabled()) + { + logger.trace("return mustache template for {}", templatePath); + } + + template = new MustacheTemplate(templatePath, mustache); + } + else if (logger.isWarnEnabled()) + { + logger.warn("could not find mustache template at {}", templatePath); } - template = new MustacheTemplate(templatePath, mustache); } - else if (logger.isWarnEnabled()) + catch (MustacheTemplateNotFoundException ex) { - logger.warn("could not find mustache template at {}", templatePath); + if (logger.isWarnEnabled()) + { + logger.warn("could not find mustache template at {}", templatePath); + } + } + catch (UncheckedExecutionException ex) + { + if (ex.getCause() instanceof MustacheTemplateNotFoundException) + { + if (logger.isWarnEnabled()) + { + logger.warn("could not find mustache template at {}", templatePath); + } + else + { + throw ex; + } + } } return template; diff --git a/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateNotFoundException.java b/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateNotFoundException.java new file mode 100644 index 0000000000..0f9038d73b --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateNotFoundException.java @@ -0,0 +1,85 @@ +/** + * 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 + * + */ + + + +package sonia.scm.template; + +/** + * + * @author Sebastian Sdorra + */ +public final class MustacheTemplateNotFoundException extends RuntimeException +{ + + /** Field description */ + private static final long serialVersionUID = -1998700779900576217L; + + //~--- constructors --------------------------------------------------------- + + /** + * Constructs ... + * + */ + public MustacheTemplateNotFoundException() {} + + /** + * Constructs ... + * + * + * @param message + */ + public MustacheTemplateNotFoundException(String message) + { + super(message); + } + + /** + * Constructs ... + * + * + * @param cause + */ + public MustacheTemplateNotFoundException(Throwable cause) + { + super(cause); + } + + /** + * Constructs ... + * + * + * @param message + * @param cause + */ + public MustacheTemplateNotFoundException(String message, Throwable cause) + { + super(message, cause); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/template/ServletMustacheFactory.java b/scm-webapp/src/main/java/sonia/scm/template/ServletMustacheFactory.java index 80ff1812a4..6c7c2e8c9f 100644 --- a/scm-webapp/src/main/java/sonia/scm/template/ServletMustacheFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/template/ServletMustacheFactory.java @@ -30,6 +30,7 @@ */ + package sonia.scm.template; //~--- non-JDK imports -------------------------------------------------------- @@ -129,6 +130,12 @@ public class ServletMustacheFactory extends DefaultMustacheFactory logger.warn("could not find resource {}", resourceName); } + if (reader == null) + { + throw new MustacheTemplateNotFoundException( + "could not find template for resource ".concat(resourceName)); + } + return reader; }