diff --git a/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java b/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java index efec16c380..fc1c4d8af6 100644 --- a/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/template/ErrorServlet.java @@ -30,6 +30,7 @@ */ + package sonia.scm.template; //~--- non-JDK imports -------------------------------------------------------- @@ -38,6 +39,9 @@ import com.google.common.base.Throwables; import com.google.inject.Inject; import com.google.inject.Singleton; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import sonia.scm.SCMContextProvider; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; @@ -63,9 +67,18 @@ import javax.servlet.http.HttpServletResponse; public class ErrorServlet extends HttpServlet { + /** Field description */ + private static final String TEMPALTE = "/error.html"; + /** Field description */ private static final long serialVersionUID = -3289076078469757874L; + /** + * the logger for ErrorServlet + */ + private static final Logger logger = + LoggerFactory.getLogger(ErrorServlet.class); + //~--- constructors --------------------------------------------------------- /** @@ -74,12 +87,14 @@ public class ErrorServlet extends HttpServlet * * @param context * @param handler + * @param templateEngineFactory */ @Inject - public ErrorServlet(SCMContextProvider context, TemplateHandler handler) + public ErrorServlet(SCMContextProvider context, + TemplateEngineFactory templateEngineFactory) { this.context = context; - this.handler = handler; + this.templateEngineFactory = templateEngineFactory; } //~--- methods -------------------------------------------------------------- @@ -96,7 +111,7 @@ public class ErrorServlet extends HttpServlet */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException + throws ServletException, IOException { processRequest(request, response); } @@ -113,8 +128,8 @@ public class ErrorServlet extends HttpServlet */ @Override protected void doPost(HttpServletRequest request, - HttpServletResponse response) - throws ServletException, IOException + HttpServletResponse response) + throws ServletException, IOException { processRequest(request, response); } @@ -130,8 +145,8 @@ public class ErrorServlet extends HttpServlet * @throws ServletException */ private void processRequest(HttpServletRequest request, - HttpServletResponse response) - throws ServletException, IOException + HttpServletResponse response) + throws ServletException, IOException { PrintWriter writer = null; @@ -148,7 +163,18 @@ public class ErrorServlet extends HttpServlet } env.put("error", error); - handler.render("/error.html", writer, env); + + TemplateEngine engine = templateEngineFactory.getDefaultEngine(); + Template template = engine.getTemplate(TEMPALTE); + + if (template != null) + { + template.execute(writer, env); + } + else if (logger.isWarnEnabled()) + { + logger.warn("could not find template {}", TEMPALTE); + } } finally { @@ -162,5 +188,5 @@ public class ErrorServlet extends HttpServlet private SCMContextProvider context; /** Field description */ - private TemplateHandler handler; + private TemplateEngineFactory templateEngineFactory; } diff --git a/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java b/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java index 2062bbdee8..278d2cd3b5 100644 --- a/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java @@ -35,10 +35,17 @@ package sonia.scm.template; //~--- non-JDK imports -------------------------------------------------------- +import com.google.common.base.Function; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; import com.google.inject.Inject; import com.google.inject.Singleton; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import sonia.scm.SCMContextProvider; +import sonia.scm.resources.Resource; import sonia.scm.resources.ResourceManager; import sonia.scm.resources.ResourceType; import sonia.scm.util.IOUtil; @@ -49,8 +56,10 @@ import java.io.IOException; import java.io.Writer; import java.util.HashMap; +import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -74,6 +83,16 @@ public class TemplateServlet extends HttpServlet /** Field description */ private static final long serialVersionUID = 3578555653924091546L; + /** + * the logger for TemplateServlet + */ + private static final Logger logger = + LoggerFactory.getLogger(TemplateServlet.class); + + /** Field description */ + private static final Set DEFAULT_LOCALE = + ImmutableSet.of(Locale.ENGLISH, Locale.UK, Locale.US); + //~--- constructors --------------------------------------------------------- /** @@ -83,14 +102,15 @@ public class TemplateServlet extends HttpServlet * * @param context * @param templateHandler + * @param templateEngineFactory * @param resourceManager */ @Inject public TemplateServlet(SCMContextProvider context, - TemplateHandler templateHandler, - ResourceManager resourceManager) + TemplateEngineFactory templateEngineFactory, + ResourceManager resourceManager) { - this.templateHandler = templateHandler; + this.templateEngineFactory = templateEngineFactory; this.resourceManager = resourceManager; this.version = context.getVersion(); } @@ -109,21 +129,44 @@ public class TemplateServlet extends HttpServlet */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException + throws ServletException, IOException { Map params = new HashMap(); String contextPath = request.getContextPath(); params.put("contextPath", contextPath); params.put("version", version); - params.put("scripts", resourceManager.getResources(ResourceType.SCRIPT)); + + List scrips = + Lists.transform(resourceManager.getResources(ResourceType.SCRIPT), + new Function() + { + + @Override + public String apply(Resource f) + { + return f.getName(); + } + + }); + + params.put("scripts", scrips); Locale l = request.getLocale(); if (l == null) { + if (logger.isTraceEnabled()) + { + logger.trace("could not find locale in request, use englich"); + } + l = Locale.ENGLISH; } + else if (logger.isTraceEnabled()) + { + logger.trace("found locale {} in request", l); + } String locale = l.toString(); @@ -139,6 +182,11 @@ public class TemplateServlet extends HttpServlet params.put("country", country); + if (!DEFAULT_LOCALE.contains(l)) + { + params.put("nonDefaultLocale", Boolean.TRUE); + } + String templateName = getTemplateName(contextPath, request.getRequestURI()); Writer writer = null; @@ -147,7 +195,23 @@ public class TemplateServlet extends HttpServlet response.setCharacterEncoding(ENCODING); response.setContentType(CONTENT_TYPE); writer = response.getWriter(); - templateHandler.render(templateName, writer, params); + + TemplateEngine engine = templateEngineFactory.getDefaultEngine(); + Template template = engine.getTemplate(templateName); + + if (template != null) + { + template.execute(writer, params); + } + else + { + if (logger.isWarnEnabled()) + { + logger.warn("could not find template {}", templateName); + } + + response.setStatus(HttpServletResponse.SC_NOT_FOUND); + } } finally { @@ -172,7 +236,7 @@ public class TemplateServlet extends HttpServlet if (path.endsWith("/")) { - path = path.concat("index.html"); + path = path.concat("index.mustache"); } return path; @@ -184,7 +248,7 @@ public class TemplateServlet extends HttpServlet private ResourceManager resourceManager; /** Field description */ - private TemplateHandler templateHandler; + private TemplateEngineFactory templateEngineFactory; /** Field description */ private String version; diff --git a/scm-webapp/src/main/webapp/error.html b/scm-webapp/src/main/webapp/error.mustache similarity index 99% rename from scm-webapp/src/main/webapp/error.html rename to scm-webapp/src/main/webapp/error.mustache index 1c34a848e3..7a726a2664 100644 --- a/scm-webapp/src/main/webapp/error.html +++ b/scm-webapp/src/main/webapp/error.mustache @@ -95,7 +95,7 @@

-      ${error}
+      {{error}}
     
diff --git a/scm-webapp/src/main/webapp/index.html b/scm-webapp/src/main/webapp/index.mustache similarity index 96% rename from scm-webapp/src/main/webapp/index.html rename to scm-webapp/src/main/webapp/index.mustache index 05483ea295..e8f4839437 100644 --- a/scm-webapp/src/main/webapp/index.html +++ b/scm-webapp/src/main/webapp/index.mustache @@ -45,8 +45,8 @@ @@ -158,14 +158,14 @@ - <#list scripts as script> - - + {{#scripts}} + + {{/scripts}} - <#if country != 'en'> - - - + {{#nonDefaultLocale}} + + + {{/nonDefaultLocale}} SCM Manager @@ -200,7 +200,7 @@ © SCM Manager
- ${version} + {{version}}