From: Matt I. <mat...@us...> - 2003-04-10 13:49:36
|
Update of /cvsroot/ant-contrib/ant-contrib/src/net/sf/antcontrib/logic In directory sc8-pr-cvs1:/tmp/cvs-serv21933/ant-contrib/src/net/sf/antcontrib/logic Modified Files: ForEach.java Added Files: LatestTimestamp.java Log Message: Add "LatestTimestamp" task. Add "trim" attribute to "ForEach" task. --- NEW FILE: LatestTimestamp.java --- /* * The Apache Software License, Version 1.1 * * Copyright (c) 2001-2003 Ant-Contrib project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Ant-Contrib project (http://sourceforge.net/projects/ant-contrib)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The name Ant-Contrib must not be used to endorse or promote products * derived from this software without prior written permission. For * written permission, please contact * ant...@li.... * * 5. Products derived from this software may not be called "Ant-Contrib" * nor may "Ant-Contrib" appear in their names without prior written * permission of the Ant-Contrib project. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE ANT-CONTRIB PROJECT OR ITS * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== */ package net.sf.antcontrib.logic; import java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Reference; /*** * Task definition for the foreach task. The foreach task iterates * over a list, a list of filesets, or both. * * <pre> * * Usage: * * Task declaration in the project: * <code> * <taskdef name="latesttimestamp" classname="net.sf.antcontrib.logic.LatestTimestamp" /> * </code> * * Call Syntax: * <code> * <latesttimestamp property="prop" * [pathref="ref"] > * <path> * ... * </path> * </latesttimestamp> * </code> * * Attributes: * property --> The name of the property to set with file having the latest * timestamp. This will be the absolute pathname * pathref --> * * </pre> * @author <a href="mailto:mat...@mi...">Matthew Inger</a> */ public class LatestTimestamp extends Task { private String property; private Path path; /*** * Default Constructor */ public LatestTimestamp() { super(); } public void execute() throws BuildException { if (property == null) throw new BuildException("Property must be specified."); if (path == null) throw new BuildException("A path element or pathref attribute must be specified."); File latest = null; System.out.println("listing files..."); String s[] = path.list(); for (int j = 0; j < s.length; j++) { File f = new File(s[j]); if (f.canRead()) { if (latest == null) latest = f; else if (f.lastModified() > latest.lastModified()) latest = f; } } if (latest != null) project.setProperty(property, latest.getAbsolutePath()); } public void setProperty(String property) { this.property = property; } public void setPathRef(Reference ref) throws BuildException { if (path == null) { path = new Path(getProject()); path.setRefid(ref); } else { throw new BuildException("Path element already specified."); } } public Path createPath() throws BuildException { if (path == null) path = new Path(getProject()); else throw new BuildException("Path element already specified."); return path; } } Index: ForEach.java =================================================================== RCS file: /cvsroot/ant-contrib/ant-contrib/src/net/sf/antcontrib/logic/ForEach.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** ForEach.java 17 Mar 2003 22:25:04 -0000 1.10 --- ForEach.java 10 Apr 2003 13:49:30 -0000 1.11 *************** *** 48,55 **** package net.sf.antcontrib.logic; import org.apache.tools.ant.BuildException; - import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; - import org.apache.tools.ant.Target; import org.apache.tools.ant.Task; import org.apache.tools.ant.TaskContainer; --- 48,58 ---- package net.sf.antcontrib.logic; + import java.io.File; + import java.util.Enumeration; + import java.util.StringTokenizer; + import java.util.Vector; + import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.TaskContainer; *************** *** 57,68 **** import org.apache.tools.ant.taskdefs.CallTarget; import org.apache.tools.ant.taskdefs.Property; - import org.apache.tools.ant.taskdefs.Parallel; - import org.apache.tools.ant.taskdefs.Sequential; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Path; - import java.io.File; - import java.util.Enumeration; - import java.util.StringTokenizer; - import java.util.Vector; /*** --- 60,65 ---- *************** *** 96,99 **** --- 93,97 ---- * parameter. The default is "," * parallel --> Should all targets execute in parallel. The default is false. + * trim --> Should we trim the list item before calling the target? * * </pre> *************** *** 112,115 **** --- 110,114 ---- private Path currPath; private boolean parallel; + private boolean trim; private CallTarget currentTarget; *************** *** 153,158 **** { String tok = st.nextToken(); CallTarget ct = createCallTarget(); ! currentTarget = ct; Property p = ct.createParam(); p.setName(param); --- 152,158 ---- { String tok = st.nextToken(); + if (trim) tok = tok.trim(); CallTarget ct = createCallTarget(); ! currentTarget = ct; Property p = ct.createParam(); p.setName(param); *************** *** 188,191 **** --- 188,196 ---- } + public void setTrim(boolean trim) + { + this.trim = trim; + } + public void setList(String list) { *************** *** 210,214 **** public void setParallel(boolean parallel) { ! this.parallel = parallel; } --- 215,219 ---- public void setParallel(boolean parallel) { ! this.parallel = parallel; } |