You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2006/07/22 18:38:28 UTC

svn commit: r424599 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/asset/ java/org/apache/tapestry/engine/encoders/ test/org/apache/tapestry/asset/ test/org/apache/tapestry/engine/encoders/

Author: jkuhnert
Date: Sat Jul 22 09:38:28 2006
New Revision: 424599

URL: http://svn.apache.org/viewvc?rev=424599&view=rev
Log:
Updated asset service/encoders to handle "static" unprotected resource paths.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java?rev=424599&r1=424598&r2=424599&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/asset/AssetService.java Sat Jul 22 09:38:28 2006
@@ -168,14 +168,19 @@
         Defense.isAssignable(parameter, String.class, "parameter");
 
         String path = (String) parameter;
-
-        String digest = _digestSource.getDigestForResource(path);
-
+        
+        String digest = null;
+        
+        if(!_unprotectedMatcher.containsResource(path))
+            digest = _digestSource.getDigestForResource(path);
+        
         Map parameters = new TreeMap(new AssetComparator());
         
         parameters.put(ServiceConstants.SERVICE, getName());
         parameters.put(PATH, path);
-        parameters.put(DIGEST, digest);
+        
+        if (digest != null)
+            parameters.put(DIGEST, digest);
         
         // Service is stateless, which is the exception to the rule.
         

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java?rev=424599&r1=424598&r2=424599&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/engine/encoders/AssetEncoder.java Sat Jul 22 09:38:28 2006
@@ -29,6 +29,8 @@
  */
 public class AssetEncoder implements ServiceEncoder
 {
+    public static final String DIGEST_STATIC = "static";
+    
     private String _path;
 
     public void setPath(String path)
@@ -45,9 +47,9 @@
         String digest = encoding.getParameterValue(AssetService.DIGEST);
 
         // _path ends with a slash, path starts with one.
-
-        String fullPath = _path + "/" + digest + path;
-
+        
+        String fullPath = _path + ((digest != null) ? "/" + digest : "/" + DIGEST_STATIC) + path;
+        
         encoding.setServletPath(fullPath);
         encoding.setParameterValue(AssetService.PATH, null);
         encoding.setParameterValue(AssetService.DIGEST, null);
@@ -58,16 +60,16 @@
     {
         if (!encoding.getServletPath().equals(_path))
             return;
-
+        
         String pathInfo = encoding.getPathInfo();
-
+        
         // The lead character is a slash, so find the next slash (the divider between the
         // digest and the path).
         int slashx = pathInfo.indexOf('/', 1);
-
+        
         encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
         encoding.setParameterValue(AssetService.DIGEST, pathInfo.substring(1, slashx));
         encoding.setParameterValue(AssetService.PATH, pathInfo.substring(slashx));
     }
-
+    
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java?rev=424599&r1=424598&r2=424599&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java Sat Jul 22 09:38:28 2006
@@ -14,6 +14,7 @@
 
 package org.apache.tapestry.asset;
 
+import static org.easymock.EasyMock.*;
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertFalse;
 import static org.testng.AssertJUnit.assertNull;
@@ -32,6 +33,8 @@
 import org.apache.oro.text.regex.Perl5Compiler;
 import org.apache.oro.text.regex.Perl5Matcher;
 import org.apache.tapestry.BaseComponentTestCase;
+import org.apache.tapestry.engine.ILink;
+import org.apache.tapestry.services.LinkFactory;
 import org.apache.tapestry.services.ServiceConstants;
 import org.testng.annotations.Test;
 
@@ -173,5 +176,31 @@
         assertEquals("/things/mytemplate.css",
                 service.translateCssPath("/things/mytemplate.css"));
         assertNull(service.translateCssPath(null));
+    }
+    
+    public void test_Resource_Link_Paths()
+    {
+        LinkFactory factory = newMock(LinkFactory.class);
+        ILink link = newMock(ILink.class);
+        
+        AssetService service = new AssetService();
+        
+        ResourceMatcherImpl rm = new ResourceMatcherImpl();
+        List patterns = new ArrayList();
+        patterns.add("tapestry/*");
+        patterns.add("dojo/*");
+        rm.setContributions(patterns);
+        rm.initializeService();
+        
+        service.setUnprotectedMatcher(rm);
+        service.setLinkFactory(factory);
+        
+        expect(factory.constructLink(eq(service), eq(false), isA(Map.class), eq(false))).andReturn(link);
+        
+        replay();
+        
+        service.getLink(false, "dojo/src/html.js");
+        
+        verify();
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java?rev=424599&r1=424598&r2=424599&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/engine/encoders/AssetEncoderTest.java Sat Jul 22 09:38:28 2006
@@ -125,4 +125,48 @@
     {
         expect(encoding.getPathInfo()).andReturn(pathInfo);
     }
-}
\ No newline at end of file
+    
+    public void test_Encode_Unprotected()
+    {
+        ServiceEncoding encoding = newEncoding();
+
+        trainGetParameterValue(encoding, ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
+        trainGetParameterValue(encoding, AssetService.PATH, "/foo/bar/Baz.gif");
+        trainGetParameterValue(encoding, AssetService.DIGEST, null);
+        
+        encoding.setServletPath("/assets/" + AssetEncoder.DIGEST_STATIC + "/foo/bar/Baz.gif");
+        encoding.setParameterValue(AssetService.PATH, null);
+        encoding.setParameterValue(AssetService.DIGEST, null);
+        encoding.setParameterValue(ServiceConstants.SERVICE, null);
+
+        replay();
+
+        AssetEncoder encoder = new AssetEncoder();
+        encoder.setPath("/assets");
+
+        encoder.encode(encoding);
+
+        verify();
+    }
+    
+    public void test_Decode_Unprotected()
+    {
+        ServiceEncoding encoding = newEncoding();
+        
+        trainGetServletPath(encoding, "/assets");
+        trainGetPathInfo(encoding, "/" + AssetEncoder.DIGEST_STATIC + "/foo/bar/Baz.gif");
+        
+        encoding.setParameterValue(ServiceConstants.SERVICE, Tapestry.ASSET_SERVICE);
+        encoding.setParameterValue(AssetService.DIGEST, AssetEncoder.DIGEST_STATIC);
+        encoding.setParameterValue(AssetService.PATH, "/foo/bar/Baz.gif");
+
+        replay();
+
+        AssetEncoder encoder = new AssetEncoder();
+        encoder.setPath("/assets");
+
+        encoder.decode(encoding);
+
+        verify();
+    }
+}