[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