[jboss-cvs] JBossAS SVN: r103683 - projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/filter.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Apr 8 05:02:46 EDT 2010
Author: alesj
Date: 2010-04-08 05:02:45 -0400 (Thu, 08 Apr 2010)
New Revision: 103683
Modified:
projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/filter/ScanningMetaDataRecurseFilter.java
Log:
Smarter recurse filter.
Modified: projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/filter/ScanningMetaDataRecurseFilter.java
===================================================================
--- projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/filter/ScanningMetaDataRecurseFilter.java 2010-04-08 08:49:18 UTC (rev 103682)
+++ projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/filter/ScanningMetaDataRecurseFilter.java 2010-04-08 09:02:45 UTC (rev 103683)
@@ -22,45 +22,114 @@
package org.jboss.scanning.plugins.filter;
import java.net.URL;
-import java.util.List;
+import java.util.*;
import org.jboss.classloading.spi.visitor.ResourceContext;
import org.jboss.classloading.spi.visitor.ResourceFilter;
+import org.jboss.scanning.spi.metadata.PathEntryMetaData;
import org.jboss.scanning.spi.metadata.PathMetaData;
import org.jboss.scanning.spi.metadata.ScanningMetaData;
+import org.jboss.vfs.util.PathTokenizer;
/**
* Simple recurse filter.
- * It searches for path substring in url string.
+ *
+ * It searches for path substring in url string,
+ * and tries to match the tree structure as far as it goes.
*/
public class ScanningMetaDataRecurseFilter implements ResourceFilter
{
- private ScanningMetaData smd;
+ private Set<Node> roots;
public ScanningMetaDataRecurseFilter(ScanningMetaData smd)
{
if (smd == null)
throw new IllegalArgumentException("Null metadata");
- this.smd = smd;
+
+ List<PathMetaData> paths = smd.getPaths();
+ if (paths != null && paths.isEmpty() == false)
+ {
+ roots = new HashSet<Node>();
+ for (PathMetaData pmd : paths)
+ {
+ Node pathNode = new Node(pmd.getPathName());
+ roots.add(pathNode);
+ Set<PathEntryMetaData> includes = pmd.getIncludes();
+ if (includes != null && includes.isEmpty() == false)
+ {
+ for (PathEntryMetaData pemd : includes)
+ {
+ String name = pemd.getName();
+ String[] tokens = name.split("\\.");
+ Node current = pathNode;
+ for (String token : tokens)
+ current = current.addChild(token);
+ }
+ }
+ }
+ }
}
public boolean accepts(ResourceContext resource)
{
+ if (roots == null)
+ return false;
+
URL url = resource.getUrl();
String urlString = url.toExternalForm();
- List<PathMetaData> paths = smd.getPaths();
- if (paths != null && paths.isEmpty() == false)
+ for (Node root : roots)
{
- for (PathMetaData pmd : paths)
+ if (urlString.contains(root.value))
{
- String name = pmd.getPathName();
- // url contains path
- if (urlString.contains(name))
+ String resourceName = resource.getResourceName();
+ List<String> tokens = PathTokenizer.getTokens(resourceName);
+ Node current = root;
+ // let's try to walk some tree path
+ for (String token : tokens)
{
- return true;
+ current = current.getChild(token);
+ // no fwd path
+ if (current == null)
+ return false;
}
+ return true;
}
}
return false;
}
+
+ private static class Node
+ {
+ private String value;
+ private Map<String, Node> children;
+
+ private Node(String value)
+ {
+ this.value = value;
+ }
+
+ public Node addChild(String value)
+ {
+ if (children == null)
+ children = new HashMap<String, Node>();
+
+ Node child = children.get(value);
+ if (child == null)
+ {
+ child = new Node(value);
+ children.put(value, child);
+ }
+ return child;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+
+ public Node getChild(String child)
+ {
+ return children != null ? children.get(child) : null;
+ }
+ }
}
More information about the jboss-cvs-commits
mailing list