Author: markt Date: Tue Jan 8 19:43:13 2013 New Revision: 1430463 URL: http://svn.apache.org/viewvc?rev=1430463&view=rev Log: Adds support for Virtual resources to the DirResourceSet and JarResourceSet. This will allow an application to full traverse the resource hierarchy including any non-main resources mounted under a directory structure that does not exist in the main resources.
Added: tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSetVirtual.java (with props) Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java Modified: tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java?rev=1430463&r1=1430462&r2=1430463&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/AbstractFileResourceSet.java Tue Jan 8 19:43:13 2013 @@ -37,6 +37,9 @@ public abstract class AbstractFileResour protected File file(String name, boolean mustExist) { + if (name.equals("/")) { + name = ""; + } File file = new File(fileBase, name); if (file.exists() && file.canRead() || !mustExist) { Modified: tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java?rev=1430463&r1=1430462&r2=1430463&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/DirResourceSet.java Tue Jan 8 19:43:13 2013 @@ -121,6 +121,18 @@ public class DirResourceSet extends Abst return result; } } else { + if (!path.endsWith("/")) { + path = path + "/"; + } + if (webAppMount.startsWith(path)) { + int i = webAppMount.indexOf('/', path.length()); + if (i == -1) { + return new String[] {webAppMount.substring(path.length())}; + } else { + return new String[] { + webAppMount.substring(path.length(), i)}; + } + } return EMPTY_STRING_ARRAY; } } @@ -148,6 +160,18 @@ public class DirResourceSet extends Abst } } } + } else { + if (!path.endsWith("/")) { + path = path + "/"; + } + if (webAppMount.startsWith(path)) { + int i = webAppMount.indexOf('/', path.length()); + if (i == -1) { + result.add(webAppMount + "/"); + } else { + result.add(webAppMount.substring(0, i + 1)); + } + } } result.setLocked(true); return result; Modified: tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java?rev=1430463&r1=1430462&r2=1430463&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/JarResourceRoot.java Tue Jan 8 19:43:13 2013 @@ -31,12 +31,26 @@ public class JarResourceRoot extends Abs private final File base; private final String baseUrl; + private final String name; public JarResourceRoot(WebResourceRoot root, File base, String baseUrl, String webAppPath) { super(root, webAppPath); this.base = base; this.baseUrl = "jar:" + baseUrl; + // Extract the name from the webAppPath + // Strip any trailing '/' character + String resourceName; + if (webAppPath.endsWith("/")) { + resourceName = webAppPath.substring(0, webAppPath.length() - 1); + } else { + resourceName = webAppPath; + } + int i = resourceName.lastIndexOf('/'); + if (i > -1) { + resourceName = resourceName.substring(i + 1); + } + name = resourceName; } @Override @@ -71,7 +85,7 @@ public class JarResourceRoot extends Abs @Override public String getName() { - return ""; + return name; } @Override Modified: tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java?rev=1430463&r1=1430462&r2=1430463&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java (original) +++ tomcat/trunk/java/org/apache/catalina/webresources/JarResourceSet.java Tue Jan 8 19:43:13 2013 @@ -167,6 +167,19 @@ public class JarResourceSet extends Abst } } } + } else { + if (!path.endsWith("/")) { + path = path + "/"; + } + if (webAppMount.startsWith(path)) { + int i = webAppMount.indexOf('/', path.length()); + if (i == -1) { + return new String[] {webAppMount.substring(path.length())}; + } else { + return new String[] { + webAppMount.substring(path.length(), i)}; + } + } } return result.toArray(new String[result.size()]); } @@ -204,6 +217,18 @@ public class JarResourceSet extends Abst } } } + } else { + if (!path.endsWith("/")) { + path = path + "/"; + } + if (webAppMount.startsWith(path)) { + int i = webAppMount.indexOf('/', path.length()); + if (i == -1) { + result.add(webAppMount + "/"); + } else { + result.add(webAppMount.substring(0, i + 1)); + } + } } result.setLocked(true); return result; Modified: tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java?rev=1430463&r1=1430462&r2=1430463&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java (original) +++ tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSet.java Tue Jan 8 19:43:13 2013 @@ -67,7 +67,13 @@ public abstract class AbstractTestResour public final void testGetResourceRoot() { WebResource webResource = resourceRoot.getResource(getMount() + "/"); Assert.assertTrue(webResource.isDirectory()); - Assert.assertEquals("", webResource.getName()); + String expected; + if (getMount().length() > 0) { + expected = getMount().substring(1); + } else { + expected = ""; + } + Assert.assertEquals(expected, webResource.getName()); Assert.assertEquals(getMount() + "/", webResource.getWebappPath()); } Modified: tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java?rev=1430463&r1=1430462&r2=1430463&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java (original) +++ tomcat/trunk/test/org/apache/catalina/webresources/AbstractTestResourceSetMount.java Tue Jan 8 19:43:13 2013 @@ -44,14 +44,17 @@ public abstract class AbstractTestResour String[] results = resourceRoot.list("/"); Assert.assertNotNull(results); - Assert.assertEquals(0, results.length); + Assert.assertEquals(1, results.length); + Assert.assertEquals(getMount().substring(1), results[0]); } @Test public final void testListWebAppPathsAbove() { Set<String> results = resourceRoot.listWebAppPaths("/"); - Assert.assertNull(results); + Assert.assertNotNull(results); + Assert.assertEquals(1, results.size()); + Assert.assertTrue(results.contains(getMount() + "/")); } @Test Added: tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSetVirtual.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSetVirtual.java?rev=1430463&view=auto ============================================================================== --- tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSetVirtual.java (added) +++ tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSetVirtual.java Tue Jan 8 19:43:13 2013 @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.catalina.webresources; + +import java.io.File; + +import org.apache.catalina.WebResourceRoot; +import org.apache.catalina.WebResourceSet; + +public class TestDirResourceSetVirtual extends TestDirResourceSet { + + @Override + public WebResourceRoot getWebResourceRoot() { + File f = new File(getBaseDir()); + TesterWebResourceRoot root = new TesterWebResourceRoot(); + WebResourceSet webResourceSet = + new DirResourceSet(new TesterWebResourceRoot(), + f.getAbsolutePath(), "/", "/"); + root.setMainResources(webResourceSet); + + WebResourceSet f1 = new FileResourceSet(root, + "test/webresources/dir1/f1.txt", "/f1.txt", "/"); + root.addPreResources(f1); + + WebResourceSet f2 = new FileResourceSet(root, + "test/webresources/dir1/f2.txt", "/f2.txt", "/"); + root.addPreResources(f2); + + WebResourceSet d1 = new DirResourceSet(root, + "test/webresources/dir1/d1", "/d1", "/"); + root.addPreResources(d1); + + WebResourceSet d2 = new DirResourceSet(root, + "test/webresources/dir1/d2", "/d2", "/"); + root.addPreResources(d2); + + return root; + } + + @Override + protected boolean isWriteable() { + return true; + } + + @Override + public String getBaseDir() { + return "test/webresources/dir3"; + } +} Propchange: tomcat/trunk/test/org/apache/catalina/webresources/TestDirResourceSetVirtual.java ------------------------------------------------------------------------------ svn:eol-style = native --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org