add basic setup of the mustache renderer into the CompleteAutoloadTilesContainerFactory


git-svn-id: https://svn.apache.org/repos/asf/tiles/framework/trunk@1332136 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tiles-parent/tiles-extras/pom.xml b/tiles-parent/tiles-extras/pom.xml
index 0b15f87..70afd39 100644
--- a/tiles-parent/tiles-extras/pom.xml
+++ b/tiles-parent/tiles-extras/pom.xml
@@ -72,6 +72,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.tiles</groupId>
+      <artifactId>tiles-request-mustache</artifactId>
+      <version>1.0-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>${pom.groupId}</groupId>
       <artifactId>tiles-jsp</artifactId>
       <version>${project.version}</version>
     </dependency>
diff --git a/tiles-parent/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java b/tiles-parent/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
index 99bbee0..6831ce2 100644
--- a/tiles-parent/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
+++ b/tiles-parent/tiles-extras/src/main/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactory.java
@@ -21,10 +21,12 @@
 
 package org.apache.tiles.extras.complete;
 
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
+import java.util.regex.Pattern;
 
 import javax.el.ArrayELResolver;
 import javax.el.BeanELResolver;
@@ -77,9 +79,11 @@
 import org.apache.tiles.request.freemarker.render.FreemarkerRenderer;
 import org.apache.tiles.request.freemarker.render.FreemarkerRendererBuilder;
 import org.apache.tiles.request.freemarker.servlet.SharedVariableLoaderFreemarkerServlet;
+import org.apache.tiles.request.mustache.MustacheRenderer;
 import org.apache.tiles.request.render.BasicRendererFactory;
 import org.apache.tiles.request.render.ChainedDelegateRenderer;
 import org.apache.tiles.request.render.Renderer;
+import org.apache.tiles.request.servlet.ServletUtil;
 import org.apache.tiles.request.velocity.render.VelocityRenderer;
 import org.apache.tiles.request.velocity.render.VelocityRendererBuilder;
 import org.mvel2.integration.VariableResolverFactory;
@@ -88,7 +92,7 @@
  * Tiles container factory that:
  * <ul>
  * <li>create supporting objects for Velocity and FreeMarker;</li>
- * <li>create renderers for Velocity and FreeMarker templates;</li>
+ * <li>create renderers for Velocity, FreeMarker, and Mustache templates;</li>
  * <li>allows using EL, MVEL and OGNL as attribute expressions;</li>
  * <li>allows using Wildcards and Regular Expressions in definition names;</li>
  * <li>loads Tiles 1.x definition files;</li>
@@ -112,6 +116,11 @@
      */
     private static final String VELOCITY_RENDERER_NAME = "velocity";
 
+    /**
+     * The mustache renderer name.
+     */
+    private static final String MUSTACHE_RENDERER_NAME = "mustache";
+
     /** {@inheritDoc} */
     @Override
     public TilesContainer createDecoratedContainer(TilesContainer originalContainer,
@@ -121,9 +130,11 @@
 
     /** {@inheritDoc} */
     @Override
-    protected void registerAttributeRenderers(BasicRendererFactory rendererFactory,
-            ApplicationContext applicationContext, TilesContainer container,
-            AttributeEvaluatorFactory attributeEvaluatorFactory) {
+    protected void registerAttributeRenderers(
+            final BasicRendererFactory rendererFactory,
+            final ApplicationContext applicationContext,
+            final TilesContainer container,
+            final AttributeEvaluatorFactory attributeEvaluatorFactory) {
         super.registerAttributeRenderers(rendererFactory, applicationContext, container, attributeEvaluatorFactory);
 
         FreemarkerRenderer freemarkerRenderer = FreemarkerRendererBuilder
@@ -142,6 +153,10 @@
         VelocityRenderer velocityRenderer = VelocityRendererBuilder.createInstance()
                 .setApplicationContext(applicationContext).build();
         rendererFactory.registerRenderer(VELOCITY_RENDERER_NAME, velocityRenderer);
+
+        MustacheRenderer mustacheRenderer = new MustacheRenderer();
+        mustacheRenderer.setAcceptPattern(Pattern.compile(".+\\.mustache"));
+        rendererFactory.registerRenderer(MUSTACHE_RENDERER_NAME, mustacheRenderer);
     }
 
     /** {@inheritDoc} */
@@ -149,10 +164,12 @@
     protected Renderer createDefaultAttributeRenderer(BasicRendererFactory rendererFactory,
             ApplicationContext applicationContext, TilesContainer container,
             AttributeEvaluatorFactory attributeEvaluatorFactory) {
+
         ChainedDelegateRenderer retValue = new ChainedDelegateRenderer();
         retValue.addAttributeRenderer(rendererFactory.getRenderer(DEFINITION_RENDERER_NAME));
         retValue.addAttributeRenderer(rendererFactory.getRenderer(VELOCITY_RENDERER_NAME));
         retValue.addAttributeRenderer(rendererFactory.getRenderer(FREEMARKER_RENDERER_NAME));
+        retValue.addAttributeRenderer(rendererFactory.getRenderer(MUSTACHE_RENDERER_NAME));
         retValue.addAttributeRenderer(rendererFactory.getRenderer(TEMPLATE_RENDERER_NAME));
         retValue.addAttributeRenderer(rendererFactory.getRenderer(STRING_RENDERER_NAME));
         return retValue;
diff --git a/tiles-parent/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java b/tiles-parent/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java
index d65cf83..b03a517 100644
--- a/tiles-parent/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java
+++ b/tiles-parent/tiles-extras/src/test/java/org/apache/tiles/extras/complete/CompleteAutoloadTilesContainerFactoryTest.java
@@ -52,6 +52,7 @@
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.ApplicationResource;
 import org.apache.tiles.request.freemarker.render.FreemarkerRenderer;
+import org.apache.tiles.request.mustache.MustacheRenderer;
 import org.apache.tiles.request.render.BasicRendererFactory;
 import org.apache.tiles.request.render.ChainedDelegateRenderer;
 import org.apache.tiles.request.render.DispatchRenderer;
@@ -121,6 +122,7 @@
         rendererFactory.registerRenderer(eq("definition"), isA(DefinitionRenderer.class));
         rendererFactory.registerRenderer(eq("freemarker"), isA(FreemarkerRenderer.class));
         rendererFactory.registerRenderer(eq("velocity"), isA(VelocityRenderer.class));
+        rendererFactory.registerRenderer(eq("mustache"), isA(MustacheRenderer.class));
 
         expect(applicationContext.getContext()).andReturn(servletContext).anyTimes();
         expect(servletContext.getInitParameter(VelocityView.PROPERTIES_KEY)).andReturn(null);
@@ -158,12 +160,14 @@
         Renderer definitionRenderer = createMock(Renderer.class);
         Renderer velocityRenderer = createMock(Renderer.class);
         Renderer freemarkerRenderer = createMock(Renderer.class);
+        Renderer mustacheRenderer = createMock(Renderer.class);
 
         expect(rendererFactory.getRenderer("string")).andReturn(stringRenderer);
         expect(rendererFactory.getRenderer("template")).andReturn(templateRenderer);
         expect(rendererFactory.getRenderer("definition")).andReturn(definitionRenderer);
         expect(rendererFactory.getRenderer("velocity")).andReturn(velocityRenderer);
         expect(rendererFactory.getRenderer("freemarker")).andReturn(freemarkerRenderer);
+        expect(rendererFactory.getRenderer("mustache")).andReturn(mustacheRenderer);
 
         replay(container, attributeEvaluatorFactory, rendererFactory, applicationContext);
         Renderer renderer = factory.createDefaultAttributeRenderer(rendererFactory, applicationContext, container,