blob: 60904e03c8017bee6db08650041202ff4b91a455 [file] [log] [blame]
/*
* 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.
*
*/
package org.apache.tools.ant.taskdefs;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.PropertyHelper;
import org.apache.tools.ant.taskdefs.condition.Condition;
import org.apache.tools.ant.taskdefs.condition.ConditionBase;
/**
* Task to set a property conditionally using <uptodate>, <available>,
* and many other supported conditions.
*
* <p>This task supports boolean logic as well as pluggable conditions
* to decide, whether a property should be set.</p>
*
* <p>This task does not extend Task to take advantage of
* ConditionBase.</p>
*
* @since Ant 1.4
*
* @ant.task category="control"
*/
public class ConditionTask extends ConditionBase {
private String property = null;
private Object value = "true";
private Object alternative = null;
/**
* Constructor, names this task "condition".
*/
public ConditionTask() {
super("condition");
}
/**
* The name of the property to set. Required.
* @param p the name of the property
* @since Ant 1.4
*/
public void setProperty(String p) {
property = p;
}
/**
* The value for the property to set, if condition evaluates to true.
* Defaults to "true".
* @param value the (Object) value of the property
* @since Ant 1.8
*/
public void setValue(Object value) {
this.value = value;
}
/**
* The value for the property to set, if condition evaluates to true.
* Defaults to "true".
* @param v the value of the property
* @since Ant 1.4
*/
public void setValue(String v) {
setValue((Object) v);
}
/**
* The value for the property to set, if condition evaluates to false.
* If this attribute is not specified, the property will not be set.
* @param alt the alternate value of the property.
* @since Ant 1.8
*/
public void setElse(Object alt) {
alternative = alt;
}
/**
* The value for the property to set, if condition evaluates to false.
* If this attribute is not specified, the property will not be set.
* @param e the alternate value of the property.
* @since Ant 1.6.3
*/
public void setElse(String e) {
setElse((Object) e);
}
/**
* See whether our nested condition holds and set the property.
*
* @since Ant 1.4
* @exception BuildException if an error occurs
*/
public void execute() throws BuildException {
if (countConditions() > 1) {
throw new BuildException("You must not nest more than one condition into <"
+ getTaskName() + ">");
}
if (countConditions() < 1) {
throw new BuildException("You must nest a condition into <" + getTaskName() + ">");
}
if (property == null) {
throw new BuildException("The property attribute is required.");
}
Condition c = (Condition) getConditions().nextElement();
if (c.eval()) {
log("Condition true; setting " + property + " to " + value, Project.MSG_DEBUG);
PropertyHelper.getPropertyHelper(getProject()).setNewProperty(property, value);
} else if (alternative != null) {
log("Condition false; setting " + property + " to " + alternative, Project.MSG_DEBUG);
PropertyHelper.getPropertyHelper(getProject()).setNewProperty(property, alternative);
} else {
log("Condition false; not setting " + property, Project.MSG_DEBUG);
}
}
}