[jboss-cvs] JBossAS SVN: r91906 - projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jul 31 20:43:23 EDT 2009


Author: jason.greene at jboss.com
Date: 2009-07-31 20:43:22 -0400 (Fri, 31 Jul 2009)
New Revision: 91906

Modified:
   projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/VirtualFile.java
Log:
Fix visitors, switch getChildren() back to visit approach for now, since a filter can force recursion (strange)


Modified: projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/VirtualFile.java
===================================================================
--- projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/VirtualFile.java	2009-07-31 23:36:34 UTC (rev 91905)
+++ projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/VirtualFile.java	2009-08-01 00:43:22 UTC (rev 91906)
@@ -298,18 +298,11 @@
       if (! isDirectory())
          return Collections.emptyList();
 
-      final VFS.Mount mount = vfs.getMount(this);
-      final Set<String> submounts = vfs.getSubmounts(this);
-      final List<String> names = mount.getFileSystem().getDirectoryEntries(mount.getMountPoint(), this);
-      final List<VirtualFile> virtualFiles = new ArrayList<VirtualFile>(names.size() + submounts.size());
-      for (String name : names)
-      {
-         final VirtualFile child = new VirtualFile(vfs, name, this);
-         if (filter.accepts(child))
-            virtualFiles.add(child);
-         submounts.remove(name);
-      }
-      return virtualFiles;
+      if (filter == null)
+         filter = MatchAllVirtualFileFilter.INSTANCE;
+      FilterVirtualFileVisitor visitor = new FilterVirtualFileVisitor(filter, null);
+      visit(visitor);
+      return visitor.getMatched();
    }
 
    /**
@@ -364,21 +357,21 @@
    private void visit(VirtualFileVisitor visitor, boolean root) throws IOException
    {
       final VisitorAttributes visitorAttributes = visitor.getAttributes();
-      if (isDirectory())
-      {
-         if (! visitorAttributes.isLeavesOnly() || visitorAttributes.isIncludeRoot() && root)
-         {
-            visitor.visit(this);
-         }
-         if (visitorAttributes.isRecurse(this))
-         {
-            for (VirtualFile virtualFile : getChildren())
-            {
-               virtualFile.visit(visitor, false);
-            }
-         }
-      } else {
+
+      if (root && visitorAttributes.isIncludeRoot())
          visitor.visit(this);
+
+      if (! isDirectory())
+         return;
+
+      for (VirtualFile child : getChildren())
+      {
+         // Always visit a leaf, and visit directories when leaves only is false
+         if (!child.isDirectory() || !visitorAttributes.isLeavesOnly())
+            visitor.visit(child);
+
+         if (child.isDirectory() && visitorAttributes.isRecurse(child))
+            child.visit(visitor, false);
       }
    }
 




More information about the jboss-cvs-commits mailing list