[jboss-cvs] JBossAS SVN: r88881 - in projects/spring-int/trunk: vfs/src/main/java/org/jboss/spring/vfs and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu May 14 13:06:15 EDT 2009


Author: marius.bogoevici
Date: 2009-05-14 13:06:15 -0400 (Thu, 14 May 2009)
New Revision: 88881

Added:
   projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/VFSClassPathXmlApplicationContext.java
Modified:
   projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/NamedXmlApplicationContext.java
   projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/VFSXmlWebApplicationContext.java
   projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResource.java
   projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourceLoader.java
   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
Log:
JBSPRING-5, JBSPRING-7 Fixing getResource("classpath:/<resource-path>"), simplifying VFSResourceLoader and making it behave consistently with "classpath:" urls, adding VFSClassPathXMLApplicationContext.

Modified: projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/NamedXmlApplicationContext.java
===================================================================
--- projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/NamedXmlApplicationContext.java	2009-05-14 17:02:06 UTC (rev 88880)
+++ projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/NamedXmlApplicationContext.java	2009-05-14 17:06:15 UTC (rev 88881)
@@ -35,7 +35,7 @@
 /**
  * @author <a href="mailto:ales.justin at genera-lynx.com">Ales Justin</a>
  */
-public class NamedXmlApplicationContext extends ClassPathXmlApplicationContext implements Nameable
+public class NamedXmlApplicationContext extends VFSClassPathXmlApplicationContext implements Nameable
 {
    private String defaultName;
    private Resource resource;
@@ -91,8 +91,4 @@
       return name;
    }
 
-   protected ResourcePatternResolver getResourcePatternResolver()
-   {
-      return new VFSResourcePatternResolver(getClassLoader());
-   }
 }

Added: projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/VFSClassPathXmlApplicationContext.java
===================================================================
--- projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/VFSClassPathXmlApplicationContext.java	                        (rev 0)
+++ projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/VFSClassPathXmlApplicationContext.java	2009-05-14 17:06:15 UTC (rev 88881)
@@ -0,0 +1,93 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2009, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.spring.factory;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.context.ApplicationContext;
+import org.springframework.beans.BeansException;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.core.io.Resource;
+import org.jboss.spring.vfs.VFSResourcePatternResolver;
+import org.jboss.spring.vfs.VFSResourceLoader;
+
+/**
+ * {@link org.springframework.context.support.ClassPathXmlApplicationContext} variant
+ * adding support for classpath scanning in JBoss AS 5, using the VFS file system.
+ *
+ * @author <a href="mailto:mariusb at redhat.com">Marius Bogoevici</a>
+ */
+public class VFSClassPathXmlApplicationContext extends ClassPathXmlApplicationContext 
+{
+    public VFSClassPathXmlApplicationContext() {
+        super();
+    }
+
+    public VFSClassPathXmlApplicationContext(ApplicationContext parent) {
+        super(parent);
+    }
+
+    public VFSClassPathXmlApplicationContext(String configLocation) throws BeansException {
+        super(configLocation);
+    }
+
+    public VFSClassPathXmlApplicationContext(String[] configLocations) throws BeansException {
+        super(configLocations);
+    }
+
+    public VFSClassPathXmlApplicationContext(String[] configLocations, ApplicationContext parent) throws BeansException {
+        super(configLocations, parent);
+    }
+
+    public VFSClassPathXmlApplicationContext(String[] configLocations, boolean refresh) throws BeansException {
+        super(configLocations, refresh);
+    }
+
+    public VFSClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent) throws BeansException {
+        super(configLocations, refresh, parent);
+    }
+
+    public VFSClassPathXmlApplicationContext(String path, Class clazz) throws BeansException {
+        super(path, clazz);
+    }
+
+    public VFSClassPathXmlApplicationContext(String[] paths, Class clazz) throws BeansException {
+        super(paths, clazz);
+    }
+
+    public VFSClassPathXmlApplicationContext(String[] paths, Class clazz, ApplicationContext parent) throws BeansException {
+        super(paths, clazz, parent);
+    }
+
+
+    protected ResourcePatternResolver getResourcePatternResolver()
+    {
+       return new VFSResourcePatternResolver(new VFSResourceLoader(getClassLoader()));
+    }
+
+    @Override
+    public Resource getResource(String location)
+    {
+        return getResourcePatternResolver().getResource(location);
+    }
+
+}
+

Modified: projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/VFSXmlWebApplicationContext.java
===================================================================
--- projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/VFSXmlWebApplicationContext.java	2009-05-14 17:02:06 UTC (rev 88880)
+++ projects/spring-int/trunk/deployers/src/main/java/org/jboss/spring/factory/VFSXmlWebApplicationContext.java	2009-05-14 17:06:15 UTC (rev 88881)
@@ -41,7 +41,7 @@
    protected ResourcePatternResolver getResourcePatternResolver()
    {
       return new VFSServletContextResourcePatternResolver(
-              new WebApplicationContextAwareVFSResourceLoader());
+              new WebApplicationContextAwareVFSResourceLoader(getClassLoader()));
    }
 
    /**
@@ -51,11 +51,22 @@
     */
    private class WebApplicationContextAwareVFSResourceLoader extends VFSResourceLoader
    {
-      @Override
+
+      WebApplicationContextAwareVFSResourceLoader(ClassLoader classLoader) {
+         super(classLoader);
+      }
+
+       @Override
       protected Resource getResourceByPath(String path)
       {
          return VFSXmlWebApplicationContext.this.getResourceByPath(path);
       }
    }
+
+    @Override
+    public Resource getResource(String location)
+    {
+        return getResourcePatternResolver().getResource(location);
+    }
 }
 

Modified: projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResource.java
===================================================================
--- projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResource.java	2009-05-14 17:02:06 UTC (rev 88880)
+++ projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResource.java	2009-05-14 17:06:15 UTC (rev 88881)
@@ -30,14 +30,16 @@
 
 import org.jboss.virtual.VirtualFile;
 import org.jboss.virtual.VFSUtils;
+import org.jboss.virtual.VFS;
 import org.springframework.core.io.Resource;
+import org.springframework.core.io.AbstractResource;
 
 /**
  * VFS based Resource.
  *
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
-public class VFSResource implements Resource
+public class VFSResource extends AbstractResource
 {
    private VirtualFile file;
 
@@ -48,6 +50,19 @@
       this.file = file;
    }
 
+   public VFSResource(URL url)
+   {
+      if (url == null)
+         throw new IllegalArgumentException("Null url");
+      try
+      {
+         this.file = VFS.getRoot(url);
+      } catch (IOException e)
+      {
+         throw new IllegalArgumentException("Cannot retrieve file from URL: ", e);
+      }
+   }
+
    public boolean exists()
    {
       try
@@ -163,4 +178,20 @@
    {
       return getDescription();
    }
+
+    @Override
+    public boolean equals(Object other) {
+      if (other instanceof VFSResource)
+      {
+         return file.equals(((VFSResource)other).file);
+      } else
+      {
+         return false;
+      }
+    }
+
+    @Override
+    public int hashCode() {
+      return file.hashCode();
+    }
 }

Modified: projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourceLoader.java
===================================================================
--- projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourceLoader.java	2009-05-14 17:02:06 UTC (rev 88880)
+++ projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourceLoader.java	2009-05-14 17:06:15 UTC (rev 88881)
@@ -36,11 +36,7 @@
  * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
  */
 public class VFSResourceLoader extends DefaultResourceLoader
-{
-   public VFSResourceLoader()
-   {
-   }
-
+{    
    public VFSResourceLoader(ClassLoader classLoader)
    {
       super(classLoader);
@@ -51,22 +47,12 @@
       Assert.notNull(location, "Location must not be null");
       if (location.startsWith(CLASSPATH_URL_PREFIX))
       {
-         return new ClassPathResource(location.substring(CLASSPATH_URL_PREFIX.length()), getClassLoader());
+         return new VFSResource(this.getClassLoader().getResource(location.substring(CLASSPATH_URL_PREFIX.length())));
       }
       else
       {
-         try
-         {
-            // Try to parse the location as a URL...
-            URL url = new URL(location);
-            VirtualFile file = VFS.getRoot(url);
-            return new VFSResource(file);
-         }
-         catch (Exception ex)
-         {
-            // No URL -> resolve as resource path.
-            return getResourceByPath(location);
-         }
+         return super.getResource(location);
       }
+
    }
 }
\ No newline at end of file

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-14 17:02:06 UTC (rev 88880)
+++ projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolver.java	2009-05-14 17:06:15 UTC (rev 88881)
@@ -23,10 +23,12 @@
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.Set;
 
 import org.jboss.virtual.VFS;
 import org.jboss.virtual.VirtualFile;
 import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
 import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 
 /**
@@ -37,16 +39,11 @@
  */
 public class VFSResourcePatternResolver extends PathMatchingResourcePatternResolver
 {
-   public VFSResourcePatternResolver()
+   public VFSResourcePatternResolver(ResourceLoader resourceLoader)
    {
-      super(new VFSResourceLoader());
+      super(resourceLoader);
    }
 
-   public VFSResourcePatternResolver(ClassLoader classLoader)
-   {
-      super(new VFSResourceLoader(classLoader));
-   }
-
     protected Resource[] findPathMatchingResources(String locationPattern) throws IOException
     {
        if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX))
@@ -58,7 +55,7 @@
        if (locationPattern.startsWith(CLASSPATH_URL_PREFIX))
        {
            locationPattern = locationPattern.substring(CLASSPATH_URL_PREFIX.length());
-            String rootDirPath = determineRootDir(locationPattern);
+           String rootDirPath = determineRootDir(locationPattern);
            return VFSResourcePatternResolvingHelper.locateResources(locationPattern, rootDirPath, getClassLoader(), getPathMatcher(), true);
        }
        else
@@ -67,17 +64,4 @@
        }
     }
 
-   protected Resource convertClassLoaderURL(URL url)
-   {
-      try
-      {
-         VirtualFile file = VFS.getRoot(url);
-         return new VFSResource(file);
-      }
-      catch (IOException e)
-      {
-         throw new RuntimeException(e);
-      }
-   }
-
 }
\ No newline at end of file

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-14 17:02:06 UTC (rev 88880)
+++ projects/spring-int/trunk/vfs/src/main/java/org/jboss/spring/vfs/VFSResourcePatternResolvingHelper.java	2009-05-14 17:06:15 UTC (rev 88881)
@@ -23,9 +23,7 @@
 
 import java.io.IOException;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
+import java.util.*;
 
 import org.jboss.logging.Logger;
 import org.jboss.virtual.VFS;
@@ -80,7 +78,7 @@
      * @return vfs resources list
      * @throws java.io.IOException for any error
      */
-    public static List<Resource> getVFSResources(URL rootURL, String subPattern, PathMatcher pathMatcher) throws IOException
+    public static Set<Resource> getVFSResources(URL rootURL, String subPattern, PathMatcher pathMatcher) throws IOException
     {
         log.debug("Scanning url: " + rootURL + ", sub-pattern: " + subPattern);
         VirtualFile root = VFS.getRoot(rootURL);
@@ -94,7 +92,7 @@
     protected static class PatternVirtualFileVisitor implements VirtualFileVisitor
     {
         private final String subPattern;
-        private final List<Resource> resources = new ArrayList<Resource>();
+        private final Set<Resource> resources = new HashSet<Resource>();
         private final PathMatcher pathMatcher;
         private final String rootPath;
 
@@ -116,7 +114,7 @@
                 resources.add(new VFSResource(vf));
         }
 
-        public List<Resource> getResources()
+        public Set<Resource> getResources()
         {
             return resources;
         }




More information about the jboss-cvs-commits mailing list