Leave in the website documentation as that still has a few nuggets of wisdown and things to think about git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271936 13f79535-47bb-0310-9956-ffa450edef68master
@@ -1,55 +0,0 @@ | |||||
@echo off | |||||
rem -------------------------------------------------------------------------- | |||||
rem build.bat - Build Script for Frantic (lifted from Tomcat...thx guys) | |||||
rem | |||||
rem Environment Variable Prerequisites: | |||||
rem | |||||
rem JAVA_HOME Must point at your Java Development Kit [REQUIRED] | |||||
rem | |||||
rem --------------------------------------------------------------------------- | |||||
rem ----- Save Environment Variables ------------------------------------------ | |||||
set _CLASSPATH=%CLASSPATH% | |||||
set _CLASSES=%CLASSES% | |||||
rem ----- Verify and Set Required Environment Variables ----------------------- | |||||
if not "%JAVA_HOME%" == "" goto gotJavaHome | |||||
echo You must set JAVA_HOME to point at your Java Development Kit installation | |||||
goto cleanup | |||||
:gotJavaHome | |||||
rem ----- Set Up The Runtime Classpath ---------------------------------------- | |||||
if not "%CLASSPATH%" == "" set CLASSPATH=%CLASSPATH%; | |||||
set CLASSPATH=%CLASSPATH%;./src | |||||
rem ----- Execute The Requested Build ----------------------------------------- | |||||
if not exist dist mkdir dist | |||||
if not exist dist\lib mkdir dist\lib | |||||
if not exist dist\lib\classes mkdir dist\lib\classes | |||||
if not exist dist\doc mkdir dist\doc | |||||
if not exist dist\doc\api mkdir dist\doc\api | |||||
set CLASSES=dist\lib\classes | |||||
%JAVA_HOME%\bin\javac -d %CLASSES% src/org/apache/ant/test/*.java | |||||
%JAVA_HOME%\bin\jar cvf dist\lib\frantic.jar -C dist\lib\classes . | |||||
xcopy website\*.html dist\doc /s /y | |||||
xcopy website\*.gif dist\doc /s /y | |||||
%JAVA_HOME%\bin\javadoc -protected -sourcepath src -d dist\doc\api -author org.apache.ant org.apache.ant.engine org.apache.ant.tasks org.apache.ant.tasks.build org.apache.ant.tasks.util | |||||
rem ----- Restore Environment Variables --------------------------------------- | |||||
:cleanup | |||||
set CLASSPATH=%_CLASSPATH% | |||||
set CLASSES=%_CLASSES% | |||||
set _CLASSPATH= | |||||
set _CLASSES= | |||||
:finish | |||||
@@ -1,65 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant; | |||||
public class AntException extends Exception { | |||||
public AntException() { | |||||
super(); | |||||
} | |||||
public AntException(String message) { | |||||
super(message); | |||||
} | |||||
} |
@@ -1,72 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.engine; | |||||
import java.util.*; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.tasks.Task; | |||||
public interface AntEngineListener extends EventListener { | |||||
void engineStart(AntEvent e); | |||||
void engineFinish(AntEvent e); | |||||
void taskStart(AntEvent e); | |||||
void taskExecute(AntEvent e); | |||||
void taskFinish(AntEvent e); | |||||
void taskMessage(AntEvent e, String message); | |||||
void taskException(AntEvent e, AntException exception); | |||||
} |
@@ -1,80 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.engine; | |||||
import java.util.EventObject; | |||||
import org.apache.ant.tasks.Task; | |||||
public class AntEvent extends EventObject { | |||||
Task task; | |||||
public AntEvent(Object source) { | |||||
this(source, null); | |||||
} | |||||
public AntEvent(Object source, Task task) { | |||||
super(source); | |||||
this.task = task; | |||||
} | |||||
public Task getTask() { | |||||
return task; | |||||
} | |||||
public void setTask(Task task) { | |||||
this.task = task; | |||||
} | |||||
} |
@@ -1,166 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.engine; | |||||
import java.io.*; | |||||
import java.text.*; | |||||
import java.util.*; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.tasks.Task; | |||||
public class DefaultEngineListener implements AntEngineListener { | |||||
protected PrintStream outputStream; | |||||
protected long startTime; | |||||
protected StringBuffer sb = new StringBuffer(); | |||||
protected int indentSpaces = 4; | |||||
protected boolean indent = true; | |||||
protected int curIndent = 0; | |||||
protected SimpleDateFormat timestamp = new SimpleDateFormat("HH:mm:ss:SSS"); | |||||
public DefaultEngineListener() { | |||||
this(System.out); | |||||
} | |||||
public DefaultEngineListener(PrintStream outputStream) { | |||||
this.outputStream = outputStream; | |||||
} | |||||
public void setIndentSpaces(int spaces) { | |||||
this.indentSpaces = spaces; | |||||
} | |||||
public int getIndentSpaces() { | |||||
return indentSpaces; | |||||
} | |||||
public void setIndent(boolean on) { | |||||
this.indent = on; | |||||
} | |||||
public boolean isIndent() { | |||||
return indent; | |||||
} | |||||
protected String padLeft(String s, int length) { | |||||
sb.setLength(0); | |||||
sb.append(s); | |||||
while (sb.length() < length) { | |||||
sb.insert(0, ' '); | |||||
} | |||||
return sb.toString(); | |||||
} | |||||
protected void output(String message) { | |||||
if (!indent) { | |||||
outputStream.println(message); | |||||
return; | |||||
} | |||||
// shouldn't happen, but let's be on the safe side | |||||
if (curIndent < 0) { | |||||
curIndent = 0; | |||||
} | |||||
outputStream.println( | |||||
padLeft(message, message.length() + (indentSpaces * curIndent))); | |||||
} | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
// AntEngineListener Implementation // | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
public void engineStart(AntEvent e) { | |||||
Date now = new Date(); | |||||
output("Engine Started: " + timestamp.format(now)); | |||||
startTime = now.getTime(); | |||||
} | |||||
public void engineFinish(AntEvent e) { | |||||
Date now = new Date(); | |||||
long elapsed = System.currentTimeMillis() - startTime; | |||||
output("Engine Finished: " + timestamp.format(now)); | |||||
output("Elapsed Time: " + (elapsed / 1000F) + " seconds"); | |||||
} | |||||
public void taskStart(AntEvent e) { | |||||
output("Task Started: " + e.getTask().getFullyQualifiedName()); | |||||
curIndent++; | |||||
} | |||||
public void taskExecute(AntEvent e){ | |||||
output("Task Execution: " + e.getTask().getFullyQualifiedName()); | |||||
} | |||||
public void taskFinish(AntEvent e){ | |||||
curIndent--; | |||||
output("Task Finished: " + e.getTask().getFullyQualifiedName()); | |||||
} | |||||
public void taskMessage(AntEvent e, String message){ | |||||
curIndent++; | |||||
output("Task Message: " + e.getTask().getFullyQualifiedName() + ": " + | |||||
message); | |||||
curIndent--; | |||||
} | |||||
public void taskException(AntEvent e, AntException exception){ | |||||
output("Task Exception: " + e.getTask().getFullyQualifiedName() + ": " + | |||||
exception.getMessage()); | |||||
} | |||||
} |
@@ -1,62 +0,0 @@ | |||||
package org.apache.ant.engine; | |||||
import java.util.*; | |||||
public class HierarchicalHashtable extends Hashtable { | |||||
private HierarchicalHashtable parent; | |||||
public HierarchicalHashtable() { | |||||
this(null); | |||||
} | |||||
public HierarchicalHashtable(HierarchicalHashtable parent) { | |||||
super(); | |||||
this.parent = parent; | |||||
} | |||||
public HierarchicalHashtable getParent() { | |||||
return parent; | |||||
} | |||||
public void setParent(HierarchicalHashtable parent) { | |||||
this.parent = parent; | |||||
} | |||||
public List getPropertyNames() { | |||||
ArrayList list = new ArrayList(); | |||||
Enumeration e = keys(); | |||||
while (e.hasMoreElements()) { | |||||
list.add(e.nextElement()); | |||||
} | |||||
if (getParent() != null) { | |||||
list.addAll(getParent().getPropertyNames()); | |||||
} | |||||
return list; | |||||
} | |||||
public Object getPropertyValue(String name) { | |||||
Object value = get(name); | |||||
if (value == null && getParent() != null) { | |||||
return getParent().getPropertyValue(name); | |||||
} | |||||
return value; | |||||
} | |||||
public void setPropertyValue(String name, Object value) { | |||||
put(name, value); | |||||
} | |||||
public void removePropertyValue(String name) { | |||||
Object value = get(name); | |||||
if (value == null && getParent() != null) { | |||||
getParent().removePropertyValue(name); | |||||
} | |||||
if (value != null) { | |||||
remove(name); | |||||
} | |||||
} | |||||
} |
@@ -1,124 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.engine; | |||||
import java.util.*; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.tasks.Task; | |||||
/** | |||||
* The TaskEngine interface defines the methods that a TaskEngine are required | |||||
* to implement. This interface is also passed to each Task in order for them to | |||||
* get access to some utility functions like inserting a new Task during a run, | |||||
* or forcing the execution path of Tasks to be modified. | |||||
*/ | |||||
public interface TaskEngine { | |||||
void addAntEngineListener(AntEngineListener listener); | |||||
void removeAntEngineListener(AntEngineListener listener); | |||||
void execute(Task task) throws AntException; | |||||
void execute(Task root, Task task) throws AntException; | |||||
void message(Task task, String message); | |||||
Task getNextExecuteTask(); | |||||
/** | |||||
* Returns a list of all property names that the current task stack is aware | |||||
* of. This is a recursive list of all property names. | |||||
*/ | |||||
List getPropertyNames(); | |||||
/** | |||||
* May be called to obtain property values that have been defined. Property | |||||
* values are maintained in a hierarchical manner as each task is executed. | |||||
* When a property is requested, if the current execution level does not | |||||
* contain the property, the execution parent is then queried. This | |||||
* continues until there is no where else to go! | |||||
* <p></p> | |||||
* Maybe this should be a Hashtable implementation and be able to return | |||||
* Object? Is that a little overkill considering these values will usually | |||||
* be Strings? Perhaps someone will have a farfetched idea of storing a | |||||
* Task in a property? | |||||
*/ | |||||
Object getPropertyValue(String name); | |||||
/** | |||||
* Adds the name-value pair to this execution stack property list. If the | |||||
* property is declared in parent tasks, I don't really see a reason for not | |||||
* adding it again to this execution list. This would achieve a nice scoped | |||||
* parameter list that is dictated by nesting levels. | |||||
* <p></p> | |||||
* This is against the current Ant (1.2) specification, but I'm not sure why | |||||
* that restriction was there. It would be simple to implement here if it | |||||
* again required. | |||||
*/ | |||||
void setPropertyValue(String name, Object value); | |||||
/** | |||||
* Removes the given property from the property list. I haven't thought too | |||||
* much about the rules behind this method. My current thinking is that the | |||||
* property is removed no matter what level of the execution stack the | |||||
* property was defined in. I think this should be good in most cases. If it | |||||
* ever surfaces that the property should just be unavailable for this stack | |||||
* level (and other's below it), then the implementation can be modified to | |||||
* keep a list of these "unavailable" properties. | |||||
*/ | |||||
void removePropertyValue(String name); | |||||
} |
@@ -1,397 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.engine; | |||||
import java.util.*; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.tasks.Task; | |||||
/** | |||||
* The engine that actually invokes each Task. In addition to specifying a Task | |||||
* to execute, it may be desirable to specify the root Task that will define | |||||
* an execution cycle. | |||||
*/ | |||||
public class TaskEngineImpl implements TaskEngine { | |||||
/** | |||||
* Analagous to a call stack, but with Tasks. | |||||
*/ | |||||
protected Stack taskStack = new Stack();; | |||||
/** | |||||
* As the task stack is built, a mirror representation will also be | |||||
* contructed that will hold property values. | |||||
*/ | |||||
protected Stack propertyStack = new Stack(); | |||||
/** | |||||
* Keeps track of AntEngineListeners. We don't have to use Vector because we | |||||
* take care of synchronization on the add, remove, and iteration operations. | |||||
*/ | |||||
protected ArrayList listenerList = new ArrayList(); | |||||
private int engineLevel = 0; | |||||
/** | |||||
* Constructor is private so it cannot be instantiated. Users of this class | |||||
* will get an instance by using the getTaskEngine() method. This will allow | |||||
* us to have a simple Factory implementation. We may use a Singleton | |||||
* implementation, or a collection pool. The choice is up to us. | |||||
*/ | |||||
private TaskEngineImpl() { | |||||
super(); | |||||
} | |||||
/** | |||||
* Return a usable instance of a TaskEngine to the requestor. Nothing | |||||
* sophisticated yet, simple doles out a new instance each time. | |||||
*/ | |||||
public static TaskEngine getTaskEngine() { | |||||
return new TaskEngineImpl(); | |||||
} | |||||
/** | |||||
* Walk the list of Tasks backwards until the root is reached. Keep track of | |||||
* the Tasks along the way in a Stack. Return null if the root Task is not a | |||||
* parent of the provided Task. | |||||
*/ | |||||
protected Stack getTaskStack(Task root, Task task) { | |||||
Stack stack = new Stack(); | |||||
while (task != null) { | |||||
stack.push(task); | |||||
if (task == root) { | |||||
return stack; | |||||
} | |||||
task = task.getParent(); | |||||
} | |||||
return null; | |||||
} | |||||
/** | |||||
* Returns the next Task to be executed from the taskStack. The task is not | |||||
* removed from the Stack. | |||||
*/ | |||||
public Task getNextExecuteTask() { | |||||
try { | |||||
return (Task)taskStack.peek(); | |||||
} catch (EmptyStackException esx) { | |||||
return null; | |||||
} | |||||
} | |||||
/** | |||||
* If no root is specified, we will assume that the user wants to execute | |||||
* the Task with no root. This is accomplished by using the Task parameter | |||||
* as its own root. | |||||
*/ | |||||
public void execute(Task task) throws AntException { | |||||
execute(task, task); | |||||
} | |||||
/** | |||||
* This is the workhorse, however it has been made to be very simple. Given | |||||
* the ability to specify a path between root and the target Task, we build | |||||
* a trail of Tasks to connect the two. Next we execute each Task on the way | |||||
* between the two Tasks. Once we arrive at the Task to execute, we execute | |||||
* all of its chlidren. | |||||
*/ | |||||
public void execute(Task root, Task task) throws AntException { | |||||
fireEngineStart(); | |||||
try { | |||||
taskStack = getTaskStack(root, task);; | |||||
if (taskStack == null) { | |||||
throw new AntException( | |||||
"The execution root Task is not an ancestor of the execution Task."); | |||||
} | |||||
// Pop thru the stack and execute each Task we come across. | |||||
while (!taskStack.isEmpty()) { | |||||
executeTask(taskStack); | |||||
} | |||||
} finally { | |||||
fireEngineFinish(); | |||||
} | |||||
} | |||||
/** | |||||
* A recursive routine that allows all Tasks in the stack to be executed. At | |||||
* the same time, the stack may grow to include new Tasks. | |||||
*/ | |||||
protected void executeTask(Stack taskStack) throws AntException { | |||||
Task task = (Task)taskStack.pop(); | |||||
fireTaskStart(task); | |||||
try { | |||||
// Add a new property holder for this task to the property stack. Note | |||||
// that the parent of the new holder is the current stack head. | |||||
if (task.isPropertyContainer()) { | |||||
if (propertyStack.isEmpty()) { | |||||
propertyStack.push(new HierarchicalHashtable()); | |||||
} else { | |||||
propertyStack.push(new HierarchicalHashtable( | |||||
(HierarchicalHashtable)propertyStack.peek())); | |||||
} | |||||
} | |||||
// Allow Task to do whatever it may need to do before touching its | |||||
// children. | |||||
task.init(this); | |||||
// Iterate the Task's children and execute any priority Tasks. | |||||
Task[] tasks = task.getChildren(); | |||||
for (int i = 0, c = tasks.length; i < c; i++) { | |||||
if (tasks[i].getExecutionMode() == Task.EXECUTION_MODE_PRIORITY) { | |||||
taskStack.push(tasks[i]); | |||||
executeTask(taskStack); | |||||
} | |||||
} | |||||
// Allow the Task to validate. | |||||
task.validate(); | |||||
// Finally, execute the Task. | |||||
fireTaskExecute(task); | |||||
task.execute(this); | |||||
// We can discard the no londer needed property holder. | |||||
if (task.isPropertyContainer()) { | |||||
propertyStack.pop(); | |||||
} | |||||
} catch (AntException ax) { | |||||
fireTaskException(task, ax); | |||||
} finally { | |||||
fireTaskFinish(task); | |||||
} | |||||
} | |||||
/** | |||||
* Causes an AntEvent to be generated and fired to all listeners. | |||||
*/ | |||||
public void message(Task task, String message) { | |||||
fireTaskMessage(task, message); | |||||
} | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
// Listener Support // | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
public synchronized void addAntEngineListener(AntEngineListener listener) { | |||||
if (!listenerList.contains(listener)) { | |||||
listenerList.add(listener); | |||||
} | |||||
} | |||||
public synchronized void removeAntEngineListener(AntEngineListener listener) { | |||||
if (listenerList.contains(listener)) { | |||||
listenerList.remove(listener); | |||||
} | |||||
} | |||||
protected synchronized void fireEngineStart() { | |||||
if (engineLevel++ > 0) return; | |||||
AntEvent e = new AntEvent(this); | |||||
for (int i = 0; i < listenerList.size(); i++) { | |||||
((AntEngineListener)listenerList.get(i)).engineStart(e); | |||||
} | |||||
} | |||||
protected synchronized void fireEngineFinish() { | |||||
if (--engineLevel > 0) return; | |||||
AntEvent e = new AntEvent(this); | |||||
for (int i = 0; i < listenerList.size(); i++) { | |||||
((AntEngineListener)listenerList.get(i)).engineFinish(e); | |||||
} | |||||
} | |||||
protected synchronized void fireTaskStart(Task task) { | |||||
AntEvent e = new AntEvent(this, task); | |||||
for (int i = 0; i < listenerList.size(); i++) { | |||||
((AntEngineListener)listenerList.get(i)).taskStart(e); | |||||
} | |||||
} | |||||
protected synchronized void fireTaskExecute(Task task) { | |||||
AntEvent e = new AntEvent(this, task); | |||||
for (int i = 0; i < listenerList.size(); i++) { | |||||
((AntEngineListener)listenerList.get(i)).taskExecute(e); | |||||
} | |||||
} | |||||
protected synchronized void fireTaskFinish(Task task) { | |||||
AntEvent e = new AntEvent(this, task); | |||||
for (int i = 0; i < listenerList.size(); i++) { | |||||
((AntEngineListener)listenerList.get(i)).taskFinish(e); | |||||
} | |||||
} | |||||
protected synchronized void fireTaskMessage(Task task, String message) { | |||||
AntEvent e = new AntEvent(this, task); | |||||
for (int i = 0; i < listenerList.size(); i++) { | |||||
((AntEngineListener)listenerList.get(i)).taskMessage(e, message); | |||||
} | |||||
} | |||||
protected synchronized void fireTaskException(Task task, AntException exception) { | |||||
AntEvent e = new AntEvent(this, task); | |||||
for (int i = 0; i < listenerList.size(); i++) { | |||||
((AntEngineListener)listenerList.get(i)).taskException(e, exception); | |||||
} | |||||
} | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
// Property Support Methods // | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
/** | |||||
* This is the routine that will perform key substitution. Phrase will come | |||||
* in as "src/${someparam}" and be converted to the appropriate "normalized" | |||||
* string. I suppose while I'm doing this we should support phrases with | |||||
* nested keys, such as "src/${build${token}}". Also, we should properly | |||||
* handle cases where ${someparam} will evaluate to ${anotherparam}. | |||||
* <p></p> | |||||
* One thing that will be different from the Ant 1.2 mechanismoccurs when a | |||||
* parameter value is not found. The substitution routine inserts it back in | |||||
* the phrase unchanged. I have opted to insert a zero-length string | |||||
* instead. | |||||
* <p></p> | |||||
* I should add a switch to the engine that will give the user the ability | |||||
* to throw an exception if a key is not found. Pretty easy, except this | |||||
* method is a strange place for an AntException to be thrown. Perhaps I | |||||
* should use a RuntimeException instead... | |||||
* <p></p> | |||||
* A brief rundown on the logic here: | |||||
* I check for the first instances of a key prefix. | |||||
* If none found we return the phrase as is. | |||||
* If key prefix is found get location of next key prefix and suffix. | |||||
* If suffix is found first, we have found a key. | |||||
* If there is no suffix, we return the phrase. | |||||
*/ | |||||
static final String KEY_PREFIX = "${"; | |||||
static final String KEY_SUFFIX = "}"; | |||||
protected String substitute(String phrase) { | |||||
StringBuffer sb = new StringBuffer(phrase); | |||||
int startPoint = 0; | |||||
while (startPoint >= 0 && startPoint < phrase.length()) { | |||||
int pre1 = startPoint + phrase.substring(startPoint).indexOf(KEY_PREFIX); | |||||
if (pre1 < 0) break; | |||||
int suf1 = phrase.substring(pre1 + KEY_PREFIX.length()).indexOf(KEY_SUFFIX); | |||||
if (suf1 < 0) break; | |||||
suf1 = suf1 + pre1 + KEY_PREFIX.length(); | |||||
int pre2 = phrase.substring(pre1 + KEY_PREFIX.length()).indexOf(KEY_PREFIX); | |||||
if (pre2 < 0) { | |||||
pre2 = phrase.length() + 1; | |||||
} else { | |||||
pre2 = pre2 + pre1 + KEY_PREFIX.length(); | |||||
} | |||||
if (suf1 < pre2) { | |||||
// we have found a token | |||||
String key = sb.substring(pre1 + KEY_PREFIX.length(), suf1); | |||||
sb.delete(pre1, suf1 + 1); | |||||
Object value = getPropertyValueNoSubstitution(key); | |||||
if (value != null) { | |||||
sb.insert(pre1, value.toString()); | |||||
} | |||||
return substitute(sb.toString()); | |||||
} | |||||
startPoint = pre2; | |||||
} | |||||
return sb.toString(); | |||||
} | |||||
public List getPropertyNames() { | |||||
if (propertyStack.isEmpty()) return new ArrayList(); | |||||
HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek(); | |||||
return hash.getPropertyNames(); | |||||
} | |||||
public Object getPropertyValue(String name) { | |||||
if (propertyStack.isEmpty()) return null; | |||||
HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek(); | |||||
Object result = hash.getPropertyValue(name); | |||||
if (result instanceof String) { | |||||
return substitute((String)result); | |||||
} else { | |||||
return result; | |||||
} | |||||
} | |||||
protected Object getPropertyValueNoSubstitution(String name) { | |||||
if (propertyStack.isEmpty()) return null; | |||||
HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek(); | |||||
return hash.getPropertyValue(name); | |||||
} | |||||
public void setPropertyValue(String name, Object value) { | |||||
if (propertyStack.isEmpty()) return; | |||||
HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek(); | |||||
hash.setPropertyValue(name, value); | |||||
} | |||||
public void removePropertyValue(String name) { | |||||
if (propertyStack.isEmpty()) return; | |||||
HierarchicalHashtable hash = (HierarchicalHashtable)propertyStack.peek(); | |||||
hash.remove(name); | |||||
} | |||||
} |
@@ -1,189 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.tasks; | |||||
import java.util.*; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.engine.TaskEngine; | |||||
import org.apache.ant.tasks.Task; | |||||
public abstract class BaseTask implements Task { | |||||
protected Task parent; | |||||
protected ArrayList children = new ArrayList(); | |||||
protected String taskName; | |||||
protected Properties properties = new Properties(); | |||||
public BaseTask() { | |||||
super(); | |||||
} | |||||
public void init(TaskEngine engine) throws AntException { | |||||
} | |||||
public void execute(TaskEngine engine) throws AntException { | |||||
} | |||||
// abstract public String getTaskTag(); | |||||
public void validate() throws AntException {} | |||||
public String getFullyQualifiedName() { | |||||
if (getParent() == null) return Task.NAME_SEPARATOR + taskName; | |||||
return getParent().getFullyQualifiedName() + Task.NAME_SEPARATOR + taskName; | |||||
} | |||||
public int hashCode() { | |||||
return getFullyQualifiedName().hashCode(); | |||||
} | |||||
public String getTaskName() { | |||||
return taskName; | |||||
} | |||||
public void setTaskName(String taskName) { | |||||
this.taskName = taskName; | |||||
} | |||||
public int getExecutionMode() { | |||||
return Task.EXECUTION_MODE_PRIORITY; | |||||
} | |||||
public String getAttributeValue(String name) { | |||||
/**@todo: Implement this org.apache.ant.Task method*/ | |||||
throw new java.lang.UnsupportedOperationException("Method getAttributeValue() not yet implemented."); | |||||
} | |||||
public Task getParent() { | |||||
return parent; | |||||
} | |||||
/** | |||||
* We have to trust the developers to not screw up the hierarchy by changing | |||||
* the parent of a Task when it is a child of another. | |||||
*/ | |||||
public void setParent(Task parent) { | |||||
this.parent = parent; | |||||
} | |||||
public Task[] getChildren() { | |||||
return (Task[])children.toArray(new Task[children.size()]); | |||||
} | |||||
public void addChild(Task task) { | |||||
children.add(task); | |||||
task.setParent(this); | |||||
} | |||||
public void removeChild(Task task) { | |||||
children.remove(task); | |||||
} | |||||
public Task getRootTask() { | |||||
if (getParent() != null) { | |||||
return getParent().getRootTask(); | |||||
} | |||||
return this; | |||||
} | |||||
protected Task getTaskByName(String taskName) { | |||||
Task[] tasks = getChildren(); | |||||
for (int i = 0, c = tasks.length; i < c; i++) { | |||||
if (tasks[i].getTaskName().equals(taskName)) { | |||||
return tasks[i]; | |||||
} | |||||
} | |||||
return null; | |||||
} | |||||
public Task getTask(String taskPath) { | |||||
taskPath = taskPath.trim(); | |||||
int slashPos = taskPath.indexOf("/"); | |||||
// starts with '/' | |||||
if (slashPos == 0) { | |||||
return getRootTask().getTask(taskPath.substring(slashPos + 1)); | |||||
} else | |||||
// starts with '../' | |||||
if (taskPath.startsWith("../") || taskPath.equals("..")) { | |||||
return getParent().getTask(taskPath.substring(3)); | |||||
} else | |||||
// starts with './' | |||||
if (taskPath.startsWith("./") || taskPath.equals(".")) { | |||||
return getTask(taskPath.substring(2)); | |||||
} else | |||||
// starts with 'some_level/' | |||||
if (slashPos > 0) { | |||||
String levelName = taskPath.substring(0, slashPos); | |||||
return getTaskByName(levelName).getTask(taskPath.substring(slashPos + 1)); | |||||
} | |||||
// there are no more directories; what remains is the name of the task | |||||
if (slashPos < 0) { | |||||
if (taskPath.length() == 0) return this; | |||||
return getTaskByName(taskPath); | |||||
} | |||||
return null; | |||||
} | |||||
public boolean isPropertyContainer() { | |||||
return false; | |||||
} | |||||
} |
@@ -1,179 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.tasks; | |||||
import java.util.*; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.engine.TaskEngine; | |||||
/** | |||||
* Task is the core interface for all structures that will be processed by the | |||||
* TaskEngine. | |||||
*/ | |||||
public interface Task { | |||||
public static final int EXECUTION_MODE_IMPLICIT = 0; | |||||
public static final int EXECUTION_MODE_EXPLICIT = 1; | |||||
public static final int EXECUTION_MODE_PRIORITY = 2; | |||||
public static final char NAME_SEPARATOR = '/'; | |||||
/** | |||||
* Causes the existing Task implementation to execute. | |||||
*/ | |||||
void execute(TaskEngine engine) throws AntException; | |||||
/** | |||||
* Called when the Task first gets "noticed" by the TaskEngine. | |||||
*/ | |||||
void init(TaskEngine engine) throws AntException; | |||||
/** | |||||
* Each Task should have the ability to validate its state. This would be | |||||
* invoked by the TaskEngine prior to commencing an execution cycle. | |||||
*/ | |||||
void validate() throws AntException; | |||||
/** | |||||
* Just a simple name used to identify a Task. This name is only sufficient | |||||
* for simple debugging and GUI output. It does not uniquely identify a | |||||
* Task. | |||||
* | |||||
* @see #getFullyQualifiedName | |||||
*/ | |||||
String getTaskName(); | |||||
/** | |||||
* Although this method seems to tie the concept of XML "tags", it is not | |||||
* necessarily so. The tag name will serve as a general description of the | |||||
* type of tag represented by this class instance. It is primarily used by | |||||
* Tasks with sub-Tasks that are not assigned to a specific class | |||||
* implementation. | |||||
* | |||||
* @see org.apache.ant.tasks.UnknownTask | |||||
*/ | |||||
// String getTaskTag(); | |||||
/** | |||||
* A mechanism for locating a task relative to the current task. This | |||||
* navigation sceme will mimic a typical OS system. '..' will move back | |||||
* a level in the Task tree. If taskPath begins with '/' then the root node | |||||
* will be used as a starting point. | |||||
* <p></p> | |||||
* Returns null of no task is found at this location. | |||||
*/ | |||||
Task getTask(String taskPath); | |||||
/** | |||||
* Proceed backwards through the nodes until we come across the first Task | |||||
* in the tree. This is the root Task. | |||||
*/ | |||||
Task getRootTask(); | |||||
/** | |||||
* The "fully-qualified" name of a Task is the Task's name, prepended by its | |||||
* parent's name, prepended by its parent's name, etc. This method may be | |||||
* used by the Task's hashCode() method to calculate a hash that will | |||||
* uniquely identify a Task. | |||||
*/ | |||||
String getFullyQualifiedName(); | |||||
/** | |||||
* Determines whether this Task is executed whenever its parent is executed, | |||||
* or if its execution must be specifically requested. | |||||
* <p></p> | |||||
* <dl><dt>EXECUTION_MODE_EXPLICIT</dt> | |||||
* <dd>Requires interaction by the TaskEngine in order to execute.</dd> | |||||
* <dt>EXECUTION_MODE_IMPLICIT</dt> | |||||
* <dd>This Task is automatically executed when its parent is | |||||
* executed.</dd> | |||||
* <dt>EXECUTION_MODE_PRIORITY</dt> | |||||
* <dd>These Tasks are executed prior to its parent's execution</dd></dl> | |||||
* <p></p> | |||||
* The default mode should probably be EXECUTION_MODE_IMPLICIT. In the | |||||
* build domain of Ant, every Task below a Task will normally be executed. | |||||
* The major exception to this is the Target. When a Project Task is | |||||
* executed, all Target Tasks do <i>not</i> automatically fire, however all | |||||
* Property Tasks <i>do</i> execute. | |||||
*/ | |||||
int getExecutionMode(); | |||||
/** | |||||
* Determines whether a Task is suitable for holding property values. | |||||
*/ | |||||
boolean isPropertyContainer(); | |||||
/** | |||||
* Each Task will hold its attributes in some manner. This method will allow | |||||
* the Task implementation to return the value of its attribute. | |||||
*/ | |||||
String getAttributeValue(String name); | |||||
/** | |||||
* Returns this Task's parent Task. If this Task is the root Task, then this | |||||
* method will return null. | |||||
*/ | |||||
Task getParent(); | |||||
/** | |||||
* Sets the Task's parent. | |||||
*/ | |||||
void setParent(Task parent); | |||||
/** | |||||
* Returns the an array of Task objects that are subordinate to this Task. | |||||
*/ | |||||
Task[] getChildren(); | |||||
} |
@@ -1,113 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.tasks.build; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.engine.TaskEngine; | |||||
import org.apache.ant.tasks.BaseTask; | |||||
import org.apache.ant.tasks.Task; | |||||
public class Project extends BaseTask { | |||||
private String def; | |||||
private String basedir; | |||||
public Project() { | |||||
super(); | |||||
} | |||||
public String getDefault() { | |||||
return def; | |||||
} | |||||
public void setDefault(String newDefault) { | |||||
def = newDefault; | |||||
} | |||||
public void setBasedir(String newBasedir) { | |||||
basedir = newBasedir; | |||||
} | |||||
public String getBasedir() { | |||||
return basedir; | |||||
} | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
// BaseTask Implementation // | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
public void init(TaskEngine engine) throws AntException { | |||||
} | |||||
/** | |||||
* Here is where we check and see if there are any Targets specified. We do | |||||
* this by peeking into the known taskStack and checking to see if a Target | |||||
* is next to be executed. If not, we add our default Target to the list. | |||||
*/ | |||||
public void execute(TaskEngine engine) throws AntException { | |||||
// see if it is necessary to invoke the default task | |||||
Task task = engine.getNextExecuteTask(); | |||||
if (task == null && getDefault() != null) { | |||||
Task defaultTask = getTask(getDefault()); | |||||
if (defaultTask != null) { | |||||
engine.execute(defaultTask); | |||||
} | |||||
} | |||||
} | |||||
public boolean isPropertyContainer() { | |||||
return true; | |||||
} | |||||
} |
@@ -1,123 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.tasks.build; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.engine.TaskEngine; | |||||
import org.apache.ant.tasks.BaseTask; | |||||
import org.apache.ant.tasks.Task; | |||||
public class Target extends BaseTask { | |||||
private String depends; | |||||
private String ifCond; | |||||
private String unlessCond; | |||||
public Target() { | |||||
super(); | |||||
} | |||||
public String getIf() { | |||||
return ifCond; | |||||
} | |||||
public void setIf(String condition) { | |||||
this.ifCond = condition; | |||||
} | |||||
public String getUnless() { | |||||
return unlessCond; | |||||
} | |||||
public void setUnless(String condition) { | |||||
this.unlessCond = condition; | |||||
} | |||||
public void setDepends(String newDepends) { | |||||
this.depends = newDepends; | |||||
} | |||||
public String getDepends() { | |||||
return depends; | |||||
} | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
// BaseTask Implementation // | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
public int getExecutionMode() { | |||||
return Task.EXECUTION_MODE_EXPLICIT; | |||||
} | |||||
/** | |||||
* Note that dependencies are executed before the task at hand. | |||||
*/ | |||||
public void execute(TaskEngine engine) throws AntException { | |||||
if (getDepends() != null && getDepends().length() > 0) { | |||||
Task dependencyTask = getTask(getDepends()); | |||||
if (dependencyTask == null) { | |||||
throw new AntException( | |||||
"Cannot find dependency, " + getDepends() + " from Task."); | |||||
} | |||||
engine.execute(dependencyTask); | |||||
} | |||||
} | |||||
public boolean isPropertyContainer() { | |||||
return true; | |||||
} | |||||
} |
@@ -1,97 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.tasks.util; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.engine.TaskEngine; | |||||
import org.apache.ant.tasks.BaseTask; | |||||
public class Property extends BaseTask { | |||||
private String value; | |||||
private String name; | |||||
public Property() { | |||||
super(); | |||||
} | |||||
public String getValue() { | |||||
return value; | |||||
} | |||||
public void setValue(String value) { | |||||
this.value = value; | |||||
} | |||||
public void setName(String name) { | |||||
this.name = name; | |||||
} | |||||
public String getName() { | |||||
return name; | |||||
} | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
// BaseTask Implementation // | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
public void execute(TaskEngine engine) throws AntException { | |||||
if (getParent() == null) { | |||||
throw new AntException("A Property Task must have a parent Task."); | |||||
} | |||||
engine.setPropertyValue(getName(), getValue()); | |||||
} | |||||
} |
@@ -1,81 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.tasks.util; | |||||
import java.util.*; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.engine.TaskEngine; | |||||
import org.apache.ant.tasks.BaseTask; | |||||
public class PropertyDump extends BaseTask { | |||||
public PropertyDump() { | |||||
super(); | |||||
} | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
// BaseTask Implementation // | |||||
//////////////////////////////////////////////////////////////////////////// | |||||
public void execute(TaskEngine engine) throws AntException { | |||||
List propNames = engine.getPropertyNames(); | |||||
for (Iterator i = propNames.iterator(); i.hasNext();) { | |||||
String name = (String)i.next(); | |||||
String value = engine.getPropertyValue(name).toString(); | |||||
engine.message(this, name + " = " + value); | |||||
} | |||||
} | |||||
} |
@@ -1,146 +0,0 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 1999, 2000 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", "Tomcat", 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.ant.test; | |||||
import org.apache.ant.AntException; | |||||
import org.apache.ant.engine.DefaultEngineListener; | |||||
import org.apache.ant.engine.TaskEngine; | |||||
import org.apache.ant.engine.TaskEngineImpl; | |||||
import org.apache.ant.tasks.Task; | |||||
import org.apache.ant.tasks.build.Project; | |||||
import org.apache.ant.tasks.build.Target; | |||||
import org.apache.ant.tasks.util.Property; | |||||
import org.apache.ant.tasks.util.PropertyDump; | |||||
public class SimpleTest { | |||||
Task target; | |||||
public SimpleTest() { | |||||
try { | |||||
Task rootTask = buildProject(); | |||||
TaskEngine engine = TaskEngineImpl.getTaskEngine(); | |||||
engine.addAntEngineListener(new DefaultEngineListener()); | |||||
engine.execute(rootTask, target); | |||||
} catch (AntException ax) { | |||||
ax.printStackTrace(System.err); | |||||
} | |||||
} | |||||
protected Task buildProject() { | |||||
Project project = new Project(); | |||||
project.setTaskName("project"); | |||||
project.setBasedir("somedir"); | |||||
project.setDefault("build"); | |||||
Property property1 = new Property(); | |||||
property1.setTaskName("prop1"); | |||||
property1.setName("basedir"); | |||||
property1.setValue("/org/apache"); | |||||
project.addChild(property1); | |||||
Property property2 = new Property(); | |||||
property2.setTaskName("prop2"); | |||||
property2.setName("dir1"); | |||||
property2.setValue("${basedir}/ant"); | |||||
project.addChild(property2); | |||||
Target target1 = new Target(); | |||||
target1.setTaskName("clean"); | |||||
project.addChild(target1); | |||||
PropertyDump pd = new PropertyDump(); | |||||
pd.setTaskName("dump"); | |||||
target1.addChild(pd); | |||||
Target target2 = new Target(); | |||||
target2.setTaskName("prepare"); | |||||
target2.setDepends("../clean"); | |||||
project.addChild(target2); | |||||
Property property3 = new Property(); | |||||
property3.setTaskName("prop3"); | |||||
property3.setName("dir2"); | |||||
property3.setValue("${dir1}/tasks"); | |||||
target2.addChild(property3); | |||||
Target target3 = new Target(); | |||||
target3.setTaskName("build"); | |||||
target3.setDepends("../prepare"); | |||||
project.addChild(target3); | |||||
Property property4 = new Property(); | |||||
property4.setTaskName("prop4"); | |||||
property4.setName("dir3"); | |||||
property4.setValue("r2}"); | |||||
target3.addChild(property4); | |||||
Property property5 = new Property(); | |||||
property5.setTaskName("prop5"); | |||||
property5.setName("dir4"); | |||||
property5.setValue("${di${dir3}"); | |||||
target3.addChild(property5); | |||||
target = target2; | |||||
return project; | |||||
} | |||||
public static void main(String[] args) { | |||||
SimpleTest simpleTest1 = new SimpleTest(); | |||||
} | |||||
} |