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();
+ }
+}