[jboss-cvs] JBossAS SVN: r88238 - projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue May 5 18:55:45 EDT 2009
Author: marius.bogoevici
Date: 2009-05-05 18:55:45 -0400 (Tue, 05 May 2009)
New Revision: 88238
Modified:
projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolver.java
projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolvingHelper.java
projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSServletContextResourcePatternResolver.java
Log:
Fixing pattern matching in directories and "classpath:" patterns.
Modified: projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolver.java
===================================================================
--- projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolver.java 2009-05-05 22:54:32 UTC (rev 88237)
+++ projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolver.java 2009-05-05 22:55:45 UTC (rev 88238)
@@ -47,13 +47,25 @@
super(new VFSResourceLoader(classLoader));
}
- protected Resource[] findPathMatchingResources(String locationPattern) throws IOException
- {
- if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX))
- locationPattern = locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length());
- String rootDirPath = determineRootDir(locationPattern);
- return VFSResourcePatternResolvingHelper.locateResources(locationPattern, rootDirPath, getClassLoader(), getPathMatcher());
- }
+ protected Resource[] findPathMatchingResources(String locationPattern) throws IOException
+ {
+ if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX))
+ {
+ locationPattern = locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length());
+ String rootDirPath = determineRootDir(locationPattern);
+ return VFSResourcePatternResolvingHelper.locateResources(locationPattern, rootDirPath, getClassLoader(), getPathMatcher(), false);
+ }
+ if (locationPattern.startsWith(CLASSPATH_URL_PREFIX))
+ {
+ locationPattern = locationPattern.substring(CLASSPATH_URL_PREFIX.length());
+ String rootDirPath = determineRootDir(locationPattern);
+ return VFSResourcePatternResolvingHelper.locateResources(locationPattern, rootDirPath, getClassLoader(), getPathMatcher(), true);
+ }
+ else
+ {
+ return super.findPathMatchingResources(locationPattern);
+ }
+ }
protected Resource convertClassLoaderURL(URL url)
{
Modified: projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolvingHelper.java
===================================================================
--- projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolvingHelper.java 2009-05-05 22:54:32 UTC (rev 88237)
+++ projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolvingHelper.java 2009-05-05 22:55:45 UTC (rev 88238)
@@ -42,13 +42,16 @@
*
* @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
* @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
+ *
+ * Note: Thanks to David Ward for providing a fix for resource path matching.
*/
public class VFSResourcePatternResolvingHelper
{
private static Logger log = Logger.getLogger(VFSResourcePatternResolvingHelper.class);
- public static Resource[] locateResources(String locationPattern, String rootDirPath, ClassLoader classLoader, PathMatcher pathMatcher)
+ public static Resource[] locateResources(String locationPattern, String rootDirPath, ClassLoader classLoader,
+ PathMatcher pathMatcher, boolean oneMatchingRootOnly)
throws IOException
{
String subPattern = locationPattern.substring(rootDirPath.length());
@@ -57,9 +60,14 @@
List<Resource> resources = new ArrayList<Resource>();
Enumeration<URL> urls = classLoader.getResources(rootDirPath);
- while (urls.hasMoreElements())
- resources.addAll(getVFSResources(urls.nextElement(), subPattern, pathMatcher));
-
+ if (!oneMatchingRootOnly)
+ {
+ while (urls.hasMoreElements())
+ resources.addAll(getVFSResources(urls.nextElement(), subPattern, pathMatcher));
+ } else
+ {
+ resources.addAll(getVFSResources(classLoader.getResource(rootDirPath), subPattern, pathMatcher));
+ }
return resources.toArray(new Resource[resources.size()]);
}
@@ -68,6 +76,7 @@
*
* @param rootURL the root URL
* @param subPattern the sub pattern
+ * @param pathMatcher the PathMatcher used for matching directories
* @return vfs resources list
* @throws java.io.IOException for any error
*/
@@ -75,7 +84,7 @@
{
log.debug("Scanning url: " + rootURL + ", sub-pattern: " + subPattern);
VirtualFile root = VFS.getRoot(rootURL);
- PatternVirtualFileVisitor visitor = new PatternVirtualFileVisitor(subPattern, pathMatcher);
+ PatternVirtualFileVisitor visitor = new PatternVirtualFileVisitor(root.getPathName(), subPattern, pathMatcher);
root.visit(visitor);
if (log.isTraceEnabled())
log.trace("Found resources: " + visitor);
@@ -87,11 +96,13 @@
private final String subPattern;
private final List<Resource> resources = new ArrayList<Resource>();
private final PathMatcher pathMatcher;
+ private final String rootPath;
- private PatternVirtualFileVisitor(String subPattern, PathMatcher pathMatcher)
+ private PatternVirtualFileVisitor(String rootPath, String subPattern, PathMatcher pathMatcher)
{
this.subPattern = subPattern;
this.pathMatcher = pathMatcher;
+ this.rootPath = rootPath.length() == 0 || rootPath.endsWith("/") ? rootPath : rootPath + "/";
}
public VisitorAttributes getAttributes()
@@ -101,7 +112,7 @@
public void visit(VirtualFile vf)
{
- if (pathMatcher.match(subPattern, vf.getPathName()))
+ if (pathMatcher.match(subPattern, vf.getPathName().substring(rootPath.length())))
resources.add(new VFSResource(vf));
}
Modified: projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSServletContextResourcePatternResolver.java
===================================================================
--- projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSServletContextResourcePatternResolver.java 2009-05-05 22:54:32 UTC (rev 88237)
+++ projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSServletContextResourcePatternResolver.java 2009-05-05 22:55:45 UTC (rev 88238)
@@ -48,8 +48,14 @@
{
locationPattern = locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length());
String rootDirPath = determineRootDir(locationPattern);
- return VFSResourcePatternResolvingHelper.locateResources(locationPattern, rootDirPath, getClassLoader(), getPathMatcher());
+ return VFSResourcePatternResolvingHelper.locateResources(locationPattern, rootDirPath, getClassLoader(), getPathMatcher(), false);
}
+ if (locationPattern.startsWith(CLASSPATH_URL_PREFIX))
+ {
+ locationPattern = locationPattern.substring(CLASSPATH_URL_PREFIX.length());
+ String rootDirPath = determineRootDir(locationPattern);
+ return VFSResourcePatternResolvingHelper.locateResources(locationPattern, rootDirPath, getClassLoader(), getPathMatcher(), true);
+ }
else
{
return super.findPathMatchingResources(locationPattern);
More information about the jboss-cvs-commits
mailing list