From: Stefan B. <bo...@us...> - 2002-01-07 11:04:52
|
Update of /cvsroot/ant-contrib/ant-contrib/src/net/sf/antcontrib/logic In directory usw-pr-cvs1:/tmp/cvs-serv26275/src/net/sf/antcontrib/logic Added Files: IfTask.java Log Message: <if> task --- NEW FILE: IfTask.java --- /* * The Apache Software License, Version 1.1 * * Copyright (c) 2001 The Apache Software Foundation. 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 * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Ant", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact ap...@ap.... * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * 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 APACHE SOFTWARE FOUNDATION 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */ package net.sf.antcontrib.logic; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.taskdefs.Sequential; import org.apache.tools.ant.taskdefs.condition.Condition; import org.apache.tools.ant.taskdefs.condition.ConditionBase; /** * Perform some tasks based on whether a given condition holds true or * not. * * <p>This task is heavily based on the Condition framework that can * be found in Ant 1.4 and later, therefore it cannot be used in * conjunction with versions of Ant prior to 1.4.</p> * * <p>This task doesn't have any attributes, the condition to test is * specified by a nested element - see the documentation of your * <code><condition></code> task (see * <a href="http://jakarta.apache.org/ant/manual/CoreTasks/condition.html">the * online documentation</a> for example) for a complete list of nested * elements.</p> * * <p>Just like the <code><condition></code> task, only a single * condition can be specified - you combine them using * <code><and></code> or <code><or></code> conditions.</p> * * <p>In addition to the condition, you can specify two different * child elements, <code><then></code> and * <code><else></code>. Both are optional and both must not be * used more than once inside the same task. Both elements are * containers for Ant tasks, just like Ant's * <code><parallel></code> and <code><sequential></code> * tasks - in fact they are implemented using the same class as Ant's * <code><sequential></code> task.</p> * * <p>Use the following task to define the <code><if></code> * task before you use it the first time:</p> * * <pre><code> * <taskdef name="if" classname="net.sf.antcontrib.logic.IfTask" /> * </code></pre> * * <h3>Crude Example</h3> * * <pre><code> * <if> * <equals arg1="${foo}" arg2="bar" /> * <then> * <echo message="The value of property foo is bar" /> * </then> * <else> * <echo message="The value of property foo is not bar" /> * </else> * </if> * </code></pre> * * @author <a href="mailto:ste...@ep...">Stefan Bodewig</a> */ public class IfTask extends ConditionBase { private Sequential thenTasks = null; private Sequential elseTasks = null; /** * A nested <then> element - a container of tasks that will * be run if the condition holds true. * * <p>Not required.</p> */ public void addThen(Sequential t) { if (thenTasks != null) { throw new BuildException("You must not nest more than one <then> into <if>"); } thenTasks = t; } /** * A nested <else> element - a container of tasks that will * be run if the condition doesn't hold true. * * <p>Not required.</p> */ public void addElse(Sequential e) { if (elseTasks != null) { throw new BuildException("You must not nest more than one <else> into <if>"); } elseTasks = e; } public void execute() throws BuildException { if (countConditions() > 1) { throw new BuildException("You must not nest more than one condition into <if>"); } if (countConditions() < 1) { throw new BuildException("You must nest a condition into <if>"); } Condition c = (Condition) getConditions().nextElement(); if (c.eval()) { if (thenTasks != null) { thenTasks.perform(); } } else { if (elseTasks != null) { elseTasks.perform(); } } } } |