[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