You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tiles.apache.org by mc...@apache.org on 2013/05/20 17:39:45 UTC

svn commit: r1484502 - in /tiles/request/branches/TREQ_1_0_X: ./ tiles-request-mustache/ tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/ tiles-request-mustache/src/test/java/org/apache/tiles/request/mustache/ tiles-request-portl...

Author: mck
Date: Mon May 20 15:39:44 2013
New Revision: 1484502

URL: http://svn.apache.org/r1484502
Log:
backport commits 1377657, 1377659, and 1484315
 and fix test and spring version number (RC2 -> RELEASE).

Removed:
    tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheScopeMap.java
Modified:
    tiles/request/branches/TREQ_1_0_X/   (props changed)
    tiles/request/branches/TREQ_1_0_X/pom.xml
    tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/pom.xml
    tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheRenderer.java
    tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheScopeExtractor.java
    tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/test/java/org/apache/tiles/request/mustache/MustacheRendererTest.java
    tiles/request/branches/TREQ_1_0_X/tiles-request-portlet-wildcard/   (props changed)
    tiles/request/branches/TREQ_1_0_X/tiles-request-portlet-wildcard/pom.xml
    tiles/request/branches/TREQ_1_0_X/tiles-request-servlet-wildcard/src/test/java/org/apache/tiles/request/servlet/wildcard/WildcardServletApplicationContextTest.java

Propchange: tiles/request/branches/TREQ_1_0_X/
------------------------------------------------------------------------------
  Merged /tiles/request/trunk:r1377658-1377659,1484315

Modified: tiles/request/branches/TREQ_1_0_X/pom.xml
URL: http://svn.apache.org/viewvc/tiles/request/branches/TREQ_1_0_X/pom.xml?rev=1484502&r1=1484501&r2=1484502&view=diff
==============================================================================
--- tiles/request/branches/TREQ_1_0_X/pom.xml (original)
+++ tiles/request/branches/TREQ_1_0_X/pom.xml Mon May 20 15:39:44 2013
@@ -216,7 +216,7 @@ under the License.
             <dependency>
                 <groupId>org.springframework</groupId>
                 <artifactId>spring-web</artifactId>
-                <version>2.5.6</version>
+                <version>3.2.0.RELEASE</version>
                 <exclusions>
                     <exclusion>
                         <groupId>commons-logging</groupId>
@@ -225,21 +225,6 @@ under the License.
                 </exclusions>
             </dependency>
             <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-webmvc-portlet</artifactId>
-                <version>2.5.6</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.springframework</groupId>
-                        <artifactId>spring-webmvc</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
                 <groupId>javax.servlet.jsp</groupId>
                 <artifactId>jsp-api</artifactId>
                 <version>2.1</version>
@@ -299,13 +284,8 @@ under the License.
             </dependency>
             <dependency>
                 <groupId>com.github.spullara.mustache.java</groupId>
-                <artifactId>core</artifactId>
-                <version>0.6.2</version>
-            </dependency>
-            <dependency>
-                <groupId>com.github.spullara.mustache.java</groupId>
-                <artifactId>builder</artifactId>
-                <version>0.6.2</version>
+                <artifactId>compiler</artifactId>
+                <version>0.8.4</version>
             </dependency>
         </dependencies>
     </dependencyManagement>

Modified: tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/pom.xml
URL: http://svn.apache.org/viewvc/tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/pom.xml?rev=1484502&r1=1484501&r2=1484502&view=diff
==============================================================================
--- tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/pom.xml (original)
+++ tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/pom.xml Mon May 20 15:39:44 2013
@@ -38,11 +38,8 @@ under the License.
     </dependency>
     <dependency>
         <groupId>com.github.spullara.mustache.java</groupId>
-        <artifactId>core</artifactId>
-    </dependency>
-    <dependency>
-        <groupId>com.github.spullara.mustache.java</groupId>
-        <artifactId>builder</artifactId>
+        <artifactId>compiler</artifactId>
+        <version>0.8.4</version>
     </dependency>
     <dependency>
     	<groupId>junit</groupId>

Modified: tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheRenderer.java
URL: http://svn.apache.org/viewvc/tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheRenderer.java?rev=1484502&r1=1484501&r2=1484502&view=diff
==============================================================================
--- tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheRenderer.java (original)
+++ tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheRenderer.java Mon May 20 15:39:44 2013
@@ -21,19 +21,16 @@
 
 package org.apache.tiles.request.mustache;
 
-import java.io.BufferedReader;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import com.sampullara.mustache.MustacheBuilder;
-import com.sampullara.mustache.MustacheException;
-import com.sampullara.mustache.Scope;
-import org.apache.tiles.request.ApplicationContext;
-import org.apache.tiles.request.ApplicationResource;
+import com.github.mustachejava.MustacheFactory;
+import com.github.mustachejava.DefaultMustacheFactory;
+import com.github.mustachejava.MustacheException;
 import org.apache.tiles.request.Request;
 import org.apache.tiles.request.render.CannotRenderException;
 import org.apache.tiles.request.render.Renderer;
@@ -41,46 +38,59 @@ import org.apache.tiles.request.render.R
 /**
  * The Mustache-specific renderer.
  *
+ * Can be configured to render paths only according to the acceptPattern.
+ *
  * @version $Rev: 1215006 $ $Date: 2011-12-16 01:30:41 +0100 (Fri, 16 Dec 2011) $
  */
-public final class MustacheRenderer implements Renderer {
+public class MustacheRenderer implements Renderer {
+
+    // hack. exposes the tiles Request for MustacheFactory implementations.
+    private static final ThreadLocal<Request> REQUEST_HOLDER = new ThreadLocal<Request>();
 
+    private final MustacheFactory factory;
     private Pattern acceptPattern;
 
+    /** Uses the {@link DefaultMustacheFactory} */
+    public MustacheRenderer(){
+        this.factory = new DefaultMustacheFactory();
+    }
+
+    public MustacheRenderer(MustacheFactory factory) {
+        this.factory = factory;
+    }
+
     @Override
     public void render(String path, Request request) throws IOException {
         if (path == null) {
             throw new CannotRenderException("Cannot dispatch a null path");
         }
 
-        try{
-            new MustacheBuilder()
-                    .build(new BufferedReader(new InputStreamReader(getResourceStream(request, path))), path)
+        try {
+            REQUEST_HOLDER.set(request);
+            factory
+                    .compile(path)
                     .execute(request.getWriter(), buildScope(request));
+            REQUEST_HOLDER.remove();
 
-        }catch(MustacheException ex){
+        } catch(MustacheException ex) {
             throw new IOException("failed to MustacheRenderer.render(" + path + ",request)", ex);
         }
     }
 
-    private static InputStream getResourceStream(Request request, String path) throws IOException {
-        final ApplicationContext applicationContext = request.getApplicationContext();
-        final ApplicationResource resource = applicationContext.getResource(path);
-        return resource.getInputStream();
+    public static Request getThreadLocalRequest() {
+        return REQUEST_HOLDER.get();
     }
 
-    private static Scope buildScope(Request request){
-        Scope scope = null;
+    protected Map<String,Object> buildScope(Request request) {
+        Map<String,Object> scope = new HashMap<String,Object>();
         List<String> availableScopes = request.getAvailableScopes();
-        for(int i = availableScopes.size() -1; i >= 0; --i){
-            scope = null == scope
-                    ? new Scope(request.getContext(availableScopes.get(i)))
-                    : new Scope(request.getContext(availableScopes.get(i)), scope);
+        for (int i = availableScopes.size() -1; i >= 0; --i) {
+            scope.putAll(request.getContext(availableScopes.get(i)));
         }
         return scope;
     }
 
-    //@Override
+    @Override
     public boolean isRenderable(String path, Request request) {
         if (path == null) {
             return false;
@@ -92,7 +102,7 @@ public final class MustacheRenderer impl
         return true;
     }
 
-    public void setAcceptPattern(Pattern acceptPattern) {
+    public final void setAcceptPattern(Pattern acceptPattern) {
         this.acceptPattern = acceptPattern;
     }
 }

Modified: tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheScopeExtractor.java
URL: http://svn.apache.org/viewvc/tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheScopeExtractor.java?rev=1484502&r1=1484501&r2=1484502&view=diff
==============================================================================
--- tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheScopeExtractor.java (original)
+++ tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/main/java/org/apache/tiles/request/mustache/MustacheScopeExtractor.java Mon May 20 15:39:44 2013
@@ -18,16 +18,16 @@ package org.apache.tiles.request.mustach
 
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.Map;
 import java.util.Set;
 
-import com.sampullara.mustache.Scope;
 import org.apache.tiles.request.attribute.AttributeExtractor;
 
 
 public final class MustacheScopeExtractor  implements AttributeExtractor {
-    private final Scope scope;
+    private final Map<String,Object> scope;
 
-    public MustacheScopeExtractor(Scope scope){
+    public MustacheScopeExtractor(Map<String,Object> scope) {
         this.scope = scope;
     }
 
@@ -48,6 +48,6 @@ public final class MustacheScopeExtracto
 
     @Override
     public void setValue(String key, Object value) {
-        scope.put(value, value);
+        scope.put(key, value);
     }
 }
\ No newline at end of file

Modified: tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/test/java/org/apache/tiles/request/mustache/MustacheRendererTest.java
URL: http://svn.apache.org/viewvc/tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/test/java/org/apache/tiles/request/mustache/MustacheRendererTest.java?rev=1484502&r1=1484501&r2=1484502&view=diff
==============================================================================
--- tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/test/java/org/apache/tiles/request/mustache/MustacheRendererTest.java (original)
+++ tiles/request/branches/TREQ_1_0_X/tiles-request-mustache/src/test/java/org/apache/tiles/request/mustache/MustacheRendererTest.java Mon May 20 15:39:44 2013
@@ -22,21 +22,25 @@ package org.apache.tiles.request.mustach
 
 
 import java.io.IOException;
-import java.io.Writer;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.nio.charset.Charset;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
 import java.util.regex.Pattern;
 
+import com.github.mustachejava.DefaultMustacheFactory;
 import org.apache.tiles.request.ApplicationContext;
 import org.apache.tiles.request.ApplicationResource;
-import org.apache.tiles.request.mustache.MustacheRenderer;
 import org.apache.tiles.request.render.CannotRenderException;
 import org.apache.tiles.request.render.Renderer;
 import org.apache.tiles.request.Request;
 import org.junit.Test;
 
 import static org.easymock.classextension.EasyMock.*;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -54,27 +58,29 @@ public final class MustacheRendererTest 
     @Test
     public void testRender() throws IOException {
         Request request = createMock(Request.class);
-        Writer writer = createMock(Writer.class);
+        StringWriter writer = new StringWriter();
         ApplicationContext applicationContext = createMock(ApplicationContext.class);
         ApplicationResource applicationResource = createMock(ApplicationResource.class);
-        expect(applicationResource.getInputStream()).andReturn(getClass().getResource("/test.html").openStream());
 
         Map<String,Object> context = Collections.singletonMap("testKey", (Object)"test value");
 
-        expect(request.getApplicationContext()).andReturn(applicationContext);
         expect(applicationContext.getResource(isA(String.class))).andReturn(applicationResource).anyTimes();
         expect(request.getAvailableScopes()).andReturn(Arrays.asList(Request.REQUEST_SCOPE, "session", Request.APPLICATION_SCOPE));
         expect(request.getContext(Request.REQUEST_SCOPE)).andReturn(context);
         expect(request.getContext("session")).andReturn(Collections.<String,Object>emptyMap());
         expect(request.getContext(Request.APPLICATION_SCOPE)).andReturn(Collections.<String,Object>emptyMap());
-        expect(request.getWriter()).andReturn(writer);
-        writer.write("test template with test value");
-        writer.flush();
+        expect(request.getWriter()).andReturn(writer).anyTimes();
 
-        replay(request, applicationContext, applicationResource, writer);
-        Renderer renderer = new MustacheRenderer();
+        replay(request, applicationContext, applicationResource);
+        Renderer renderer = new MustacheRenderer(new DefaultMustacheFactory() {
+                @Override
+                public Reader getReader(String path) {
+                    return new InputStreamReader(getClass().getResourceAsStream(path), Charset.forName("utf-8"));
+                }
+            });
         renderer.render("/test.html", request);
-        verify(request, applicationContext, applicationResource, writer);
+        verify(request, applicationContext, applicationResource);
+        assertEquals("test template with test value", writer.toString());
     }
 
     /**

Propchange: tiles/request/branches/TREQ_1_0_X/tiles-request-portlet-wildcard/
------------------------------------------------------------------------------
  Merged /tiles/request/trunk/tiles-request-portlet-wildcard:r1484315

Modified: tiles/request/branches/TREQ_1_0_X/tiles-request-portlet-wildcard/pom.xml
URL: http://svn.apache.org/viewvc/tiles/request/branches/TREQ_1_0_X/tiles-request-portlet-wildcard/pom.xml?rev=1484502&r1=1484501&r2=1484502&view=diff
==============================================================================
--- tiles/request/branches/TREQ_1_0_X/tiles-request-portlet-wildcard/pom.xml (original)
+++ tiles/request/branches/TREQ_1_0_X/tiles-request-portlet-wildcard/pom.xml Mon May 20 15:39:44 2013
@@ -97,8 +97,19 @@
     </dependency>
 
     <dependency>
-      <groupId>org.springframework</groupId>
-      <artifactId>spring-webmvc-portlet</artifactId>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-webmvc-portlet</artifactId>
+        <version>3.2.0.RC2</version>
+        <exclusions>
+            <exclusion>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-webmvc</artifactId>
+            </exclusion>
+            <exclusion>
+                <groupId>commons-logging</groupId>
+                <artifactId>commons-logging</artifactId>
+            </exclusion>
+        </exclusions>
     </dependency>
 
     <dependency>

Modified: tiles/request/branches/TREQ_1_0_X/tiles-request-servlet-wildcard/src/test/java/org/apache/tiles/request/servlet/wildcard/WildcardServletApplicationContextTest.java
URL: http://svn.apache.org/viewvc/tiles/request/branches/TREQ_1_0_X/tiles-request-servlet-wildcard/src/test/java/org/apache/tiles/request/servlet/wildcard/WildcardServletApplicationContextTest.java?rev=1484502&r1=1484501&r2=1484502&view=diff
==============================================================================
--- tiles/request/branches/TREQ_1_0_X/tiles-request-servlet-wildcard/src/test/java/org/apache/tiles/request/servlet/wildcard/WildcardServletApplicationContextTest.java (original)
+++ tiles/request/branches/TREQ_1_0_X/tiles-request-servlet-wildcard/src/test/java/org/apache/tiles/request/servlet/wildcard/WildcardServletApplicationContextTest.java Mon May 20 15:39:44 2013
@@ -97,13 +97,13 @@ public class WildcardServletApplicationC
                 .anyTimes();
         File dir = new File(".");
         EasyMock.expect(servletContext.getResource("/WEB-INF/")).andReturn(
-                dir.toURI().toURL());
+                dir.toURI().toURL()).anyTimes();
         URL pomUrl = new URL("file://tiles/pom.xml");
         EasyMock.expect(servletContext.getResource("/WEB-INF/pom.xml"))
-                .andReturn(pomUrl);
+                .andReturn(pomUrl).anyTimes();
         Set<String> elementSet = new HashSet<String>();
         elementSet.add("/WEB-INF/pom.xml");
-        EasyMock.expect(servletContext.getResourcePaths("/WEB-INF/")).andReturn(elementSet);
+        EasyMock.expect(servletContext.getResourcePaths("/WEB-INF/")).andReturn(elementSet).anyTimes();
         EasyMock.replay(servletContext);
 
         assertEquals(new URLApplicationResource(u.toExternalForm(), u), context.getResource(url));