[jboss-cvs] JBossAS SVN: r76013 - in projects/jboss-cl/trunk: classloading/src/main/org/jboss/classloading/spi/dependency/policy/mock and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat Jul 19 09:35:44 EDT 2008
Author: alesj
Date: 2008-07-19 09:35:44 -0400 (Sat, 19 Jul 2008)
New Revision: 76013
Modified:
projects/jboss-cl/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/VFSResourceVisitor.java
projects/jboss-cl/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/VFSClassLoaderPolicyModule.java
projects/jboss-cl/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/VFSResourceVisitorUnitTestCase.java
projects/jboss-cl/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Module.java
projects/jboss-cl/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/mock/MockClassLoaderPolicyModule.java
Log:
[JBCL-19]; adding recursion filter.
Modified: projects/jboss-cl/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Module.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Module.java 2008-07-19 13:15:01 UTC (rev 76012)
+++ projects/jboss-cl/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/Module.java 2008-07-19 13:35:44 UTC (rev 76013)
@@ -335,9 +335,24 @@
*/
public void visit(ResourceVisitor visitor, ResourceFilter filter)
{
+ visit(visitor, filter, null);
+ }
+
+ /**
+ * Visit the resources in this module using the given filter(s)
+ * <p/>
+ * Typically the filter is used to determine which types of files to visit, e.g. .class files.
+ * While the recurseFilter determines which jars/directories to recurse into.
+ *
+ * @param visitor the visitor
+ * @param filter the filter
+ * @param recurseFilter the recursion filter (null means recurse into everything)
+ */
+ public void visit(ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter)
+ {
throw new UnsupportedOperationException("The module " + getContextName() + " does not support filtering: " + getClass().getName());
}
-
+
/**
* Get the delegate loaders for this module
*
Modified: projects/jboss-cl/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/mock/MockClassLoaderPolicyModule.java
===================================================================
--- projects/jboss-cl/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/mock/MockClassLoaderPolicyModule.java 2008-07-19 13:15:01 UTC (rev 76012)
+++ projects/jboss-cl/trunk/classloading/src/main/org/jboss/classloading/spi/dependency/policy/mock/MockClassLoaderPolicyModule.java 2008-07-19 13:35:44 UTC (rev 76013)
@@ -91,7 +91,7 @@
return classLoader.getResource(path);
}
- public void visit(ResourceVisitor visitor, ResourceFilter filter)
+ public void visit(ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter)
{
MockClassLoadingMetaData mclmd = getClassLoadingMetaData();
String[] paths = mclmd.getPaths();
Modified: projects/jboss-cl/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/VFSResourceVisitor.java
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/VFSResourceVisitor.java 2008-07-19 13:15:01 UTC (rev 76012)
+++ projects/jboss-cl/trunk/classloading-vfs/src/main/org/jboss/classloading/plugins/vfs/VFSResourceVisitor.java 2008-07-19 13:35:44 UTC (rev 76013)
@@ -66,6 +66,9 @@
/** The resource filter */
private ResourceFilter filter;
+ /** The resource filter */
+ private ResourceFilter recurseFilter;
+
/**
* Visit the resources
*
@@ -75,10 +78,11 @@
* @param classLoader the classLoader
* @param visitor the visitor
* @param filter the filter
+ * @param recurseFilter the recurse filter
*/
- public static void visit(VirtualFile[] roots, ClassFilter included, ClassFilter excluded, ClassLoader classLoader, ResourceVisitor visitor, ResourceFilter filter)
+ public static void visit(VirtualFile[] roots, ClassFilter included, ClassFilter excluded, ClassLoader classLoader, ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter)
{
- VFSResourceVisitor vfsVisitor = new VFSResourceVisitor(roots, included, excluded, classLoader, visitor, filter);
+ VFSResourceVisitor vfsVisitor = new VFSResourceVisitor(roots, included, excluded, classLoader, visitor, filter, recurseFilter);
for (VirtualFile root : roots)
{
try
@@ -102,8 +106,9 @@
* @param classLoader the classloader
* @param visitor the visitor
* @param filter the filter
+ * @param recurseFilter the recurse filter
*/
- VFSResourceVisitor(VirtualFile[] roots, ClassFilter included, ClassFilter excluded, ClassLoader classLoader, ResourceVisitor visitor, ResourceFilter filter)
+ VFSResourceVisitor(VirtualFile[] roots, ClassFilter included, ClassFilter excluded, ClassLoader classLoader, ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter)
{
if (roots == null)
throw new IllegalArgumentException("Null roots");
@@ -118,6 +123,7 @@
this.classLoader = classLoader;
this.visitor = visitor;
this.filter = filter;
+ this.recurseFilter = recurseFilter;
}
/**
@@ -141,10 +147,41 @@
attributes.setIncludeRoot(false);
attributes.setRecurseFilter(this);
return attributes;
+ }
+
+ /**
+ * Determine the file's path.
+ *
+ * @param file the file
+ * @return file's path
+ */
+ protected String determinePath(VirtualFile file)
+ {
+ String path = file.getPathName();
+ if (path.equals(rootPath))
+ path = "";
+ else if (path.startsWith(rootPathWithSlash))
+ path = path.substring(rootPathWithSlash.length());
+ return path;
}
-
+
public boolean accepts(VirtualFile file)
{
+ if (recurseFilter != null)
+ {
+ try
+ {
+ String path = determinePath(file);
+ ResourceContext resource = new ResourceContext(file.toURL(), path, classLoader);
+ if (recurseFilter.accepts(resource) == false)
+ return false;
+ }
+ catch (Exception e)
+ {
+ throw new Error("Error accepting " + file, e);
+ }
+ }
+
// This is our current root
if (file.equals(root))
return true;
@@ -169,11 +206,7 @@
return;
// Determine the resource name
- String path = file.getPathName();
- if (path.equals(rootPath))
- path = "";
- else if (path.startsWith(rootPathWithSlash))
- path = path.substring(rootPathWithSlash.length());
+ String path = determinePath(file);
// Check for inclusions/exclusions
if (included != null && included.matchesResourcePath(path) == false)
Modified: projects/jboss-cl/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/VFSClassLoaderPolicyModule.java
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/VFSClassLoaderPolicyModule.java 2008-07-19 13:15:01 UTC (rev 76012)
+++ projects/jboss-cl/trunk/classloading-vfs/src/main/org/jboss/classloading/spi/vfs/dependency/VFSClassLoaderPolicyModule.java 2008-07-19 13:35:44 UTC (rev 76013)
@@ -214,7 +214,7 @@
}
@Override
- public void visit(ResourceVisitor visitor, ResourceFilter filter)
+ public void visit(ResourceVisitor visitor, ResourceFilter filter, ResourceFilter recurseFilter)
{
ClassLoader classLoader = getClassLoader();
if (classLoader == null)
@@ -225,7 +225,7 @@
{
ClassFilter included = getIncluded();
ClassFilter excluded = getExcluded();
- VFSResourceVisitor.visit(roots, included, excluded, classLoader, visitor, filter);
+ VFSResourceVisitor.visit(roots, included, excluded, classLoader, visitor, filter, recurseFilter);
}
}
}
Modified: projects/jboss-cl/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/VFSResourceVisitorUnitTestCase.java
===================================================================
--- projects/jboss-cl/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/VFSResourceVisitorUnitTestCase.java 2008-07-19 13:15:01 UTC (rev 76012)
+++ projects/jboss-cl/trunk/classloading-vfs/src/tests/org/jboss/test/classloading/vfs/metadata/test/VFSResourceVisitorUnitTestCase.java 2008-07-19 13:35:44 UTC (rev 76013)
@@ -36,8 +36,8 @@
import org.jboss.classloading.spi.vfs.metadata.VFSClassLoaderFactory;
import org.jboss.classloading.spi.visitor.ClassVisitor;
import org.jboss.classloading.spi.visitor.ResourceContext;
+import org.jboss.classloading.spi.visitor.ResourceFilter;
import org.jboss.classloading.spi.visitor.ResourceVisitor;
-import org.jboss.classloading.spi.visitor.ResourceFilter;
import org.jboss.kernel.spi.deployment.KernelDeployment;
import org.jboss.test.classloading.vfs.metadata.VFSClassLoadingMicrocontainerTest;
import org.jboss.test.classloading.vfs.metadata.support.a.A;
@@ -197,6 +197,91 @@
}
}
+ public void testRecurseFilter() throws Exception
+ {
+ VFSClassLoaderFactory factory = new VFSClassLoaderFactory("test");
+ factory.setRoots(Arrays.asList(System.getProperty("test.dir") + "/support/"));
+ KernelDeployment deployment = install(factory);
+ try
+ {
+ final Set<String> classes = new HashSet<String>();
+ ResourceVisitor visitor = new ClassVisitor()
+ {
+ public void visit(ResourceContext resource)
+ {
+ classes.add(resource.getResourceName());
+ }
+ };
+ ResourceFilter recurseFilter = new ResourceFilter()
+ {
+ public boolean accepts(ResourceContext resource)
+ {
+ return "a".equals(resource.getResourceName());
+ }
+ };
+
+ Module module = assertModule("test:0.0.0");
+ module.visit(visitor, visitor.getFilter(), recurseFilter);
+
+ assertEquals(1, classes.size());
+ assertEquals(aliases.get(classes.iterator().next()), A.class);
+ }
+ finally
+ {
+ undeploy(deployment);
+ }
+ }
+
+ public void testRecurseFilterFromTop() throws Exception
+ {
+ VFSClassLoaderFactory factory = new VFSClassLoaderFactory("test");
+ factory.setRoots(Arrays.asList(getRoot(getClass())));
+ KernelDeployment deployment = install(factory);
+ try
+ {
+ final Set<String> classes = new HashSet<String>();
+ ResourceVisitor visitor = new ResourceVisitor()
+ {
+ public ResourceFilter getFilter()
+ {
+ return new ResourceFilter()
+ {
+ public boolean accepts(ResourceContext resource)
+ {
+ return resource.getResourceName().contains("support");
+ }
+ };
+ }
+
+ public void visit(ResourceContext resource)
+ {
+ classes.add(resource.getClassName());
+ }
+ };
+ final String pathA = ClassLoaderUtils.packageNameToPath(A.class.getName());
+ final int pathAlength = pathA.length();
+ ResourceFilter recurseFilter = new ResourceFilter()
+ {
+ public boolean accepts(ResourceContext resource)
+ {
+ String resourceName = resource.getResourceName();
+ int min = Math.min(resourceName.length(), pathAlength);
+ return pathA.substring(0, min).equals(resourceName.substring(0, min));
+ }
+ };
+
+ Module module = assertModule("test:0.0.0");
+ module.visit(visitor, visitor.getFilter(), recurseFilter);
+
+ assertEquals(1, classes.size());
+ assertEquals(classes.iterator().next(), A.class.getName());
+ }
+ finally
+ {
+ undeploy(deployment);
+ }
+ }
+
protected void visitModule()
{
Module module = assertModule("test:0.0.0");
More information about the jboss-cvs-commits
mailing list