<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>
  <head>
    <meta http-equiv="Content-Language" content="en-us">
    <link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
    <title>Selectors in Apache Ant</title>
  </head>

  <body>
    <h2>Selectors</h2>

    <p>Selectors are a mechanism whereby the files that make up a
    <code>&lt;fileset&gt;</code> can be selected based on criteria
    other than filename as provided by the <code>&lt;include&gt;</code>
    and <code>&lt;exclude&gt;</code> tags.</p>

    <h3>How to use a Selector</h3>

    <p>A selector is an element of FileSet, and appears within it. It can
    also be defined outside of any target by using the <code>&lt;selector&gt;</code> tag
    and then using it as a reference.
    </p>

    <p>Different selectors have different attributes. Some selectors can
    contain other selectors, and these are called
    <a href="#selectcontainers"><code>Selector Containers</code></a>.
    There is also a category of selectors that allow
    user-defined extensions, called
    <a href="#customselect"><code>Custom Selectors</code></a>.
    The ones built in to Apache Ant are called
    <a href="#coreselect"><code>Core Selectors</code></a>.
    </p>

    <h3><a name="coreselect">Core Selectors</a></h3>

    <p>Core selectors are the ones that come standard
    with Ant. They can be used within a fileset and can be contained
    within Selector Containers.</p>

    <p>The core selectors are:</p>

    <ul>
      <li><a href="#containsselect"><code>&lt;contains&gt;</code></a> - Select
        files that contain a particular text string</li>
      <li><a href="#dateselect"><code>&lt;date&gt;</code></a> - Select files
        that have been modified either before or after a particular date
        and time</li>
      <li><a href="#dependselect"><code>&lt;depend&gt;</code></a> - Select files
        that have been modified more recently than equivalent files
        elsewhere</li>
      <li><a href="#depthselect"><code>&lt;depth&gt;</code></a> - Select files
        that appear so many directories down in a directory tree</li>
      <li><a href="#differentselect"><code>&lt;different&gt;</code></a> - Select files
        that are different from those elsewhere</li>
      <li><a href="#filenameselect"><code>&lt;filename&gt;</code></a> - Select
        files whose name matches a particular pattern. Equivalent to
        the include and exclude elements of a patternset.</li>
      <li><a href="#presentselect"><code>&lt;present&gt;</code></a> - Select
        files that either do or do not exist in some other location</li>
      <li><a href="#regexpselect"><code>&lt;containsregexp&gt;</code></a> - Select
        files that match a regular expression</li>
      <li><a href="#sizeselect"><code>&lt;size&gt;</code></a> - Select files
        that are larger or smaller than a particular number of bytes.</li>
      <li><a href="#typeselect"><code>&lt;type&gt;</code></a> - Select files
        that are either regular files or directories.</li>
      <li><a href="#modified"><code>&lt;modified&gt;</code></a> - Select files if
        the return value of the configured algorithm is different from that
        stored in a cache.</li>
      <li><a href="#signedselector"><code>&lt;signedselector&gt;</code></a> - Select files if
        they are signed, and optionally if they have a signature of a certain name.
      </li>
      <li><a href="#scriptselector"><code>&lt;scriptselector&gt;</code></a> - 
        Use a BSF or JSR 223 scripting language to create
        your own selector
      </li>
      <li><a href="#readable"><code>&lt;readable&gt;</code></a> -
        Select files if they are readable.</li>
      <li><a href="#writable"><code>&lt;writable&gt;</code></a> -
        Select files if they are writable.</li>
    </ul>

    <h4><a name="containsselect">Contains Selector</a></h4>

    <p>The <code>&lt;contains&gt;</code> tag in a FileSet limits
    the files defined by that fileset to only those which contain the
    string specified by the <code>text</code> attribute.
    .</p>
    <p>The <code>&lt;contains&gt;</code> selector can be used as a
      ResourceSelector (see the
      <a href="resources.html#restrict">&lt;restrict&gt;</a>
      ResourceCollection).</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">text</td>
        <td valign="top">Specifies the text that every file must contain
        </td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">casesensitive</td>
        <td valign="top">Whether to pay attention to case when looking
          for the string in the <code>text</code> attribute. Default is
          true.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">ignorewhitespace</td>
        <td valign="top">Whether to eliminate whitespace before checking
          for the string in the <code>text</code> attribute. Default is
          false.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
        <tr>
            <td valign="top">encoding</td>
            <td valign="top">Encoding of the resources being selected.
                Required in practice if the encoding of the files being
                selected is different from the default encoding of the JVM
                where Ant is running.
                Since Ant 1.9.0
            </td>
            <td valign="top" align="center">No</td>
        </tr>
    </table>

    <p>Here is an example of how to use the Contains Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${doc.path}&quot; includes=&quot;**/*.html&quot;&gt;
    &lt;contains text=&quot;script&quot; casesensitive=&quot;no&quot;/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the HTML files that contain the string
    <code>script</code>.</p>


    <h4><a name="dateselect">Date Selector</a></h4>

    <p>The <code>&lt;date&gt;</code> tag in a FileSet will put
    a limit on the files specified by the include tag, so that tags
    whose last modified date does not meet the date limits specified
    by the selector will not end up being selected.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">datetime</td>
        <td valign="top">Specifies the date and time to test for.
          Should be in the format "MM/dd/yyyy hh:mm a" using the US
          locale, or an alternative pattern specified via
          the <i>pattern</i> attribute.
        </td>
        <td valign="top" align="center" rowspan="2">At least one of the two.</td>
      </tr>
      <tr>
        <td valign="top">millis</td>
        <td valign="top">The number of milliseconds since 1970 that should
          be tested for. It is usually much easier to use the datetime
          attribute.
        </td>
      </tr>
      <tr>
        <td valign="top">when</td>
        <td valign="top">Indicates how to interpret the date, whether
          the files to be selected are those whose last modified times should
          be before, after, or equal to the specified value. Acceptable
          values for this attribute are:
          <ul>
            <li>before - select files whose last modified date is before the indicated date
            <li>after - select files whose last modified date is after the indicated date
            <li>equal - select files  whose last modified date is this exact date
          </ul>
          The default is equal.
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">granularity</td>
        <td valign="top">The number of milliseconds leeway to use when
          comparing file modification times. This is needed because not every
          file system supports tracking the last modified time to the
          millisecond level. Default is 0 milliseconds, or 2 seconds on DOS systems.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">pattern</td>
        <td valign="top">The <CODE>SimpleDateFormat</CODE>-compatible pattern
          to use when interpreting the <i>datetime</i> attribute using
          the current locale.
          <i>Since Ant 1.6.2</i>
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">checkdirs</td>
        <td valign="top">
          Indicates whether or not to check dates on directories.
        </td>
        <td valign="top" align="center">No, defaults to <i>false</i></td>
      </tr>
    </table>

    <p>Here is an example of how to use the Date Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${jar.path}&quot; includes=&quot;**/*.jar&quot;&gt;
    &lt;date datetime=&quot;01/01/2001 12:00 AM&quot; when=&quot;before&quot;/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all JAR files which were last modified before midnight
    January 1, 2001.</p>


    <h4><a name="dependselect">Depend Selector</a></h4>

    <p>The <code>&lt;depend&gt;</code> tag selects files
    whose last modified date is later than another, equivalent file in
    another location.</p>

    <p>The <code>&lt;depend&gt;</code> tag supports the use of a
    contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element
    to define the location of the file to be compared against. If no
    <code>&lt;mapper&gt;</code> element is specified, the
    <code>identity</code> type mapper is used.</p>

    <p>The <code>&lt;depend&gt;</code> selector is case-sensitive.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">targetdir</td>
        <td valign="top">The base directory to look for the files to compare
          against. The precise location depends on a combination of this
          attribute and the <code>&lt;mapper&gt;</code> element, if any.
        </td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">granularity</td>
        <td valign="top">The number of milliseconds leeway to give before
          deciding a file is out of date. This is needed because not every
          file system supports tracking the last modified time to the
          millisecond level. Default is 0 milliseconds, or 2 seconds on DOS systems.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
    </table>

    <p>Here is an example of how to use the Depend Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${ant.1.5}/src/main&quot; includes=&quot;**/*.java&quot;&gt;
    &lt;depend targetdir=&quot;${ant.1.4.1}/src/main&quot;/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the Java source files which were modified in the
      1.5 release.
    </p>


    <h4><a name="depthselect">Depth Selector</a></h4>

    <p>The <code>&lt;depth&gt;</code> tag selects files based on
    how many directory levels deep they are in relation to the base
    directory of the fileset.
    </p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">min</td>
        <td valign="top">The minimum number of directory levels below
          the base directory that a file must be in order to be selected.
          Default is no limit.
        </td>
        <td valign="top" align="center" rowspan="2">At least one of the two.</td>
      </tr>
      <tr>
        <td valign="top">max</td>
        <td valign="top">The maximum number of directory levels below
          the base directory that a file can be and still be selected.
          Default is no limit.
        </td>
      </tr>
    </table>

    <p>Here is an example of how to use the Depth Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${doc.path}&quot; includes=&quot;**/*&quot;&gt;
    &lt;depth max=&quot;1&quot;/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all files in the base directory and one directory below
    that.</p>

    
    <h4><a name="differentselect">Different Selector</a></h4>

    <p>The <code>&lt;different&gt;</code> selector will select a file
    if it is deemed to be 'different' from an equivalent file in
    another location. The rules for determining difference between
    the two files are as follows:
    <ol>
    <li>If a file is only present in the resource collection you apply
      the selector to but not in targetdir (or after applying the
      mapper) the file is selected.
    <li>If a file is only present in targetdir (or after applying the
      mapper) it is ignored.
    <li> Files with different lengths are different.
    <li> If <tt>ignoreFileTimes</tt> is turned off, then differing file
    timestamps will cause files to be regarded as different.
    <li> Unless <tt>ignoreContents</tt> is set to true,
         a byte-for-byte check is run against the two files.
    </ol>

    This is a useful selector to work with programs and tasks that don't handle
    dependency checking properly; even if a predecessor task always creates its
    output files, followup tasks can be driven off copies made with a different
    selector, so their dependencies are driven on the absolute state of the
    files, not just a timestamp. For example: anything fetched from a web site,
    or the output of some program. To reduce the amount of checking, when using
    this task inside a <code>&lt;copy&gt;</code> task, set
    <tt>preservelastmodified</tt> to <i>true</i> to propagate the timestamp
    from the source file to the destination file.<p>

    The <code>&lt;different&gt;</code> selector supports the use of a
    contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element
    to define the location of the file to be compared against. If no
    <code>&lt;mapper&gt;</code> element is specified, the
    <code>identity</code> type mapper is used.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">targetdir</td>
        <td valign="top">The base directory to look for the files to compare
          against. The precise location depends on a combination of this
          attribute and the <code>&lt;mapper&gt;</code> element, if any.
        </td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">ignoreFileTimes</td>
        <td valign="top">Whether to use file times in the comparison or not.
          Default is true (time differences are ignored).
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">ignoreContents</td>
        <td valign="top">Whether to do a byte per byte compare.
          Default is false (contents are compared).
          Since Ant 1.6.3
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">granularity</td>
        <td valign="top">The number of milliseconds leeway to give before
          deciding a file is out of date. This is needed because not every
          file system supports tracking the last modified time to the
          millisecond level. Default is 0 milliseconds, or 2 seconds on DOS systems.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
    </table>

    <p>Here is an example of how to use the Different Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${ant.1.5}/src/main&quot; includes=&quot;**/*.java&quot;&gt;
    &lt;different targetdir=&quot;${ant.1.4.1}/src/main&quot;
        ignoreFileTimes="true"/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Compares all the Java source files between the 1.4.1 and the 1.5 release
    and selects those who are different, disregarding file times.
    </p>

    <h4><a name="filenameselect">Filename Selector</a></h4>

    <p>The <code>&lt;filename&gt;</code> tag acts like the
    <code>&lt;include&gt;</code> and <code>&lt;exclude&gt;</code>
    tags within a fileset. By using a selector instead, however,
    one can combine it with all the other selectors using whatever
    <a href="#selectcontainers">selector container</a> is desired.
    </p>

    <p>The <code>&lt;filename&gt;</code> selector is
    case-sensitive.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">name</td>
        <td valign="top">The name of files to select. The name parameter
          can contain the standard Ant wildcard characters.
        </td>
        <td valign="top" align="center" rowspan="2">Exactly one of
          the two</td>
      </tr>
      <tr>
        <td valign="top">regex</td>
        <td valign="top">The regular expression matching files to select.</td>
      </tr>
      <tr>
        <td valign="top">casesensitive</td>
        <td valign="top">Whether to pay attention to case when looking
          at file names. Default is "true".
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">negate</td>
        <td valign="top">Whether to reverse the effects of this filename
          selection, therefore emulating an exclude rather than include
          tag. Default is "false".
        </td>
        <td valign="top" align="center">No</td>
      </tr>
    </table>

    <p>Here is an example of how to use the Filename Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${doc.path}&quot; includes=&quot;**/*&quot;&gt;
    &lt;filename name=&quot;**/*.css&quot;/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the cascading style sheet files.</p>


    <h4><a name="presentselect">Present Selector</a></h4>

    <p>The <code>&lt;present&gt;</code> tag selects files
    that have an equivalent file in another directory tree.</p>

    <p>The <code>&lt;present&gt;</code> tag supports the use of a
    contained <a href="mapper.html"><code>&lt;mapper&gt;</code></a> element
    to define the location of the file to be tested against. If no
    <code>&lt;mapper&gt;</code> element is specified, the
    <code>identity</code> type mapper is used.</p>

    <p>The <code>&lt;present&gt;</code> selector is case-sensitive.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">targetdir</td>
        <td valign="top">The base directory to look for the files to compare
          against. The precise location depends on a combination of this
          attribute and the <code>&lt;mapper&gt;</code> element, if any.
        </td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">present</td>
        <td valign="top">Whether we are requiring that a file is present in
          the src directory tree only, or in both the src and the target
          directory tree. Valid values are:
          <ul>
            <li>srconly - select files only if they are in the src
              directory tree but not in the target directory tree
            <li>both - select files only if they are present both in the
              src and target directory trees
          </ul>
          Default is both. Setting this attribute to &quot;srconly&quot;
          is equivalent to wrapping the selector in the <code>&lt;not&gt;</code>
          selector container.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
    </table>

    <p>Here is an example of how to use the Present Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${ant.1.5}/src/main&quot; includes=&quot;**/*.java&quot;&gt;
    &lt;present present=&quot;srconly&quot; targetdir=&quot;${ant.1.4.1}/src/main&quot;/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the Java source files which are new in the
      1.5 release.
    </p>

    <h4><a name="regexpselect">Regular Expression Selector</a></h4>

    <p>The <code>&lt;containsregexp&gt;</code> tag in a FileSet limits
    the files defined by that fileset to only those which contents contain a
    match to the regular expression specified by the <code>expression</code> attribute.
    </p>
    <p>The <code>&lt;containsregexp&gt;</code> selector can be used as a
      ResourceSelector (see the
      <a href="resources.html#restrict">&lt;restrict&gt;</a>
      ResourceCollection).</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">expression</td>
        <td valign="top">Specifies the regular expression that must
        match true in every file</td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">casesensitive</td>
        <td valign="top">Perform a case sensitive match.  Default is
          true. <em>since Ant 1.8.2</em></td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">multiline</td>
        <td valign="top">
          Perform a multi line match.
          Default is false. <em>since Ant 1.8.2</em></td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">singleline</td>
        <td valign="top">
          This allows '.' to match new lines.
          SingleLine is not to be confused with multiline, SingleLine is a perl
          regex term, it corresponds to dotall in java regex.
          Default is false. <em>since Ant 1.8.2</em></td>
        <td valign="top" align="center">No</td>
      </tr>
    </table>

    <p>Here is an example of how to use the regular expression Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${doc.path}&quot; includes=&quot;*.txt&quot;&gt;
    &lt;containsregexp expression=&quot;[4-6]\.[0-9]&quot;/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the text files that match the regular expression
    (have a 4,5 or 6 followed by a period and a number from 0 to 9).


    <h4><a name="sizeselect">Size Selector</a></h4>

    <p>The <code>&lt;size&gt;</code> tag in a FileSet will put
    a limit on the files specified by the include tag, so that tags
    which do not meet the size limits specified by the selector will not
    end up being selected.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">value</td>
        <td valign="top">The size of the file which should be tested for.
        </td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">units</td>
        <td valign="top">The units that the <code>value</code> attribute
          is expressed in. When using the standard single letter SI
          designations, such as &quot;k&quot;,&quot;M&quot;, or
          &quot;G&quot;, multiples of 1000 are used. If you want to use
          power of 2 units, use the IEC standard: &quot;Ki&quot; for 1024,
          &quot;Mi&quot; for 1048576, and so on. The default is no units,
          which means the <code>value</code> attribute expresses the exact
          number of bytes.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">when</td>
        <td valign="top">Indicates how to interpret the size, whether
          the files to be selected should be larger, smaller, or equal to
          that value. Acceptable values for this attribute are:
          <ul>
            <li>less - select files less than the indicated size
            <li>more - select files greater than the indicated size
            <li>equal - select files this exact size
          </ul>
          The default is equal.
        <td valign="top" align="center">No</td>
      </tr>
    </table>

    <p>Here is an example of how to use the Size Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${jar.path}&quot;&gt;
  &lt;patternset&gt;
    &lt;include name=&quot;**/*.jar&quot;/&gt;
  &lt;/patternset&gt;
  &lt;size value=&quot;4&quot; units=&quot;Ki&quot; when=&quot;more&quot;/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all JAR files that are larger than 4096 bytes.</p>

    <h4><a name="typeselect">Type Selector</a></h4>

    <p>The <code>&lt;type&gt;</code> tag selects files of a certain type:
    directory or regular.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">type</td>
        <td valign="top">The type of file which should be tested for.
            Acceptable values are:
            <ul>
                <li>file - regular files</li>
                <li>dir - directories</li>
            </ul>
        </td>
        <td valign="top" align="center">Yes</td>
      </tr>
    </table>

    <p>Here is an example of how to use the Type Selector to select only
    directories in <code>${src}</code></p>

    <blockquote><pre>
&lt;fileset dir=&quot;${src}&quot;&gt;
  &lt;type type="dir"/&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>The Type Selector is often used in conjunction with other selectors.
    For example, to select files that also exist in a <code>template</code>
    directory, but avoid selecting empty directories, use:

<blockquote><pre>
&lt;fileset dir="${src}"&gt;
    &lt;and&gt;
        &lt;present targetdir="template"/&gt;
        &lt;type type="file"/&gt;
    &lt;/and&gt;
&lt;/fileset&gt;
</pre></blockquote>


    <h4><a name="modified">Modified Selector</a></h4>
    <p>The <code>&lt;modified&gt;</code> selector computes a value for a file, compares that
    to the value stored in a cache and select the file, if these two values
    differ.</p>
    <p>Because this selector is highly configurable the order in which the selection is done
    is: <ol>
        <li> get the absolute path for the file </li>
        <li> get the cached value from the configured cache (absolute path as key) </li>
        <li> get the new value from the configured algorithm </li>
        <li> compare these two values with the configured comparator </li>
        <li> update the cache if needed and requested </li>
        <li> do the selection according to the comparison result </li>
        </ol>
    <p>The comparison, computing of the hashvalue and the store is done by implementation
    of special interfaces. Therefore they may provide additional parameters.</p>

    <p>The <code>&lt;modified&gt;</code> selector can be used as a
      ResourceSelector (see the
      <a href="resources.html#restrict">&lt;restrict&gt;</a>
      ResourceCollection).
    In that case it maps simple file resources to files and does its job. If the
    resource is from another type, the <code>&lt;modified&gt;</code> selector tries
    to (<b>attention!</b>) copy the content into a local file for computing the
    hashvalue.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top"> algorithm </td>
        <td valign="top"> The type of algorithm should be used.
            Acceptable values are (further information see later):
            <ul>
                <li> hashvalue - HashvalueAlgorithm </li>
                <li> digest - DigestAlgorithm </li>
                <li> checksum - ChecksumAlgorithm </li>
            </ul>
        </td>
        <td valign="top" align="center"> No, defaults to <i>digest</i> </td>
      </tr>
      <tr>
        <td valign="top"> cache </td>
        <td valign="top"> The type of cache should be used.
            Acceptable values are (further information see later):
            <ul>
                <li> propertyfile - PropertyfileCache </li>
            </ul>
        </td>
        <td valign="top" align="center"> No, defaults to <i>propertyfile</i> </td>
      </tr>
      <tr>
        <td valign="top"> comparator </td>
        <td valign="top"> The type of comparator should be used.
            Acceptable values are (further information see later):
            <ul>
                <li> equal - EqualComparator </li>
                <li> rule - java.text.RuleBasedCollator
                  <!-- NOTE -->
                  <i>(see <a href="#ModSelNote">note</a> for restrictions)</i>
                </li>
            </ul>
        </td>
        <td valign="top" align="center"> No, defaults to <i>equal</i> </td>
      </tr>
      <tr>
        <td valign="top"> algorithmclass </td>
        <td valign="top"> Classname of custom algorithm implementation. Lower
          priority than <i>algorithm</i>. </td>
        <td valign="top" align="center"> No </td>
      </tr>
      <tr>
        <td valign="top"> cacheclass </td>
        <td valign="top"> Classname of custom cache implementation. Lower
          priority than <i>cache</i>. </td>
        <td valign="top" align="center"> No </td>
      </tr>
      <tr>
        <td valign="top"> comparatorclass </td>
        <td valign="top"> Classname of custom comparator implementation. Lower
          priority than <i>comparator</i>. </td>
        <td valign="top" align="center"> No </td>
      </tr>
      <tr>
        <td valign="top"> update </td>
        <td valign="top"> Should the cache be updated when values differ? (boolean) </td>
        <td valign="top" align="center"> No, defaults to <i>true</i> </td>
      </tr>
      <tr>
        <td valign="top"> seldirs </td>
        <td valign="top"> Should directories be selected? (boolean) </td>
        <td valign="top" align="center"> No, defaults to <i>true</i> </td>
      </tr>
      <tr>
        <td valign="top"> selres </td>
        <td valign="top"> Should Resources without an InputStream, and
           therefore without checking, be selected?  (boolean) </td>
        <td valign="top" align="center"> No, defaults to <i>true</i>. Only relevant
           when used as ResourceSelector. </td>
      </tr>
      <tr>
        <td valign="top"> delayupdate </td>
        <td valign="top"> If set to <i>true</i>, the storage of the cache will be delayed until the
             next finished BuildEvent; task finished, target finished or build finished,
             whichever comes first.  This is provided for increased performance.  If set
             to <i>false</i>, the storage of the cache will happen with each change.  This
             attribute depends upon the <i>update</i> attribute. (boolean)</td>
        <td valign="top" align="center"> No, defaults to <i>true</i> </td>
      </tr>
    </table>

    <p>These attributes can be set with nested <code>&lt;param/&gt;</code> tags. With <code>&lt;param/&gt;</code>
    tags you can set other values too - as long as they are named according to
    the following rules: <ul>
        <li> <b> algorithm </b>: same as attribute algorithm </li>
        <li> <b> cache </b>: same as attribute cache </li>
        <li> <b> comparator </b>: same as attribute comparator </li>
        <li> <b> algorithmclass </b>: same as attribute algorithmclass </li>
        <li> <b> cacheclass </b>: same as attribute cacheclass </li>
        <li> <b> comparatorclass </b>: same as attribute comparatorclass </li>
        <li> <b> update </b>: same as attribute update </li>
        <li> <b> seldirs </b>: same as attribute seldirs </li>
        <li> <b> algorithm.* </b>: Value is transferred to the algorithm via its
                                   <i>set</i>XX-methods </li>
        <li> <b> cache.* </b>: Value is transferred to the cache via its
                                   <i>set</i>XX-methods </li>
        <li> <b> comparator.* </b>: Value is transferred to the comparator via its
                                   <i>set</i>XX-methods </li>
    </ul>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr><td colspan="2"><font size="+1"><b> Algorithm options</b></font></td></tr>
      <tr>
        <td valign="top"><b>Name</b></td>
        <td valign="top"><b>Description</b></td>
      </tr>
      <tr>
        <td valign="top"> hashvalue </td>
        <td valign="top"> Reads the content of a file into a java.lang.String
          and use thats hashValue(). No additional configuration required.
        </td>
      </tr>
      <tr>
        <td valign="top"> digest </td>
        <td valign="top"> Uses java.security.MessageDigest. This Algorithm supports
          the following attributes:
          <ul>
            <li><i>algorithm.algorithm</i> (optional): Name of the Digest algorithm
                (e.g. 'MD5' or 'SHA', default = <i>MD5</i>) </li>
            <li><i>algorithm.provider</i> (optional): Name of the Digest provider
                (default = <i>null</i>) </li>
          </ul>
        </td>
      </tr>
      <tr>
        <td valign="top"> checksum </td>
        <td valign="top"> Uses java.util.zip.Checksum. This Algorithm supports
          the following attributes:
          <ul>
            <li><i>algorithm.algorithm</i> (optional): Name of the algorithm
                (e.g. 'CRC' or 'ADLER', default = <i>CRC</i>) </li>
          </ul>
        </td>
      </tr>
      <tr><td colspan="2"><font size="+1"><b> Cache options </b></font></td></tr>
      <tr>
        <td valign="top"> propertyfile </td>
        <td valign="top"> Use the java.util.Properties class and its possibility
          to load and store to file.
          This Cache implementation supports the following attributes:
          <ul>
            <li><i>cache.cachefile</i> (optional): Name of the properties-file
                (default = <i>cache.properties</i>) </li>
          </ul>
        </td>
      </tr>
      <tr><td colspan="2"><font size="+1"><b> Comparator options</b></font></td></tr>
      <tr>
        <td valign="top"> equal </td>
        <td valign="top"> Very simple object comparison. </td>
      </tr>
      <tr>
        <td valign="top"> rule </td>
        <td valign="top"> Uses <i>java.text.RuleBasedCollator</i> for Object
          comparison.
          <!-- NOTE -->
          <i>(see <a href="#ModSelNote">note</a> for restrictions)</i>
        </td>
      </tr>
    </table>

    <p>The <code>&lt;modified&gt;</code> selector supports a nested
    <code>&lt;classpath&gt;</code> element that represents a <a href="../using.html#path">
    PATH like structure</a> for finding custom interface implementations. </p>

    <p>Here are some examples of how to use the Modified Selector:</p>

    <blockquote><pre>
    &lt;copy todir="dest"&gt;
        &lt;fileset dir="src"&gt;
            &lt;modified/&gt;
        &lt;/fileset&gt;
    &lt;/copy&gt;
    </pre></blockquote>
    <p>This will copy all files from <i>src</i> to <i>dest</i> which content has changed.
    Using an updating PropertyfileCache with cache.properties and
    MD5-DigestAlgorithm.</p>

    <blockquote><pre>
    &lt;copy todir="dest"&gt;
        &lt;fileset dir="src"&gt;
            &lt;modified update="true"
                      seldirs="true"
                      cache="propertyfile"
                      algorithm="digest"
                      comparator="equal"&gt;
                &lt;param name="cache.cachefile"     value="cache.properties"/&gt;
                &lt;param name="algorithm.algorithm" value="MD5"/&gt;
            &lt;/modified&gt;
        &lt;/fileset&gt;
    &lt;/copy&gt;
    </pre></blockquote>
  <p>This is the same example rewritten as CoreSelector with setting the all the values
  (same as defaults are).</p>

    <blockquote><pre>
    &lt;copy todir="dest"&gt;
        &lt;fileset dir="src"&gt;
            &lt;custom class="org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector"&gt;
                &lt;param name="update"     value="true"/&gt;
                &lt;param name="seldirs"    value="true"/&gt;
                &lt;param name="cache"      value="propertyfile"/&gt;
                &lt;param name="algorithm"  value="digest"/&gt;
                &lt;param name="comparator" value="equal"/&gt;
                &lt;param name="cache.cachefile"     value="cache.properties"/&gt;
                &lt;param name="algorithm.algorithm" value="MD5"/&gt;
            &lt;/custom&gt;
        &lt;/fileset&gt;
    &lt;/copy&gt;
    </pre></blockquote>
  <p>And this is the same rewritten as CustomSelector.</p>

    <blockquote><pre>
  &lt;target name="generate-and-upload-site"&gt;
      &lt;echo&gt; generate the site using forrest &lt;/echo&gt;
      &lt;antcall target="site"/&gt;

      &lt;echo&gt; upload the changed file &lt;/echo&gt;
      &lt;ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.pwd}"&gt;
          &lt;fileset dir="htdocs/manual"&gt;
              &lt;modified/&gt;
          &lt;/fileset&gt;
      &lt;/ftp&gt;
  &lt;/target&gt;
    </pre></blockquote>
  <p>A useful scenario for this selector inside a build environment
  for homepage generation (e.g. with <a href="http://xml.apache.org/forrest/">
  Apache Forrest</a>). Here all <b>changed</b> files are uploaded to the server. The
  CacheSelector saves therefore much upload time.</p>

    <blockquote><pre>
  &lt;modified cacheclassname="com.mycompany.MyCache"&gt;
      &lt;classpath&gt;
          &lt;pathelement location="lib/mycompany-antutil.jar"/&gt;
      &lt;/classpath&gt;
  &lt;/modified&gt;
    </pre></blockquote>
    <p>Uses <tt>com.mycompany.MyCache</tt> from a jar outside of Ants own classpath
    as cache implementation</p>

  <h4><a name="ModSelNote">Note on RuleBasedCollator</a></h4>
  <p>The RuleBasedCollator needs a format for its work, but its needed while
  instantiation. There is a problem in the initialization algorithm for this
  case. Therefore you should not use this (or tell me the workaround :-).</p>

      <h4><a name="signedselector">Signed Selector</a></h4>

      <p>
        The <code>&lt;signedselector&gt;</code> tag selects signed files and optionally
        signed with a certain name.
      </p>
      <p>
        This selector has been added in Apache Ant 1.7.
      </p>
      <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">name</td>
          <td valign="top"> The signature name to check for.</td>
          <td valign="top" align="center">no</td>
        </tr>
      </table>

      <h4><a name="readable">Readable Selector</a></h4>

      <p>The <code>&lt;readable&gt;</code> selector selects only files
        that are readable.  Ant only invokes
        <code>java.io.File#canRead</code> so if a file is unreadable
        but the Java VM cannot detect this state, this selector will
        still select the file.</p>

      <h4><a name="writable">Writable Selector</a></h4>

      <p>The <code>&lt;writable&gt;</code> selector selects only files
        that are writable.  Ant only invokes
        <code>java.io.File#canWrite</code> so if a file is unwritable
        but the Java VM cannot detect this state, this selector will
        still select the file.</p>

      <h4><a name="scriptselector">Script Selector</a></h4>

      <p>
        The <code>&lt;scriptselector&gt;</code> element enables you
        to write a complex selection algorithm in any
        <a href="http://jakarta.apache.org/bsf" target="_top">Apache BSF</a>
        or
        <a href="https://scripting.dev.java.net">JSR 223</a>
        supported language.
        See the <a href="../Tasks/script.html">Script</a> task for
        an explanation of scripts and dependencies.
      </p>
      <p>
        This selector was added in Apache Ant 1.7.
      </p>
      <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Required</b></td>
        </tr>
        <tr>
          <td valign="top">language</td>
          <td valign="top">language of the script.</td>
          <td valign="top" align="center">yes</td>
        </tr>
        <tr>
          <td valign="top">manager</td>
          <td valign="top">
            The script engine manager to use.
            See the <a href="../Tasks/script.html">script</a> task
            for using this attribute.
          </td>
          <td valign="top" align="center">No - default is "auto"</td>
        </tr>
        <tr>
          <td valign="top">src</td>
          <td valign="top">filename of the script</td>
          <td valign="top" align="center">no</td>
        </tr>
        <tr>
          <td valign="top">setbeans</td>
          <td valign="top">whether to have all properties, references and targets as
            global variables in the script.</td>
          <td valign="top" align="center">No, default is "true".</td>
        </tr>
        <tr>
          <td valign="top">classpath</td>
          <td valign="top">
            The classpath to pass into the script.
          </td>
          <td align="center" valign="top">No</td>
        </tr>
        <tr>
          <td valign="top">classpathref</td>
          <td valign="top">The classpath to use, given as a
            <a href="../using.html#references">reference</a> to a path defined elsewhere.
            <td align="center" valign="top">No</td>
          </tr>
      </table>
  <p>
    This selector can take a nested &lt;classpath&gt; element.
    See the <a href="../Tasks/script.html">script</a> task
    on how to use this element.
  </p>
      <p>
      If no <code>src</code> attribute is supplied, the script must be nested
      inside the selector declaration.
      </p>
      <p>The embedded script is invoked for every test, with
         the bean <code>self</code>
        is bound to the selector. It has an attribute <code>selected</code>
        must can be set using <code>setSelected(boolean)</code> to select that
        file.

      <p>

      The following beans are configured for every script, alongside
      the classic set of project, properties, and targets.

      <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Bean</b></td>
          <td valign="top"><b>Description</b></td>
          <td valign="top"><b>Type</b></td>
        </tr>
        <tr>
          <td valign="top">self</td>
          <td valign="top">selector instance</td>
          <td valign="top">org.apache.tools.ant.types.optional</td>
        </tr>
        <tr>
          <td valign="top">filename</td>
          <td valign="top">filename of the selection</td>
          <td valign="top" >String</td>
        </tr>
        <tr>
          <td valign="top">file</td>
          <td valign="top">file of the selection</td>
          <td valign="top" >java.io.File</td>
        </tr>
        <tr>
          <td valign="top">basedir</td>
          <td valign="top">Fileset base directory</td>
          <td valign="top" >java.io.File</td>
        </tr>

      </table>
      <p>
      The <code>self</code> bean maps to the selector, which has the following
      attributes. Only the <code>selected</code> flag is writable, the rest
      are read only via their getter methods.

            <table border="1" cellpadding="2" cellspacing="0">
        <tr>
          <td valign="top"><b>Attribute</b></td>
          <td valign="top"><b>Description</b></td>
          <td align="center" valign="top"><b>Type</b></td>
        </tr>
        <tr>
          <td valign="top">selected</td>
          <td valign="top">writeable flag to select this file</td>
          <td valign="top" align="center">boolean</td>
        </tr>
        <tr>
          <td valign="top">filename</td>
          <td valign="top">filename of the selection</td>
          <td valign="top" >String</td>
        </tr>
        <tr>
          <td valign="top">file</td>
          <td valign="top">file of the selection</td>
          <td valign="top" >java.io.File</td>
        </tr>
        <tr>
          <td valign="top">basedir</td>
          <td valign="top">Fileset base directory</td>
          <td valign="top" >java.io.File</td>
        </tr>
      </table>

      <p>
      Example
      </p>
<pre>
    &lt;scriptselector language=&quot;javascript&quot;&gt;
      self.setSelected(true);
    &lt;/scriptselector&gt;
</pre>
    <p>
    Selects every file.
    </p>

<pre>
    &lt;scriptselector language=&quot;javascript&quot;&gt;
      self.setSelected((filename.length%2)==0);
    &lt;/scriptselector&gt;
</pre>
Select files whose filename length is even.

    <h3><a name="selectcontainers">Selector Containers</a></h3>

    <p>To create more complex selections, a variety of selectors that
    contain other selectors are available for your use. They combine the
    selections of their child selectors in various ways.</p>

    <p>The selector containers are:</p>

    <ul>
      <li><a href="#andselect"><code>&lt;and&gt;</code></a> - select a file only if all
        the contained selectors select it.
      <li><a href="#majorityselect"><code>&lt;majority&gt;</code></a> - select a file
        if a majority of its selectors select it.
      <li><a href="#noneselect"><code>&lt;none&gt;</code></a> - select a file only if
        none of the contained selectors select it.
      <li><a href="#notselect"><code>&lt;not&gt;</code></a> - can contain only one
        selector, and reverses what it selects and doesn't select.
      <li><a href="#orselect"><code>&lt;or&gt;</code></a> - selects a file if any one
        of the contained selectors selects it.
      <li><a href="#selectorselect"><code>&lt;selector&gt;</code></a> - contains only one
        selector and forwards all requests to it without alteration, provided
        that any <code>&quot;if&quot;</code> or
        <code>&quot;unless&quot;</code> conditions are met. This
        is the selector to use if you want to define a reference. It is
        usable as an element of <code>&lt;project&gt;</code>. It is also
        the one to use if you want selection of files to be dependent on
        Ant property settings.
    </ul>

    <p>All selector containers can contain any other selector, including
    other containers, as an element. Using containers, the selector tags
    can be arbitrarily deep. Here is a complete list of allowable
    selector elements within a container:</p>

    <ul>
      <li><code>&lt;and&gt;</code></li>
      <li><code>&lt;contains&gt;</code></li>
      <li><code>&lt;custom&gt;</code></li>
      <li><code>&lt;date&gt;</code></li>
      <li><code>&lt;depend&gt;</code></li>
      <li><code>&lt;depth&gt;</code></li>
      <li><code>&lt;filename&gt;</code></li>
      <li><code>&lt;majority&gt;</code></li>
      <li><code>&lt;none&gt;</code></li>
      <li><code>&lt;not&gt;</code></li>
      <li><code>&lt;or&gt;</code></li>
      <li><code>&lt;present&gt;</code></li>
      <li><code>&lt;selector&gt;</code></li>
      <li><code>&lt;size&gt;</code></li>
    </ul>

    <h4><a name="andselect">And Selector</a></h4>

    <p>The <code>&lt;and&gt;</code> tag selects files that are
    selected by all of the elements it contains. It returns as
    soon as it finds a selector that does not select the file,
    so it is not guaranteed to check every selector.
    </p>

    <p>Here is an example of how to use the And Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${dist}&quot; includes=&quot;**/*.jar&quot;&gt;
    &lt;and&gt;
        &lt;size value=&quot;4&quot; units=&quot;Ki&quot; when=&quot;more&quot;/&gt;
        &lt;date datetime=&quot;01/01/2001 12:00 AM&quot; when=&quot;before&quot;/&gt;
    &lt;/and&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the JAR file larger than 4096 bytes which haven't been update
      since the last millennium.
    </p>


    <h4><a name="majorityselect">Majority Selector</a></h4>

    <p>The <code>&lt;majority&gt;</code> tag selects files provided
    that a majority of the contained elements also select it. Ties are
    dealt with as specified by the <code>allowtie</code> attribute.
    </p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">allowtie</td>
        <td valign="top">Whether files should be selected if there
          are an even number of selectors selecting them as are
          not selecting them. Default is true.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
    </table>


    <p>Here is an example of how to use the Majority Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${docs}&quot; includes=&quot;**/*.html&quot;&gt;
    &lt;majority&gt;
        &lt;contains text=&quot;project&quot; casesensitive="false"/&gt;
        &lt;contains text=&quot;taskdef&quot; casesensitive="false"/&gt;
        &lt;contains text=&quot;IntrospectionHelper&quot; casesensitive="true"/&gt;
    &lt;/majority&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the HTML files which contain at least two of the three
    phrases "project", "taskdef", and "IntrospectionHelper" (this last phrase must
    match case exactly).
    </p>


    <h4><a name="noneselect">None Selector</a></h4>

    <p>The <code>&lt;none&gt;</code> tag selects files that are
    not selected by any of the elements it contains. It returns as
    soon as it finds a selector that selects the file,
    so it is not guaranteed to check every selector.
    </p>

    <p>Here is an example of how to use the None Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${src}&quot; includes=&quot;**/*.java&quot;&gt;
    &lt;none&gt;
        &lt;present targetdir=&quot;${dest}&quot;/&gt;
        &lt;present targetdir=&quot;${dest}&quot;&gt;
            &lt;mapper type=&quot;glob&quot; from=&quot;*.java&quot; to=&quot;*.class&quot;/&gt;
        &lt;/present&gt;
    &lt;/none&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects only Java files which do not have equivalent java or
    class files in the dest directory.
    </p>


    <h4><a name="notselect">Not Selector</a></h4>

    <p>The <code>&lt;not&gt;</code> tag reverses the meaning of the
    single selector it contains.
    </p>

    <p>Here is an example of how to use the Not Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${src}&quot; includes=&quot;**/*.java&quot;&gt;
    &lt;not&gt;
        &lt;contains text=&quot;test&quot;/&gt;
    &lt;/not&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the files in the src directory that do not contain the
    string "test".
    </p>


    <h4><a name="orselect">Or Selector</a></h4>

    <p>The <code>&lt;or&gt;</code> tag selects files that are
    selected by any one of the elements it contains. It returns as
    soon as it finds a selector that selects the file,
    so it is not guaranteed to check every selector.
    </p>

    <p>Here is an example of how to use the Or Selector:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${basedir}&quot;&gt;
    &lt;or&gt;
        &lt;depth max=&quot;0&quot;/&gt;
        &lt;filename name="*.png"/&gt;
        &lt;filename name="*.gif"/&gt;
        &lt;filename name="*.jpg"/&gt;
    &lt;/or&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all the files in the top directory along with all the
    image files below it.
    </p>


    <h4><a name="selectorselect">Selector Reference</a></h4>

    <p>The <code>&lt;selector&gt;</code> tag is used to create selectors
    that can be reused through references. It is the only selector which can
    be used outside of
    any target, as an element of the <code>&lt;project&gt;</code> tag. It
    can contain only one other selector, but of course that selector can
    be a container.
    </p>

    <p>The <code>&lt;selector&gt;</code> tag can also be used to select
    files conditionally based on whether an Ant property exists or not.
    This functionality is realized using the <code>&quot;if&quot;</code> and
    <code>&quot;unless&quot;</code> attributes in exactly the same way they
    are used on targets or on the <code>&lt;include&gt;</code> and
    <code>&lt;exclude&gt;</code> tags within a
    <code>&lt;patternset&gt;</code>.</p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">if</td>
        <td valign="top">Allow files to be selected only <a href="../properties.html#if+unless">if the named
          property is set</a>.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">unless</td>
        <td valign="top">Allow files to be selected only <a href="../properties.html#if+unless">if the named
          property is <b>not</b> set</a>.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
    </table>

    <p>Here is an example of how to use the Selector Reference:</p>

    <blockquote><pre>
&lt;project default=&quot;all&quot; basedir=&quot;./ant&quot;&gt;

    &lt;selector id=&quot;completed&quot;&gt;
        &lt;none&gt;
            &lt;depend targetdir=&quot;build/classes&quot;&gt;
                &lt;mapper type=&quot;glob&quot; from=&quot;*.java&quot; to=&quot;*.class&quot;/&gt;
            &lt;/depend&gt;
            &lt;depend targetdir=&quot;docs/manual/api&quot;&gt;
                &lt;mapper type=&quot;glob&quot; from=&quot;*.java&quot; to=&quot;*.html&quot;/&gt;
            &lt;/depend&gt;
        &lt;/none&gt;
    &lt;/selector&gt;

    &lt;target&gt;
        &lt;zip&gt;
            &lt;fileset dir=&quot;src/main&quot; includes=&quot;**/*.java&quot;&gt;
                &lt;selector refid=&quot;completed&quot;/&gt;
            &lt;/fileset&gt;
        &lt;/zip&gt;
    &lt;/target&gt;

&lt;/project&gt;
</pre></blockquote>

    <p>Zips up all the Java files which have an up-to-date equivalent
    class file and javadoc file associated with them.
    </p>

    <p>And an example of selecting files conditionally, based on whether
    properties are set:</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${working.copy}&quot;&gt;
    &lt;or&gt;
        &lt;selector if=&quot;include.tests&quot;&gt;
            &lt;filename name=&quot;**/*Test.class&quot;&gt;
        &lt;/selector&gt;
        &lt;selector if=&quot;include.source&quot;&gt;
            &lt;and&gt;
                &lt;filename name=&quot;**/*.java&quot;&gt;
                &lt;not&gt;
                    &lt;selector unless=&quot;include.tests&quot;&gt;
                        &lt;filename name=&quot;**/*Test.java&quot;&gt;
                    &lt;/selector&gt;
                &lt;/not&gt;
            &lt;/and&gt;
        &lt;/selector&gt;
    &lt;/or&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>A fileset that conditionally contains Java source files and Test
    source and class files.</p>

    <h3><a name="customselect">Custom Selectors</a></h3>

    <p>You can write your own selectors and use them within the selector
    containers by specifying them within the <code>&lt;custom&gt;</code> tag.</p>

    <p>First, you have to write your selector class in Java. The only
    requirement it must meet in order to be a selector is that it implements
    the <code>org.apache.tools.ant.types.selectors.FileSelector</code>
    interface, which contains a single method. See
    <a href="selectors-program.html">Programming Selectors in Ant</a> for
    more information.</p>

    <p>Once that is written, you include it in your build file by using
    the <code>&lt;custom&gt;</code> tag.
    </p>

    <table border="1" cellpadding="2" cellspacing="0">
      <tr>
        <td valign="top"><b>Attribute</b></td>
        <td valign="top"><b>Description</b></td>
        <td align="center" valign="top"><b>Required</b></td>
      </tr>
      <tr>
        <td valign="top">classname</td>
        <td valign="top">The name of your class that implements
          <code>org.apache.tools.ant.types.selectors.FileSelector</code>.
        </td>
        <td valign="top" align="center">Yes</td>
      </tr>
      <tr>
        <td valign="top">classpath</td>
        <td valign="top">The classpath to use in order to load the
          custom selector class. If neither this classpath nor the
          classpathref are specified, the class will be
          loaded from the classpath that Ant uses.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
      <tr>
        <td valign="top">classpathref</td>
        <td valign="top">A reference to a classpath previously
          defined. If neither this reference nor the
          classpath above are specified, the class will be
          loaded from the classpath that Ant uses.
        </td>
        <td valign="top" align="center">No</td>
      </tr>
    </table>

    <p>Here is how you use <code>&lt;custom&gt;</code> to
    use your class as a selector:
    </p>

    <blockquote><pre>
&lt;fileset dir=&quot;${mydir}&quot; includes=&quot;**/*&quot;&gt;
    &lt;custom classname=&quot;com.mydomain.MySelector&quot;&gt;
        &lt;param name=&quot;myattribute&quot; value=&quot;myvalue&quot;/&gt;
    &lt;/custom&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>A number of core selectors can also be used as custom selectors
    by specifying their attributes using <code>&lt;param&gt;</code> elements. These
    are</p>

    <ul>
      <li><a href="#containsselect">Contains Selector</a> with
        classname <code>org.apache.tools.ant.types.selectors.ContainsSelector</code>
      <li><a href="#dateselect">Date Selector</a> with
        classname <code>org.apache.tools.ant.types.selectors.DateSelector</code>
      <li><a href="#depthselect">Depth Selector</a> with
        classname <code>org.apache.tools.ant.types.selectors.DepthSelector</code>
      <li><a href="#filenameselect">Filename Selector</a> with
        classname <code>org.apache.tools.ant.types.selectors.FilenameSelector</code>
      <li><a href="#sizeselect">Size Selector</a> with
        classname <code>org.apache.tools.ant.types.selectors.SizeSelector</code>
    </ul>

    <p>Here is the example from the Depth Selector section rewritten
    to use the selector through <code>&lt;custom&gt;</code>.</p>

    <blockquote><pre>
&lt;fileset dir=&quot;${doc.path}&quot; includes=&quot;**/*&quot;&gt;
    &lt;custom classname=&quot;org.apache.tools.ant.types.selectors.DepthSelector&quot;&gt;
        &lt;param name=&quot;max&quot; value=&quot;1&quot;/&gt;
    &lt;/custom&gt;
&lt;/fileset&gt;
</pre></blockquote>

    <p>Selects all files in the base directory and one directory below
    that.</p>

    <p>For more details concerning writing your own selectors, consult
    <a href="selectors-program.html">Programming Selectors in Ant</a>.</p>

    

  </body>

</html>
