diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/types/FileSet.java b/proposal/myrmidon/src/main/org/apache/tools/ant/types/FileSet.java index 737f9b2e3..10dbab09d 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/types/FileSet.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/types/FileSet.java @@ -8,11 +8,9 @@ package org.apache.tools.ant.types; import java.io.File; -import java.util.ArrayList; import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.framework.Pattern; import org.apache.myrmidon.framework.PatternSet; -import org.apache.tools.ant.ProjectComponent; /** * Moved out of MatchingTask to make it a standalone object that could be @@ -27,14 +25,11 @@ import org.apache.tools.ant.ProjectComponent; * @author Magesh Umasankar */ public class FileSet - extends ProjectComponent - implements Cloneable { - private PatternSet m_defaultPatterns = new PatternSet(); - private ArrayList m_additionalPatterns = new ArrayList(); + private File m_dir; + private PatternSet m_patternSet = new PatternSet(); private boolean m_useDefaultExcludes = true; private boolean m_isCaseSensitive = true; - private File m_dir; /** * Sets case sensitivity of the file system @@ -66,102 +61,58 @@ public class FileSet */ public void setExcludes( final String excludes ) { - m_defaultPatterns.setExcludes( excludes ); + m_patternSet.setExcludes( excludes ); } /** - * Sets the set of include patterns. Patterns may be separated by a comma or - * a space. - * - * @param includes the string containing the include patterns + * add a name entry on the exclude list */ - public void setIncludes( final String includes ) + public void addExclude( final Pattern pattern ) { - m_defaultPatterns.setIncludes( includes ); + m_patternSet.addExclude( pattern ); } - public void setupDirectoryScanner( final FileScanner ds ) - throws TaskException + /** + * add a name entry on the include list + */ + public void addInclude( final Pattern pattern ) { - if( null == ds ) - { - final String message = "ds cannot be null"; - throw new IllegalArgumentException( message ); - } - - ds.setBasedir( m_dir ); - - final int size = m_additionalPatterns.size(); - for( int i = 0; i < size; i++ ) - { - final Object o = m_additionalPatterns.get( i ); - m_defaultPatterns.append( (PatternSet)o ); - } - - final String message = "FileSet: Setup file scanner in dir " + - m_dir + " with " + m_defaultPatterns; - getLogger().debug( message ); - - ds.setIncludes( m_defaultPatterns.getIncludePatterns( getContext() ) ); - ds.setExcludes( m_defaultPatterns.getExcludePatterns( getContext() ) ); - if( m_useDefaultExcludes ) - { - ds.addDefaultExcludes(); - } - ds.setCaseSensitive( m_isCaseSensitive ); + m_patternSet.addInclude( pattern ); } - public File getDir() + public void addPatternSet( final PatternSet set ) { - return m_dir; + m_patternSet.append( set ); } /** - * Returns the directory scanner needed to access the files to process. + * Sets the set of include patterns. Patterns may be separated by a comma or + * a space. + * + * @param includes the string containing the include patterns */ - public DirectoryScanner getDirectoryScanner() - throws TaskException + public void setIncludes( final String includes ) { - if( m_dir == null ) - { - throw new TaskException( "No directory specified for fileset." ); - } - - if( !m_dir.exists() ) - { - throw new TaskException( m_dir.getAbsolutePath() + " not found." ); - } - if( !m_dir.isDirectory() ) - { - throw new TaskException( m_dir.getAbsolutePath() + " is not a directory." ); - } + m_patternSet.setIncludes( includes ); + } - final DirectoryScanner scanner = new DirectoryScanner(); - setupDirectoryScanner( scanner ); - scanner.scan(); - return scanner; + public final PatternSet getPatternSet() + { + return m_patternSet; } - /** - * add a name entry on the exclude list - */ - public void addExclude( final Pattern pattern ) + public boolean isCaseSensitive() { - m_defaultPatterns.addExclude( pattern ); + return m_isCaseSensitive; } - /** - * add a name entry on the include list - */ - public void addInclude( final Pattern pattern ) + public boolean useDefaultExcludes() { - m_defaultPatterns.addInclude( pattern ); + return m_useDefaultExcludes; } - public PatternSet createPatternSet() + public File getDir() { - final PatternSet patterns = new PatternSet(); - m_additionalPatterns.add( patterns ); - return patterns; + return m_dir; } } diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/types/Path.java b/proposal/myrmidon/src/main/org/apache/tools/ant/types/Path.java index 545097a52..96bc86992 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/types/Path.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/types/Path.java @@ -205,7 +205,7 @@ public class Path else if( o instanceof FileSet ) { final FileSet fs = (FileSet)o; - final DirectoryScanner ds = fs.getDirectoryScanner(); + final DirectoryScanner ds = ScannerUtil.getDirectoryScanner( fs ); final String[] s = ds.getIncludedFiles(); final File dir = fs.getDir(); for( int j = 0; j < s.length; j++ ) diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/types/ScannerUtil.java b/proposal/myrmidon/src/main/org/apache/tools/ant/types/ScannerUtil.java index 500a1bf32..d23237a50 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/types/ScannerUtil.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/types/ScannerUtil.java @@ -10,6 +10,9 @@ package org.apache.tools.ant.types; import java.io.File; import java.util.ArrayList; import java.util.StringTokenizer; +import org.apache.myrmidon.api.TaskContext; +import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.framework.PatternUtil; /** * @@ -524,4 +527,57 @@ public class ScannerUtil return true; } } + + public static void setupDirectoryScanner( final FileSet set, + final FileScanner scanner, + final TaskContext context ) + throws TaskException + { + if( null == scanner ) + { + final String message = "ds cannot be null"; + throw new IllegalArgumentException( message ); + } + + scanner.setBasedir( set.getDir() ); + + final String message = "FileSet: Setup file scanner in dir " + + set.getDir() + " with " + set.getPatternSet(); + //getLogger().debug( message ); + + scanner.setIncludes( PatternUtil.getIncludePatterns( set.getPatternSet(), context ) ); + scanner.setExcludes( PatternUtil.getExcludePatterns( set.getPatternSet(), context ) ); + if( set.useDefaultExcludes() ) + { + scanner.addDefaultExcludes(); + } + scanner.setCaseSensitive( set.isCaseSensitive() ); + } + + public static DirectoryScanner getDirectoryScanner( final FileSet set ) + throws TaskException + { + final File dir = set.getDir(); + if( null == dir ) + { + final String message = "No directory specified for fileset."; + throw new TaskException( message ); + } + + if( !dir.exists() ) + { + final String message = dir.getAbsolutePath() + " not found."; + throw new TaskException( message ); + } + if( !dir.isDirectory() ) + { + final String message = dir.getAbsolutePath() + " is not a directory."; + throw new TaskException( message ); + } + + final DirectoryScanner scanner = new DirectoryScanner(); + setupDirectoryScanner( set, scanner, null ); + scanner.scan(); + return scanner; + } } diff --git a/proposal/myrmidon/src/main/org/apache/tools/ant/types/ZipFileSet.java b/proposal/myrmidon/src/main/org/apache/tools/ant/types/ZipFileSet.java index fffd38f91..bb78420ca 100644 --- a/proposal/myrmidon/src/main/org/apache/tools/ant/types/ZipFileSet.java +++ b/proposal/myrmidon/src/main/org/apache/tools/ant/types/ZipFileSet.java @@ -9,6 +9,7 @@ package org.apache.tools.ant.types; import java.io.File; import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.api.TaskContext; import org.apache.tools.ant.Project; /** @@ -103,16 +104,16 @@ public class ZipFileSet { if( srcFile != null ) { - ZipScanner zs = new ZipScanner(); + final ZipScanner zs = new ZipScanner(); zs.setSrc( srcFile ); super.setDir( p.getBaseDir() ); - setupDirectoryScanner( zs ); + ScannerUtil.setupDirectoryScanner( this, zs, null ); zs.init(); return zs; } else { - return super.getDirectoryScanner(); + return ScannerUtil.getDirectoryScanner( this ); } } diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/FileSet.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/FileSet.java index 737f9b2e3..10dbab09d 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/FileSet.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/FileSet.java @@ -8,11 +8,9 @@ package org.apache.tools.ant.types; import java.io.File; -import java.util.ArrayList; import org.apache.myrmidon.api.TaskException; import org.apache.myrmidon.framework.Pattern; import org.apache.myrmidon.framework.PatternSet; -import org.apache.tools.ant.ProjectComponent; /** * Moved out of MatchingTask to make it a standalone object that could be @@ -27,14 +25,11 @@ import org.apache.tools.ant.ProjectComponent; * @author Magesh Umasankar */ public class FileSet - extends ProjectComponent - implements Cloneable { - private PatternSet m_defaultPatterns = new PatternSet(); - private ArrayList m_additionalPatterns = new ArrayList(); + private File m_dir; + private PatternSet m_patternSet = new PatternSet(); private boolean m_useDefaultExcludes = true; private boolean m_isCaseSensitive = true; - private File m_dir; /** * Sets case sensitivity of the file system @@ -66,102 +61,58 @@ public class FileSet */ public void setExcludes( final String excludes ) { - m_defaultPatterns.setExcludes( excludes ); + m_patternSet.setExcludes( excludes ); } /** - * Sets the set of include patterns. Patterns may be separated by a comma or - * a space. - * - * @param includes the string containing the include patterns + * add a name entry on the exclude list */ - public void setIncludes( final String includes ) + public void addExclude( final Pattern pattern ) { - m_defaultPatterns.setIncludes( includes ); + m_patternSet.addExclude( pattern ); } - public void setupDirectoryScanner( final FileScanner ds ) - throws TaskException + /** + * add a name entry on the include list + */ + public void addInclude( final Pattern pattern ) { - if( null == ds ) - { - final String message = "ds cannot be null"; - throw new IllegalArgumentException( message ); - } - - ds.setBasedir( m_dir ); - - final int size = m_additionalPatterns.size(); - for( int i = 0; i < size; i++ ) - { - final Object o = m_additionalPatterns.get( i ); - m_defaultPatterns.append( (PatternSet)o ); - } - - final String message = "FileSet: Setup file scanner in dir " + - m_dir + " with " + m_defaultPatterns; - getLogger().debug( message ); - - ds.setIncludes( m_defaultPatterns.getIncludePatterns( getContext() ) ); - ds.setExcludes( m_defaultPatterns.getExcludePatterns( getContext() ) ); - if( m_useDefaultExcludes ) - { - ds.addDefaultExcludes(); - } - ds.setCaseSensitive( m_isCaseSensitive ); + m_patternSet.addInclude( pattern ); } - public File getDir() + public void addPatternSet( final PatternSet set ) { - return m_dir; + m_patternSet.append( set ); } /** - * Returns the directory scanner needed to access the files to process. + * Sets the set of include patterns. Patterns may be separated by a comma or + * a space. + * + * @param includes the string containing the include patterns */ - public DirectoryScanner getDirectoryScanner() - throws TaskException + public void setIncludes( final String includes ) { - if( m_dir == null ) - { - throw new TaskException( "No directory specified for fileset." ); - } - - if( !m_dir.exists() ) - { - throw new TaskException( m_dir.getAbsolutePath() + " not found." ); - } - if( !m_dir.isDirectory() ) - { - throw new TaskException( m_dir.getAbsolutePath() + " is not a directory." ); - } + m_patternSet.setIncludes( includes ); + } - final DirectoryScanner scanner = new DirectoryScanner(); - setupDirectoryScanner( scanner ); - scanner.scan(); - return scanner; + public final PatternSet getPatternSet() + { + return m_patternSet; } - /** - * add a name entry on the exclude list - */ - public void addExclude( final Pattern pattern ) + public boolean isCaseSensitive() { - m_defaultPatterns.addExclude( pattern ); + return m_isCaseSensitive; } - /** - * add a name entry on the include list - */ - public void addInclude( final Pattern pattern ) + public boolean useDefaultExcludes() { - m_defaultPatterns.addInclude( pattern ); + return m_useDefaultExcludes; } - public PatternSet createPatternSet() + public File getDir() { - final PatternSet patterns = new PatternSet(); - m_additionalPatterns.add( patterns ); - return patterns; + return m_dir; } } diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/Path.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/Path.java index 545097a52..96bc86992 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/Path.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/Path.java @@ -205,7 +205,7 @@ public class Path else if( o instanceof FileSet ) { final FileSet fs = (FileSet)o; - final DirectoryScanner ds = fs.getDirectoryScanner(); + final DirectoryScanner ds = ScannerUtil.getDirectoryScanner( fs ); final String[] s = ds.getIncludedFiles(); final File dir = fs.getDir(); for( int j = 0; j < s.length; j++ ) diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/ScannerUtil.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/ScannerUtil.java index 500a1bf32..d23237a50 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/ScannerUtil.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/ScannerUtil.java @@ -10,6 +10,9 @@ package org.apache.tools.ant.types; import java.io.File; import java.util.ArrayList; import java.util.StringTokenizer; +import org.apache.myrmidon.api.TaskContext; +import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.framework.PatternUtil; /** * @@ -524,4 +527,57 @@ public class ScannerUtil return true; } } + + public static void setupDirectoryScanner( final FileSet set, + final FileScanner scanner, + final TaskContext context ) + throws TaskException + { + if( null == scanner ) + { + final String message = "ds cannot be null"; + throw new IllegalArgumentException( message ); + } + + scanner.setBasedir( set.getDir() ); + + final String message = "FileSet: Setup file scanner in dir " + + set.getDir() + " with " + set.getPatternSet(); + //getLogger().debug( message ); + + scanner.setIncludes( PatternUtil.getIncludePatterns( set.getPatternSet(), context ) ); + scanner.setExcludes( PatternUtil.getExcludePatterns( set.getPatternSet(), context ) ); + if( set.useDefaultExcludes() ) + { + scanner.addDefaultExcludes(); + } + scanner.setCaseSensitive( set.isCaseSensitive() ); + } + + public static DirectoryScanner getDirectoryScanner( final FileSet set ) + throws TaskException + { + final File dir = set.getDir(); + if( null == dir ) + { + final String message = "No directory specified for fileset."; + throw new TaskException( message ); + } + + if( !dir.exists() ) + { + final String message = dir.getAbsolutePath() + " not found."; + throw new TaskException( message ); + } + if( !dir.isDirectory() ) + { + final String message = dir.getAbsolutePath() + " is not a directory."; + throw new TaskException( message ); + } + + final DirectoryScanner scanner = new DirectoryScanner(); + setupDirectoryScanner( set, scanner, null ); + scanner.scan(); + return scanner; + } } diff --git a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/ZipFileSet.java b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/ZipFileSet.java index fffd38f91..bb78420ca 100644 --- a/proposal/myrmidon/src/todo/org/apache/tools/ant/types/ZipFileSet.java +++ b/proposal/myrmidon/src/todo/org/apache/tools/ant/types/ZipFileSet.java @@ -9,6 +9,7 @@ package org.apache.tools.ant.types; import java.io.File; import org.apache.myrmidon.api.TaskException; +import org.apache.myrmidon.api.TaskContext; import org.apache.tools.ant.Project; /** @@ -103,16 +104,16 @@ public class ZipFileSet { if( srcFile != null ) { - ZipScanner zs = new ZipScanner(); + final ZipScanner zs = new ZipScanner(); zs.setSrc( srcFile ); super.setDir( p.getBaseDir() ); - setupDirectoryScanner( zs ); + ScannerUtil.setupDirectoryScanner( this, zs, null ); zs.init(); return zs; } else { - return super.getDirectoryScanner(); + return ScannerUtil.getDirectoryScanner( this ); } }