[jboss-cvs] JBossAS SVN: r57719 - in projects/microcontainer/trunk/container/src/main/org/jboss/virtual: . plugins/context

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Oct 18 22:52:27 EDT 2006


Author: scott.stark at jboss.org
Date: 2006-10-18 22:52:24 -0400 (Wed, 18 Oct 2006)
New Revision: 57719

Modified:
   projects/microcontainer/trunk/container/src/main/org/jboss/virtual/VisitorAttributes.java
   projects/microcontainer/trunk/container/src/main/org/jboss/virtual/plugins/context/AbstractVFSContext.java
Log:
Drop the recurse, recurseArchives, isArchive notion in favor of a more general recurseFilter VirtualFileFilter.

Modified: projects/microcontainer/trunk/container/src/main/org/jboss/virtual/VisitorAttributes.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/virtual/VisitorAttributes.java	2006-10-19 01:28:41 UTC (rev 57718)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/virtual/VisitorAttributes.java	2006-10-19 02:52:24 UTC (rev 57719)
@@ -25,21 +25,25 @@
  * Attributes used when visiting a virtual file system
  * 
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @author Scott.Stark at jboss.org
  * @version $Revision: 1.1 $
  */
 public class VisitorAttributes
 {
-   /** The default attributes */
+   /** A VirtualFileFilter than accepts any file */
+   public static final AcceptAnyFilter RECURSE_ALL = new AcceptAnyFilter();
+
+   /** The default attributes - visit nothing? */
    public static final VisitorAttributes DEFAULT = new ImmutableVisitorAttributes();
 
-   /** Leaves only */
-   public static final VisitorAttributes LEAVES_ONLY = new ImmutableVisitorAttributes(true, false);
+   /** Visit leaves only and do not recurse non-leaf files */
+   public static final VisitorAttributes LEAVES_ONLY = new ImmutableVisitorAttributes(true, null);
 
-   /** Recurse */
-   public static final VisitorAttributes RECURSE = new ImmutableVisitorAttributes(false, true);
+   /** Recurse and visit all non-leaf files */
+   public static final VisitorAttributes RECURSE = new ImmutableVisitorAttributes(false, RECURSE_ALL);
 
-   /** Recurse but only visit leaves */
-   public static final VisitorAttributes RECURSE_LEAVES_ONLY = new ImmutableVisitorAttributes(true, true);
+   /** Recurse all non-leaf files but only visit leaves */
+   public static final VisitorAttributes RECURSE_LEAVES_ONLY = new ImmutableVisitorAttributes(true, RECURSE_ALL);
    
    /** Whether to include the root */
    private boolean includeRoot;
@@ -47,28 +51,15 @@
    /** Whether to only visit leaves */
    private boolean leavesOnly;
 
-   /** Whether to recurse */
-   private boolean recurse;
-
    /** Whether to ignore individual file errors */
    private boolean ignoreErrors;
 
    /** Whether to include hidden files */
    private boolean includeHidden;
 
-   /** Whether to recurse archives or not */
-   private boolean recurseArchives;
+   /** A filter used to control whether a non-leaf is recursive visited */
+   private VirtualFileFilter recurseFilter;
 
-   public boolean isRecurseArchives()
-   {
-      return recurseArchives;
-   }
-
-   public void setRecurseArchives(boolean recurseArchives)
-   {
-      this.recurseArchives = recurseArchives;
-   }
-
    /**
     * Whether to visit leaves only<p>
     * 
@@ -93,26 +84,39 @@
    }
 
    /**
-    * Whether to recurse<p>
+    * Whether to recurse into the non-leaf file<p>. If there is a recurse
+    * filter then the result will by its accepts(file) value.
     * 
     * Default: false
     * 
-    * @return the recurse.
+    * @return the recurse flag.
     */
-   public boolean isRecurse()
+   public boolean isRecurse(VirtualFile file)
    {
+      boolean recurse = false;
+      if( recurseFilter != null )
+         recurse = recurseFilter.accepts(file);
       return recurse;
    }
 
    /**
-    * Set the recurse.
+    * Get the recurse filter.
+    * @return the current recurse filter.
+    */
+   public VirtualFileFilter getRecurseFilter()
+   {
+      return recurseFilter;
+   }
+
+   /**
+    * Set the recurse filter.
     * 
-    * @param recurse the recurse.
+    * @param filter - the recurse filter.
     * @throws IllegalStateException if you attempt to modify one of the preconfigured static values of this class
     */
-   public void setRecurse(boolean recurse)
+   public void setRecurseFilter(VirtualFileFilter filter)
    {
-      this.recurse = recurse;
+      this.recurseFilter = filter;
    }
 
    /**
@@ -184,6 +188,13 @@
       this.includeHidden = includeHidden;
    }
 
+   private static class AcceptAnyFilter implements VirtualFileFilter
+   {
+      public boolean accepts(VirtualFile file)
+      {
+         return true;
+      }      
+   }
    /**
     * Immutable version of the attribues
     */
@@ -200,12 +211,12 @@
        * Create a new ImmutableVirtualFileVisitorAttributes.
        * 
        * @param leavesOnly whether to visit leaves only 
-       * @param recurse whether to recurse
+       * @param recurseFilter - filter which controls whether to recurse
        */
-      public ImmutableVisitorAttributes(boolean leavesOnly, boolean recurse)
+      public ImmutableVisitorAttributes(boolean leavesOnly, VirtualFileFilter recurseFilter)
       {
          super.setLeavesOnly(leavesOnly);
-         super.setRecurse(recurse);
+         super.setRecurseFilter(recurseFilter);
       }
       
       @Override
@@ -221,7 +232,7 @@
       }
 
       @Override
-      public void setRecurse(boolean recurse)
+      public void setRecurseFilter(VirtualFileFilter filter)
       {
          throw new IllegalStateException("The preconfigured attributes are immutable");
       }

Modified: projects/microcontainer/trunk/container/src/main/org/jboss/virtual/plugins/context/AbstractVFSContext.java
===================================================================
--- projects/microcontainer/trunk/container/src/main/org/jboss/virtual/plugins/context/AbstractVFSContext.java	2006-10-19 01:28:41 UTC (rev 57718)
+++ projects/microcontainer/trunk/container/src/main/org/jboss/virtual/plugins/context/AbstractVFSContext.java	2006-10-19 02:52:24 UTC (rev 57719)
@@ -31,6 +31,8 @@
 import org.jboss.logging.Logger;
 import org.jboss.virtual.VFS;
 import org.jboss.virtual.VFSUtils;
+import org.jboss.virtual.VirtualFile;
+import org.jboss.virtual.VirtualFileFilter;
 import org.jboss.virtual.VisitorAttributes;
 import org.jboss.virtual.spi.VFSContext;
 import org.jboss.virtual.spi.VirtualFileHandler;
@@ -126,12 +128,11 @@
       VisitorAttributes attributes = visitor.getAttributes();
       boolean includeRoot = attributes.isIncludeRoot();
       boolean leavesOnly = attributes.isLeavesOnly();
-      boolean recurse = attributes.isRecurse();
       boolean ignoreErrors = attributes.isIgnoreErrors();
       boolean includeHidden = attributes.isIncludeHidden();
-      boolean recurseArchives = attributes.isRecurseArchives();
-
-      visit(handler, visitor, includeRoot, leavesOnly, recurse, ignoreErrors, includeHidden, recurseArchives);
+      VirtualFileFilter recurseFilter = attributes.getRecurseFilter();
+      visit(handler, visitor, includeRoot, leavesOnly, ignoreErrors,
+            includeHidden, recurseFilter);
    }
 
    /**
@@ -142,12 +143,14 @@
     * @param visitor the visitor
     * @param includeRoot whether to visit the root
     * @param leavesOnly whether to visit leaves only
-    * @param recurse whether to recurse
     * @param ignoreErrors whether to ignore errors
     * @param includeHidden whether to include hidden files
     * @throws IOException for any problem accessing the virtual file system
     */
-   protected void visit(VirtualFileHandler handler, VirtualFileHandlerVisitor visitor, boolean includeRoot, boolean leavesOnly, boolean recurse, boolean ignoreErrors, boolean includeHidden, boolean recurseArchives) throws IOException
+   protected void visit(VirtualFileHandler handler, VirtualFileHandlerVisitor visitor,
+         boolean includeRoot, boolean leavesOnly, boolean ignoreErrors,
+         boolean includeHidden, VirtualFileFilter recurseFilter)
+      throws IOException
    {
       // Visit the root when asked
       if (includeRoot)
@@ -189,20 +192,13 @@
             log.trace("Skipping non-leaf file: "+child);
          }
 
-         boolean allowArchives = true;
-         if (child.isArchive() && recurseArchives == false)
-         {
-            allowArchives = false;
-            if( trace )
-               log.trace("Won't scan archive: "+child);
-         }
-
          // Recurse when asked
-         if (recurse && isLeaf == false && allowArchives)
+         VirtualFile file = child.getVirtualFile();
+         if ( isLeaf == false && recurseFilter != null && recurseFilter.accepts(file))
          {
             try
             {
-               visit(child, visitor, false, leavesOnly, recurse, ignoreErrors, includeHidden, recurseArchives);
+               visit(child, visitor, false, leavesOnly, ignoreErrors, includeHidden, recurseFilter);
             }
             catch (StackOverflowError e)
             {




More information about the jboss-cvs-commits mailing list