Section 12.6. Creating Custom Selectors


12.6. Creating Custom Selectors

Writing custom Ant selectors is possible if you extend a class like org.apache.tools.ant.types.selectors.BaseExtendSelector. In code, selectors are passed File objects and return true or false depending on whether or not a file is acceptable. Say, for example, that you want to copy files less than a megabyte in length. Example 12-20 shows a selector that tests file length and returns true if the file is OK, false otherwise.

Example 12-20. A new selector (ch12/selector/src/ProjectSelector.java)
import java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.types.selectors.BaseExtendSelector; public class ProjectSelector extends BaseExtendSelector  {     public boolean isSelected(File basedir, String filename, File file)      throws BuildException      {         if(file.length( ) < 1024 * 1024){             return true;         }         else {             return false;          }     } }

Example 12-21 is a build file that uses this new selector when copying files; in particular, it copies over its own source code to a directory named sizeOK.

Example 12-21. Build file for the new selector (ch12/selector/build.xml)
<?xml version="1.0" ?> <project basedir="." default="main">     <property name="src" value="src"/>     <property name="output" value="output"/>     <property name="sizeOK" value="sizeOK"/>     <target name="main" depends="jar">         <copy todir="${sizeOK}">             <fileset dir="${src}">                 <selector>                     <custom classname="ProjectSelector" classpath="Project.jar"/>                 </selector>             </fileset>         </copy>     </target>     <target name="compile">         <mkdir dir="${output}"/>         <mkdir dir="${sizeOK}"/>         <javac srcdir="${src}" destdir="${output}"/>     </target>     <target name="jar" depends="compile">         <jar destfile="Project.jar" basedir="${output}"/>     </target> </project>

Here's what you see when you run this build file:

%ant Buildfile: build.xml compile:     [mkdir] Created dir: /home/steven/ant/ch12/selector/output     [mkdir] Created dir: /home/steven/ant/ch12/selector/writeable     [javac] Compiling 1 source file to /home/steven/ant/ch12/selector/output jar:       [jar] Building jar: /home/steven/ant/ch12/selector/Project.jar main:      [copy] Copying 1 file to /home/steven/ant/ch12/selector/sizeOK BUILD SUCCESSFUL Total time: 3 seconds

In this case, the code only copies files less than a megabyte in length, but custom seletors like this can select on anything, e.g., file creation date, read/write status, filename, and so on.



    Ant. The Definitive Guide
    Ant: The Definitive Guide, 2nd Edition
    ISBN: 0596006098
    EAN: 2147483647
    Year: 2003
    Pages: 115
    Authors: Steve Holzner

    flylib.com © 2008-2017.
    If you may any questions please contact us: flylib@qtcs.net