You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/04/16 02:10:22 UTC
svn commit: r394405 - in /tapestry/tapestry4/trunk: ./
framework/src/descriptor/META-INF/
framework/src/java/org/apache/tapestry/ajax/
framework/src/java/org/apache/tapestry/asset/
framework/src/java/org/apache/tapestry/engine/ framework/src/java/org/a...
Author: jkuhnert
Date: Sat Apr 15 17:10:20 2006
New Revision: 394405
URL: http://svn.apache.org/viewcvs?rev=394405&view=rev
Log:
Fixes for relative path resolution of dojo resources.
Added:
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetComparator.java
Modified:
tapestry/tapestry4/trunk/.checkstyle
tapestry/tapestry4/trunk/.project
tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.asset.xml
tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.services.xml
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ajax/AjaxShellDelegate.java
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/ResourceDigestSourceImpl.java
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/engine/RequestCycle.java
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/PropertySelection.script
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Shell.jwc
tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/QueryParameterMap.java
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/ClasspathAssetFactoryTest.java
tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java
Modified: tapestry/tapestry4/trunk/.checkstyle
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/.checkstyle?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/.checkstyle (original)
+++ tapestry/tapestry4/trunk/.checkstyle Sat Apr 15 17:10:20 2006
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<fileset-config file-format-version="1.2.0" simple-config="true">
- <fileset name="all" enabled="true" check-config-name="Sun Checks" local="false">
- <file-match-pattern match-pattern="." include-pattern="true"/>
- </fileset>
- <filter name="FilesFromPackage" enabled="true">
- <filter-data value="framework/src/test"/>
- <filter-data value="contrib/src/test"/>
- <filter-data value="portlet/src/test"/>
- <filter-data value="annotations/src/test"/>
- <filter-data value="examples/Vlib/src/test"/>
- </filter>
- <filter name="NonSrcDirs" enabled="true"/>
-</fileset-config>
+<?xml version="1.0" encoding="UTF-8"?>
+<fileset-config file-format-version="1.2.0" simple-config="true">
+ <fileset name="all" enabled="true" check-config-name="tapestry" local="false">
+ <file-match-pattern match-pattern="." include-pattern="true"/>
+ </fileset>
+ <filter name="FilesFromPackage" enabled="true">
+ <filter-data value="framework/src/test"/>
+ <filter-data value="contrib/src/test"/>
+ <filter-data value="portlet/src/test"/>
+ <filter-data value="annotations/src/test"/>
+ <filter-data value="examples/Vlib/src/test"/>
+ </filter>
+ <filter name="NonSrcDirs" enabled="true"/>
+</fileset-config>
Modified: tapestry/tapestry4/trunk/.project
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/.project?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
Binary files - no diff available.
Modified: tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.asset.xml
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.asset.xml?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.asset.xml (original)
+++ tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.asset.xml Sat Apr 15 17:10:20 2006
@@ -157,6 +157,11 @@
<attribute name="contains" required="true" unique="true">
The regexp pattern to match against.
</attribute>
+
+ <rules>
+ <push-attribute attribute="contains"/>
+ <invoke-parent method="addElement"/>
+ </rules>
</element>
</schema>
</configuration-point>
@@ -164,14 +169,7 @@
<contribution configuration-id="UnprotectedAssets">
List of unprotected asset regexps for ResourceMatcher service.
- <unprotected-resource contains="org/apache/tapestry/html/dojo/**/*.js" />
- <unprotected-resource contains="org/apache/tapestry/html/dojo/**/*.css" />
- <unprotected-resource contains="org/apache/tapestry/html/dojo/**/*.html" />
- <unprotected-resource contains="org/apache/tapestry/html/dojo/**/*.htm" />
- <unprotected-resource contains="org/apache/tapestry/html/dojo/**/*.gif" />
- <unprotected-resource contains="org/apache/tapestry/html/dojo/**/*.jpg" />
- <unprotected-resource contains="org/apache/tapestry/html/dojo/**/*.svg" />
- <unprotected-resource contains="org/apache/tapestry/html/dojo/**/*.png" />
+ <unprotected-resource contains="org/apache/tapestry/html/dojo*" />
</contribution>
<service-point id="UnprotectedResourceMatcher" interface="ResourceMatcher" >
Modified: tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.services.xml
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.services.xml?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.services.xml (original)
+++ tapestry/tapestry4/trunk/framework/src/descriptor/META-INF/tapestry.services.xml Sat Apr 15 17:10:20 2006
@@ -79,6 +79,7 @@
<set-object property="response" value="service:tapestry.globals.WebResponse" />
<set-service property="digestSource"
service-id="tapestry.asset.ResourceDigestSource" />
+ <set-service property="unprotectedMatcher" service-id="tapestry.asset.UnprotectedResourceMatcher" />
</construct>
</invoke-factory>
</service-point>
Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ajax/AjaxShellDelegate.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ajax/AjaxShellDelegate.java?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ajax/AjaxShellDelegate.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/ajax/AjaxShellDelegate.java Sat Apr 15 17:10:20 2006
@@ -29,6 +29,8 @@
{
protected IAsset _dojoSource;
+ protected IAsset _dojoPath;
+
protected IEngineService _assetService;
/**
@@ -36,17 +38,16 @@
*/
public void render(IMarkupWriter writer, IRequestCycle cycle)
{
- // .append(" baseRelativePath:\"").append(_dojoSource.getResourceLocation().getRelativeResource("").getResourceURL())
// first configure dojo, has to happen before package include
StringBuffer str = new StringBuffer("<script type=\"text/javascript\">");
str.append("djConfig = { isDebug: true,")
.append(" baseRelativePath:\"")
- .append(_dojoSource.getResourceLocation().getRelativeResource("").getResourceURL())
-
+ .append(_assetService.getLink(true,
+ _dojoPath.getResourceLocation().getPath()).getAbsoluteURL())
.append("\", preventBackButtonFix: false, parseWidgets: true };")
.append(" </script>\n\n ");
- //include the js package
+ // include the core dojo.js package
str.append("<script type=\"text/javascript\" src=\"")
.append(_assetService.getLink(true,
_dojoSource.getResourceLocation()
@@ -63,6 +64,15 @@
public void setDojoSource(IAsset dojoSource)
{
_dojoSource = dojoSource;
+ }
+
+ /**
+ * Sets the dojo baseRelativePath value.
+ * @param dojoPath
+ */
+ public void setDojoPath(IAsset dojoPath)
+ {
+ _dojoPath = dojoPath;
}
/**
Added: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetComparator.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetComparator.java?rev=394405&view=auto
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetComparator.java (added)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetComparator.java Sat Apr 15 17:10:20 2006
@@ -0,0 +1,47 @@
+// Copyright Apr 15, 2006 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package org.apache.tapestry.asset;
+
+import java.util.Comparator;
+
+
+/**
+ * Used to guarantee that whenever present, the PATH key entry
+ * of an asset service link is always appended last in that path
+ * string. This is required for certain relative url operations. (ie dojo baseRelativePath)
+ *
+ * @author jkuhnert
+ */
+public class AssetComparator implements Comparator
+{
+
+ /**
+ * {@inheritDoc}
+ */
+ public int compare(Object o1, Object o2)
+ {
+ if (!String.class.isInstance(o1) || !String.class.isInstance(o2))
+ return 1;
+
+ String key1 = (String)o1;
+ String key2 = (String)o2;
+
+ if (key1.toUpperCase().equals("PATH") && !key2.toUpperCase().equals("PATH"))
+ return 1;
+ else if (key2.toUpperCase().equals("PATH") && !key1.toUpperCase().equals("PATH"))
+ return -1;
+ else return key1.compareToIgnoreCase(key2);
+ }
+
+}
Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/AssetService.java Sat Apr 15 17:10:20 2006
@@ -23,6 +23,7 @@
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
+import java.util.TreeMap;
import javax.servlet.http.HttpServletResponse;
@@ -151,14 +152,14 @@
String digest = _digestSource.getDigestForResource(path);
- Map parameters = new HashMap();
-
+ Map parameters = new TreeMap(new AssetComparator());
+
parameters.put(ServiceConstants.SERVICE, getName());
parameters.put(PATH, path);
parameters.put(DIGEST, digest);
-
+
// Service is stateless, which is the exception to the rule.
-
+
return _linkFactory.constructLink(this, post, parameters, false);
}
@@ -196,6 +197,7 @@
String path = cycle.getParameter(PATH);
String md5Digest = cycle.getParameter(DIGEST);
boolean checkDigest = !_unprotectedMatcher.containsResource(path);
+
try
{
if (checkDigest
@@ -255,7 +257,12 @@
//even if it doesn't exist in header the value will be -1,
//which means we need to write out the contents of the resource
- long modify = Long.parseLong(_request.getHeader("If-Modified-Since"));
+ String header = _request.getHeader("If-Modified-Since");
+ long modify = -1;
+
+ if (header != null)
+ modify = Long.parseLong(header);
+
if (resource.lastModified() > modify)
return false;
Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/ResourceDigestSourceImpl.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/ResourceDigestSourceImpl.java?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/ResourceDigestSourceImpl.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/asset/ResourceDigestSourceImpl.java Sat Apr 15 17:10:20 2006
@@ -55,6 +55,8 @@
public synchronized String getDigestForResource(String resourcePath)
{
+ if (resourcePath == null) return null;
+
String result = (String) _cache.get(resourcePath);
if (result == null)
Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/engine/RequestCycle.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/engine/RequestCycle.java?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/engine/RequestCycle.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/engine/RequestCycle.java Sat Apr 15 17:10:20 2006
@@ -292,8 +292,8 @@
public void setResponseBuilder(ResponseBuilder builder)
{
- if (_responseBuilder != null)
- throw new IllegalArgumentException("A ResponseBuilder has already been set on this response.");
+ //if (_responseBuilder != null)
+ // throw new IllegalArgumentException("A ResponseBuilder has already been set on this response.");
_responseBuilder = builder;
}
Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/PropertySelection.script
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/PropertySelection.script?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/PropertySelection.script (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/form/PropertySelection.script Sat Apr 15 17:10:20 2006
@@ -14,11 +14,51 @@
</body>
<initialization>
dojo.event.connect(window, "onload", function() {
+
+ var uriobj = new dojo.uri.Uri(dojo.hostenv.getBaseScriptUri().toString());
+ var relobj = new dojo.uri.Uri("src/widget/templates/HtmlComboBox.html");
+ dojo.debug("uri: " + uriobj);
+ dojo.debug("relobj: " + relobj);
+ dojo.debug("relobj.path is : " + relobj.path);
+
+ dojo.debug("dojouri: " + dojo.uri.dojoUri("src/widget/templates/HtmlComboBox.html"));
+
+ if (relobj.path == "" && relobj.scheme == null &&
+ relobj.authority == null && relobj.query == null) {
+ dojo.debug("hit null relobj stuff");
+ if (relobj.fragment != null) { uriobj.fragment = relobj.fragment; }
+ relobj = uriobj;
+ }
+
+ if (relobj.path.charAt(0) != "/") {
+ var path = uriobj.path.substring(0,
+ uriobj.path.lastIndexOf("/") + 1) + relobj.path;
+
+ var segs = path.split("/");
+ for (var j = 0; j < segs.length; j++) {
+ if (segs[j] == ".") {
+ if (j == segs.length - 1) { segs[j] = ""; }
+ else { segs.splice(j, 1); j--; }
+ } else if (j > 0 && !(j == 1 && segs[0] == "") &&
+ segs[j] == ".." && segs[j-1] != "..") {
+
+ if (j == segs.length - 1) { segs.splice(j, 1); segs[j - 1] = ""; }
+ else { segs.splice(j - 1, 2); j -= 2; }
+ }
+ }
+ relobj.path = segs.join("/");
+ }
+
+ dojo.debug("relobj.path is : " + relobj.path);
+ dojo.debug("relobj.scheme: " + relobj.scheme);
+ dojo.debug("relobj.authority: " + relobj.authority);
+ dojo.debug("relobj.query: " + relobj.query);
+ dojo.debug("relobj.fragment: " + relobj.fragment);
+
dojo.debug("Parsing combo box");
- djConfig.searchIds.push("${select.getId()}");
- dojo.debug("searchIds length:" + djConfig.searchIds.length);
- djConfig.parseWidgets = true;
- dojo.hostenv.makeWidgets();
+ // djConfig.searchIds.push("${select.getId()}");
+ // dojo.debug("searchIds length:" + djConfig.searchIds.length);
+ // dojo.hostenv.makeWidgets();
});
</initialization>
</script>
Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Shell.jwc
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Shell.jwc?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Shell.jwc (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/html/Shell.jwc Sat Apr 15 17:10:20 2006
@@ -105,6 +105,14 @@
</description>
</parameter>
+ <parameter name="dojoPath"
+ default-value="asset:defaultDojoPath" >
+ <description>
+ Specifies the default path to the root dojo folder, not the dojo.js file itself. This
+ is used by the djConfig.baseRelativePath javascript configuration variable in dojo.
+ </description>
+ </parameter>
+
<inject property="valueConverter" object="service:tapestry.coerce.ValueConverter"/>
<inject property="pageService" object="engine-service:page"/>
<inject property="applicationSpecification" object="infrastructure:applicationSpecification"/>
@@ -114,7 +122,9 @@
<bean name="coreAjaxDelegate" class="org.apache.tapestry.ajax.AjaxShellDelegate">
<set name="dojoSource" value="dojoSource" />
<set name="assetService" value="assetService" />
+ <set name="dojoPath" value="dojoPath" />
</bean>
<asset name="defaultDojoSource" path="classpath:/org/apache/tapestry/html/dojo/dojo.js" />
+ <asset name="defaultDojoPath" path="classpath:/org/apache/tapestry/html/dojo/" />
</component-specification>
Modified: tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/QueryParameterMap.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/QueryParameterMap.java?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/QueryParameterMap.java (original)
+++ tapestry/tapestry4/trunk/framework/src/java/org/apache/tapestry/util/QueryParameterMap.java Sat Apr 15 17:10:20 2006
@@ -17,6 +17,7 @@
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.TreeMap;
import org.apache.hivemind.util.Defense;
@@ -119,9 +120,10 @@
int count = _parameters.size();
String[] result = (String[]) _parameters.keySet().toArray(new String[count]);
-
- Arrays.sort(result);
-
+
+ if (!TreeMap.class.isInstance(_parameters))
+ Arrays.sort(result);
+
return result;
}
}
Modified: tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/ClasspathAssetFactoryTest.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/ClasspathAssetFactoryTest.java?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/ClasspathAssetFactoryTest.java (original)
+++ tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/ClasspathAssetFactoryTest.java Sat Apr 15 17:10:20 2006
@@ -19,6 +19,7 @@
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.Location;
import org.apache.hivemind.Resource;
+import org.apache.hivemind.impl.LocationImpl;
import org.apache.hivemind.test.HiveMindTestCase;
import org.apache.hivemind.util.ClasspathResource;
import org.apache.tapestry.IAsset;
@@ -142,6 +143,114 @@
verifyControls();
}
+ public void testCreateDirectoryAsset()
+ {
+ IEngineService assetService = newService();
+ Location l = newLocation();
+
+ replayControls();
+
+ ClasspathAssetFactory factory = new ClasspathAssetFactory();
+ factory.setClassResolver(getClassResolver());
+ factory.setAssetService(assetService);
+ factory.setLocalizer(new DefaultResourceLocalizer());
+
+ String path = "/org/apache/tapestry/html/dojo";
+
+ Resource subResource = new ClasspathResource(getClassResolver(), path);
+ IAsset asset = factory.createAsset(subResource, l);
+
+ assertTrue(asset instanceof PrivateAsset);
+ assertEquals(path, asset
+ .getResourceLocation().getPath());
+ assertSame(l, asset.getLocation());
+
+ verifyControls();
+ }
+
+ public void testCreateRelativeDirectoryAsset()
+ {
+ IEngineService assetService = newService();
+ Resource shell = new ClasspathResource(getClassResolver(),
+ "/org/apache/tapestry/html/Shell.jwc");
+ Location l = new LocationImpl(shell);
+
+ replayControls();
+
+ ClasspathAssetFactory factory = new ClasspathAssetFactory();
+ factory.setClassResolver(getClassResolver());
+ factory.setAssetService(assetService);
+ factory.setLocalizer(new DefaultResourceLocalizer());
+
+ String path = "/org/apache/tapestry/html/dojo/dojo.js";
+
+ IAsset asset = factory.createAsset(shell, path,
+ Locale.getDefault(),
+ l);
+
+ assertTrue(asset instanceof PrivateAsset);
+ assertEquals(path, asset
+ .getResourceLocation().getPath());
+ assertSame(l, asset.getLocation());
+
+ verifyControls();
+ }
+
+ public void testCreateRelativeDirectoryMissingAsset()
+ {
+ IEngineService assetService = newService();
+ Resource shell = new ClasspathResource(getClassResolver(),
+ "/org/apache/tapestry/html/Shell.jwc");
+ Location l = new LocationImpl(shell);
+
+ replayControls();
+
+ ClasspathAssetFactory factory = new ClasspathAssetFactory();
+ factory.setClassResolver(getClassResolver());
+ factory.setAssetService(assetService);
+ factory.setLocalizer(new DefaultResourceLocalizer());
+
+ String path = "/org/apache/tapestry/html/dojo/";
+
+ IAsset asset = factory.createAsset(shell, path,
+ Locale.getDefault(),
+ l);
+
+ assertTrue(asset instanceof PrivateAsset);
+ assertEquals(path, asset
+ .getResourceLocation().getPath());
+ assertSame(l, asset.getLocation());
+
+ verifyControls();
+ }
+
+ /**
+ * Tests relative sub-directory paths.
+ */
+ public void testRelativeDirectoryPath()
+ {
+ IEngineService assetService = newService();
+ Location l = newLocation();
+
+ replayControls();
+
+ ClasspathAssetFactory factory = new ClasspathAssetFactory();
+ factory.setClassResolver(getClassResolver());
+ factory.setAssetService(assetService);
+ factory.setLocalizer(new DefaultResourceLocalizer());
+
+ Resource subResource = new ClasspathResource(getClassResolver(),
+ "/org/apache/tapestry/asset/subresource/sub-resource.txt");
+ IAsset asset = factory.createAsset(subResource, l);
+
+ assertTrue(asset instanceof PrivateAsset);
+ assertEquals("/org/apache/tapestry/asset/subresource/sub-resource.txt",
+ asset.getResourceLocation().getPath());
+ assertSame(l, asset.getLocation());
+
+ verifyControls();
+ }
+
private ClasspathResource newBaseResource()
{
return new ClasspathResource(getClassResolver(),
Modified: tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java
URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java?rev=394405&r1=394404&r2=394405&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java (original)
+++ tapestry/tapestry4/trunk/framework/src/test/org/apache/tapestry/asset/TestUnprotectedAsset.java Sat Apr 15 17:10:20 2006
@@ -16,6 +16,8 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
import org.apache.hivemind.impl.DefaultClassResolver;
import org.apache.hivemind.test.HiveMindTestCase;
@@ -25,6 +27,7 @@
import org.apache.oro.text.regex.PatternMatcher;
import org.apache.oro.text.regex.Perl5Compiler;
import org.apache.oro.text.regex.Perl5Matcher;
+import org.apache.tapestry.services.ServiceConstants;
/**
* Tests for unprotected resource contributions.
@@ -43,7 +46,7 @@
public void testUnProtectedMatch()
{
Pattern pr = newPattern("org/apache/tapestry/asset/.*.txt");
-
+
assertFalse(matcher.contains("org/apache/tapestry/foobar.png", pr));
assertTrue(matcher.contains("org/apache/tapestry/asset/base-resource.txt", pr));
assertFalse(matcher.contains("org/apache/tapestry/asset/foobar.png", pr));
@@ -95,7 +98,29 @@
assertFalse("Urtime > drtime: " + urtime + " > " + drtime, urtime < drtime);
}
-
+
+ /**
+ * Tests new path ordering encoding.
+ */
+ public void testPathComparator()
+ {
+ Map parameters = new TreeMap(new AssetComparator());
+
+ parameters.put(ServiceConstants.SERVICE, "test");
+ parameters.put("PATH", "value");
+ parameters.put("digest", "digvalue");
+
+ assertEquals("test", parameters.get(ServiceConstants.SERVICE));
+ assertEquals("value", parameters.get("PATH"));
+ assertEquals("digvalue", parameters.get("digest"));
+
+ int count = parameters.size();
+ String[] result = (String[]) parameters.keySet().toArray(new String[count]);
+ assertEquals(3, result.length);
+
+ assertEquals("PATH", result[2]);
+ }
+
/**
* Tests the implementation of {@link ResourceMatcher}.
*/
@@ -107,6 +132,8 @@
patterns.add("/org/apache/tapestry/asset/.*.css");
patterns.add("/org/apache/tapestry/asset/.*.js");
patterns.add("/org/apache/tapestry/asset/[%$4]rew\\invalidpattern");
+ patterns.add("/org/apache/tapestry/html/dojo*");
+ patterns.add("org/apache/tapestry/html/dojo/*/*.png");
rm.setContributions(patterns);
rm.initializeService();
@@ -116,5 +143,10 @@
assertTrue(rm.containsResource("/org/apache/tapestry/asset/foo.txt"));
assertFalse(rm.containsResource("/org/apache/tapestry/asset/foo.TXT"));
assertTrue(rm.containsResource("/org/apache/tapestry/asset/subdirectory/foo.css"));
+ assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/"));
+ assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/dojo.js"));
+ assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/src/json.js"));
+ assertTrue(rm.containsResource("/org/apache/tapestry/html/dojo/src/test.png"));
}
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org
Re: svn commit: r394405 - in /tapestry/tapestry4/trunk: ./ framework/src/descriptor/META-INF/
framework/src/java/org/apache/tapestry/ajax/ framework/src/java/org/apache/tapestry/asset/
framework/src/java/org/apache/tapestry/engine/ framework/src/java/org/a...
Posted by "Brian K. Wallace" <br...@transmorphix.com>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
You mind if we control .project files (which I don't object to at all -
although not everyone uses Eclipse) as text vs. binary so we can get
diffs on those changes as well?
jkuhnert@apache.org wrote:
> Author: jkuhnert
> Date: Sat Apr 15 17:10:20 2006
> New Revision: 394405
>
> URL: http://svn.apache.org/viewcvs?rev=394405&view=rev
> Log:
> Fixes for relative path resolution of dojo resources.
>
<snip/>
>
> Modified: tapestry/tapestry4/trunk/.project
> URL: http://svn.apache.org/viewcvs/tapestry/tapestry4/trunk/.project?rev=394405&r1=394404&r2=394405&view=diff
> ==============================================================================
> Binary files - no diff available.
>
</snap>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (MingW32)
iD8DBQFEQZuuaCoPKRow/gARArznAJ9g/mBMpKnQ29uRJRKShQ61A4ONWgCeLyMa
Qp3uWkmb8JcoQeD1FXH3ndQ=
=FLyI
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org