[jboss-cvs] JBossAS SVN: r91904 - 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 19:33:06 EDT 2009


Author: david.lloyd at jboss.com
Date: 2009-07-31 19:33:05 -0400 (Fri, 31 Jul 2009)
New Revision: 91904

Modified:
   projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/VirtualFile.java
Log:
Try to get closer to the original visitor logic

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:16:59 UTC (rev 91903)
+++ projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/virtual/VirtualFile.java	2009-07-31 23:33:05 UTC (rev 91904)
@@ -269,6 +269,9 @@
     */
    public List<VirtualFile> getChildren() throws IOException
    {
+      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);
@@ -295,11 +298,18 @@
       if (! isDirectory())
          return Collections.emptyList();
 
-      if (filter == null)
-         filter = MatchAllVirtualFileFilter.INSTANCE;
-      FilterVirtualFileVisitor visitor = new FilterVirtualFileVisitor(filter, null);
-      visit(visitor);
-      return visitor.getMatched();
+      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;
    }
 
    /**
@@ -348,10 +358,15 @@
     */
    public void visit(VirtualFileVisitor visitor) throws IOException
    {
+      visit(visitor, true);
+   }
+
+   private void visit(VirtualFileVisitor visitor, boolean root) throws IOException
+   {
       final VisitorAttributes visitorAttributes = visitor.getAttributes();
       if (isDirectory())
       {
-         if (! visitorAttributes.isLeavesOnly())
+         if (! visitorAttributes.isLeavesOnly() || visitorAttributes.isIncludeRoot() && root)
          {
             visitor.visit(this);
          }
@@ -359,7 +374,7 @@
          {
             for (VirtualFile virtualFile : getChildren())
             {
-               virtualFile.visit(visitor);
+               virtualFile.visit(visitor, false);
             }
          }
       } else {




More information about the jboss-cvs-commits mailing list