Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

org.apache.webdav.ant
Class Scanner  view Scanner download Scanner.java

java.lang.Object
  extended byorg.apache.webdav.ant.Scanner
Direct Known Subclasses:
CollectionScanner

public abstract class Scanner
extends java.lang.Object

Class for scanning a directory for files/directories that match a certain criteria.

These criteria consist of a set of include and exclude patterns. With these patterns, you can select which files you want to have included, and which files you want to have excluded.

The idea is simple. A given directory is recursively scanned for all files and directories. Each file/directory is matched against a set of include and exclude patterns. Only files/directories that match at least one pattern of the include pattern list, and don't match a pattern of the exclude pattern list will be placed in the list of files/directories found.

When no list of include patterns is supplied, "**" will be used, which means that everything will be matched. When no list of exclude patterns is supplied, an empty list is used, such that nothing will be excluded.

The pattern matching is done as follows: The name to be matched is split up in path segments. A path segment is the name of a directory or file, which is bounded by File.separator ('/' under UNIX, '\' under Windows). E.g. "abc/def/ghi/xyz.java" is split up in the segments "abc", "def", "ghi" and "xyz.java". The same is done for the pattern against which should be matched.

Then the segments of the name and the pattern will be matched against each other. When '**' is used for a path segment in the pattern, then it matches zero or more path segments of the name.

There are special case regarding the use of File.separators at the beginningof the pattern and the string to match:
When a pattern starts with a File.separator, the string to match must also start with a File.separator. When a pattern does not start with a File.separator, the string to match may not start with a File.separator. When one of these rules is not obeyed, the string will not match.

When a name path segment is matched against a pattern path segment, the following special characters can be used: '*' matches zero or more characters, '?' matches one character.

Examples:

"**\*.class" matches all .class files/dirs in a directory tree.

"test\a??.java" matches all files/dirs which start with an 'a', then two more characters and then ".java", in a directory called test.

"**" matches everything in a directory tree.

"**\test\**\XYZ*" matches all files/dirs that start with "XYZ" and where there is a parent directory called test (e.g. "abc\test\def\ghi\XYZ123").

Example of usage:

   String[] includes = {"*\*\*.class"};
   String[] excludes = {"modules\\\*\**"};
   ds.setIncludes(includes);
   ds.setExcludes(excludes);
   ds.setBasedir(new File("test"));
   ds.scan();

   System.out.println("FILES:");
   String[] files = ds.getIncludedFiles();
   for (int i = 0; i < files.length;i++) {
     System.out.println(files[i]);
   }
 
This will scan a directory called test for .class files, but excludes all .class files in all directories under a directory called "modules"


Field Summary
protected  java.util.List dirsExcluded
          The files that where found and matched at least one includes, and also matched at least one excludes.
protected  java.util.List dirsIncluded
          The directories that where found and matched at least one includes, and matched no excludes.
protected  java.util.List dirsNotIncluded
          The directories that where found and did not match any includes.
private  java.util.List excludes
          The patterns for the files that should be excluded.
protected  java.util.List filesExcluded
          The files that where found and matched at least one includes, and also matched at least one excludes.
protected  java.util.List filesIncluded
          The files that where found and matched at least one includes, and matched no excludes.
protected  java.util.List filesNotIncluded
          The files that where found and did not match any includes.
private  java.util.List includes
          The patterns for the files that should be included.
protected  boolean isCaseSensitive
           
protected static java.lang.String SEPARATOR
           
protected static char SEPARATOR_CHAR
           
 
Constructor Summary
Scanner()
          Constructor.
 
Method Summary
 void addExcludes(java.lang.String[] excludes)
           
 void addIncludes(java.lang.String[] includes)
           
 java.lang.String[] getExcludedDirectories()
          Get the names of the directories that matched at least one of the include patterns, an matched also at least one of the exclude patterns.
 java.lang.String[] getExcludedFiles()
          Get the names of the files that matched at least one of the include patterns, an matched also at least one of the exclude patterns.
 java.lang.String[] getIncludedDirectories()
          Get the names of the directories that matched at least one of the include patterns, an matched none of the exclude patterns.
 java.lang.String[] getIncludedFiles()
          Get the names of the files that matched at least one of the include patterns, an matched none of the exclude patterns.
 java.lang.String[] getNotIncludedDirectories()
          Get the names of the directories that matched at none of the include patterns.
 java.lang.String[] getNotIncludedFiles()
          Get the names of the files that matched at none of the include patterns.
protected  boolean isExcluded(java.lang.String name)
          Tests whether a name matches against at least one exclude pattern.
protected  boolean isIncluded(java.lang.String name)
          Tests whether a name matches against at least one include pattern.
static boolean match(java.lang.String pattern, java.lang.String str, boolean isCaseSensitive)
          Tests whether or not a string matches against a pattern.
static boolean matchPath(java.lang.String pattern, java.lang.String str, boolean isCaseSensitive)
          Tests whether or not a given path matches a given pattern.
private  java.lang.String noramlizePattern(java.lang.String pattern)
           
abstract  void scan()
          Scans the base directory for files that match at least one include pattern, and don't match any exclude patterns.
 void setCaseSensitive(boolean val)
           
 void setExcludes(java.lang.String[] excludes)
          Sets the set of exclude patterns to use.
 void setIncludes(java.lang.String[] includes)
          Sets the set of include patterns to use.
private static java.lang.String[] tokenizePathAsArray(java.lang.String path)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SEPARATOR

protected static final java.lang.String SEPARATOR
See Also:
Constant Field Values

SEPARATOR_CHAR

protected static final char SEPARATOR_CHAR
See Also:
Constant Field Values

includes

private java.util.List includes
The patterns for the files that should be included.


excludes

private java.util.List excludes
The patterns for the files that should be excluded.


filesIncluded

protected java.util.List filesIncluded
The files that where found and matched at least one includes, and matched no excludes.


filesNotIncluded

protected java.util.List filesNotIncluded
The files that where found and did not match any includes.


filesExcluded

protected java.util.List filesExcluded
The files that where found and matched at least one includes, and also matched at least one excludes.


dirsIncluded

protected java.util.List dirsIncluded
The directories that where found and matched at least one includes, and matched no excludes.


dirsNotIncluded

protected java.util.List dirsNotIncluded
The directories that where found and did not match any includes.


dirsExcluded

protected java.util.List dirsExcluded
The files that where found and matched at least one includes, and also matched at least one excludes.


isCaseSensitive

protected boolean isCaseSensitive
Constructor Detail

Scanner

public Scanner()
Constructor.

Method Detail

setIncludes

public void setIncludes(java.lang.String[] includes)
Sets the set of include patterns to use. All '/' and '\' characters are replaced by File.separatorChar. So the separator used need not match File.separatorChar.

When a pattern ends with a '/' or '\', "**" is appended.


addIncludes

public void addIncludes(java.lang.String[] includes)

setExcludes

public void setExcludes(java.lang.String[] excludes)
Sets the set of exclude patterns to use. All '/' and '\' characters are replaced by File.separatorChar. So the separator used need not match File.separatorChar.

When a pattern ends with a '/' or '\', "**" is appended.


addExcludes

public void addExcludes(java.lang.String[] excludes)

noramlizePattern

private java.lang.String noramlizePattern(java.lang.String pattern)

setCaseSensitive

public void setCaseSensitive(boolean val)

scan

public abstract void scan()
Scans the base directory for files that match at least one include pattern, and don't match any exclude patterns.


isIncluded

protected boolean isIncluded(java.lang.String name)
Tests whether a name matches against at least one include pattern.


isExcluded

protected boolean isExcluded(java.lang.String name)
Tests whether a name matches against at least one exclude pattern.


getIncludedFiles

public java.lang.String[] getIncludedFiles()
Get the names of the files that matched at least one of the include patterns, an matched none of the exclude patterns. The names are relative to the basedir.


getNotIncludedFiles

public java.lang.String[] getNotIncludedFiles()
Get the names of the files that matched at none of the include patterns. The names are relative to the basedir.


getExcludedFiles

public java.lang.String[] getExcludedFiles()
Get the names of the files that matched at least one of the include patterns, an matched also at least one of the exclude patterns. The names are relative to the basedir.


getIncludedDirectories

public java.lang.String[] getIncludedDirectories()
Get the names of the directories that matched at least one of the include patterns, an matched none of the exclude patterns. The names are relative to the basedir.


getNotIncludedDirectories

public java.lang.String[] getNotIncludedDirectories()
Get the names of the directories that matched at none of the include patterns. The names are relative to the basedir.


getExcludedDirectories

public java.lang.String[] getExcludedDirectories()
Get the names of the directories that matched at least one of the include patterns, an matched also at least one of the exclude patterns. The names are relative to the basedir.


match

public static boolean match(java.lang.String pattern,
                            java.lang.String str,
                            boolean isCaseSensitive)
Tests whether or not a string matches against a pattern. The pattern may contain two special characters:
'*' means zero or more characters
'?' means one and only one character


matchPath

public static boolean matchPath(java.lang.String pattern,
                                java.lang.String str,
                                boolean isCaseSensitive)
Tests whether or not a given path matches a given pattern.


tokenizePathAsArray

private static java.lang.String[] tokenizePathAsArray(java.lang.String path)