git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275950 13f79535-47bb-0310-9956-ffa450edef68master
@@ -55,6 +55,12 @@ Other changes: | |||
- Added three new ClearCase commands: ccmkattr, ccmkdir, ccmkelem | |||
Bugzilla Report 26253. | |||
* New condition <typefound> that can be used to probe for the declaration | |||
and implementation of a task, type, preset, macro, scriptdef, whatever. | |||
As it tests for the implementation, it can be used to check for optional | |||
tasks being available. | |||
Changes from Ant 1.5.4 to Ant 1.6.0 | |||
=================================== | |||
@@ -326,6 +326,27 @@ that is "true","yes", or "on"</p> | |||
</tr> | |||
</table> | |||
<h4>typefound</h4> | |||
<p>Test whether a given type is defined, and that | |||
its implementation class can be loaded. Types include | |||
tasks, datatypes, scriptdefs, macrodefs and presetdefs.</p> | |||
<p>This condition 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">name of the type</td> | |||
<td valign="top" align="center">Yes</td> | |||
</tr> | |||
</table> | |||
<hr> | |||
<p align="center">Copyright © 2001-2003 Apache Software | |||
Foundation. All rights Reserved.</p> | |||
@@ -0,0 +1,52 @@ | |||
<project name="typefound"> | |||
<target name="testTask"> | |||
<condition property="testTask"> | |||
<typefound name="echo"/> | |||
</condition> | |||
</target> | |||
<target name="testUndefined"> | |||
<condition property="testUndefined"> | |||
<typefound /> | |||
</condition> | |||
</target> | |||
<target name="testTaskThatDoesntReallyExist"> | |||
<!-- <taskdef name="invalid-task-name" | |||
classname="org.example.invalid.task.name.hopefully"/> --> | |||
<condition property="testTaskThatDoesntReallyExist"> | |||
<typefound name="invalid-task-name"/> | |||
</condition> | |||
</target> | |||
<target name="testType"> | |||
<condition property="testType"> | |||
<typefound name="path"/> | |||
</condition> | |||
</target> | |||
<target name="testPreset"> | |||
<presetdef name="important-echo"> | |||
<echo level="error"/> | |||
</presetdef> | |||
<condition property="testPreset"> | |||
<typefound name="important-echo"/> | |||
</condition> | |||
</target> | |||
<target name="testMacro"> | |||
<macrodef name="error-message"> | |||
<element name="text" optional="false"/> | |||
<sequential> | |||
<echo level="error">@{text}</echo> | |||
</sequential> | |||
</macrodef> | |||
<condition property="testMacro"> | |||
<typefound name="error-message"/> | |||
</condition> | |||
</target> | |||
</project> |
@@ -252,6 +252,13 @@ public abstract class ConditionBase extends ProjectComponent { | |||
conditions.addElement(i); | |||
} | |||
/** | |||
* Add an <typefound> condition. | |||
* @param test | |||
*/ | |||
public void addTypeFound(TypeFound test) { | |||
conditions.addElement(test); | |||
} | |||
/** | |||
* Add an arbitrary condition | |||
* @param c a condition | |||
@@ -0,0 +1,107 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2004 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 "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 apache@apache.org. | |||
* | |||
* 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 org.apache.tools.ant.taskdefs.condition; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.ComponentHelper; | |||
import org.apache.tools.ant.ProjectComponent; | |||
import org.apache.tools.ant.AntTypeDefinition; | |||
/** | |||
* looks for a task or other Ant type that exists. Existence is defined as | |||
* the type is defined, and its implementation class is present. This | |||
* will work for datatypes and preset, script and macro definitions. | |||
*/ | |||
public class TypeFound extends ProjectComponent implements Condition { | |||
private String name; | |||
/** | |||
* the task or other type to look for | |||
* @param name | |||
*/ | |||
public void setName(String name) { | |||
this.name = name; | |||
} | |||
/** | |||
* test for a task or other ant type existing in the current project | |||
* @param typename | |||
* @return true if the typename exists | |||
*/ | |||
protected boolean doesTypeExist(String typename) { | |||
ComponentHelper helper=ComponentHelper.getComponentHelper(getProject()); | |||
AntTypeDefinition def=helper.getDefinition(typename); | |||
if(def==null) { | |||
return false; | |||
} | |||
//now verify that the class has an implementation | |||
return def.getExposedClass(getProject())!=null; | |||
} | |||
/** | |||
* Is this condition true? | |||
* @return true if the condition is true | |||
* @exception BuildException if an error occurs | |||
*/ | |||
public boolean eval() throws BuildException { | |||
if(name==null) { | |||
throw new BuildException("No type specified"); | |||
} | |||
return doesTypeExist(name); | |||
} | |||
} |
@@ -0,0 +1,95 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2004 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 "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 apache@apache.org. | |||
* | |||
* 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 org.apache.tools.ant.taskdefs.condition; | |||
import org.apache.tools.ant.BuildFileTest; | |||
/** | |||
* test the typeexists condition | |||
*/ | |||
public class TypeFoundTest extends BuildFileTest { | |||
public TypeFoundTest(String name) { | |||
super(name); | |||
} | |||
/** | |||
* The JUnit setup method | |||
*/ | |||
public void setUp() { | |||
configureProject("src/etc/testcases/taskdefs/conditions/typefound.xml"); | |||
} | |||
public void testTask() { | |||
expectPropertySet("testTask", "testTask"); | |||
} | |||
public void testUndefined() { | |||
expectBuildExceptionContaining("testUndefined","left out the name attribute", "No type specified"); | |||
} | |||
public void testTaskThatDoesntReallyExist() { | |||
expectPropertyUnset("testTaskThatDoesntReallyExist", "testTaskThatDoesntReallyExist"); | |||
} | |||
public void testType() { | |||
expectPropertySet("testType", "testType"); | |||
} | |||
public void testPreset() { | |||
expectPropertySet("testPreset", "testPreset"); | |||
} | |||
public void testMacro() { | |||
expectPropertySet("testMacro", "testMacro"); | |||
} | |||
} |