git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270645 13f79535-47bb-0310-9956-ffa450edef68master
@@ -174,9 +174,6 @@ | |||
classname="javax.servlet.Servlet" | |||
classpathref="classpath"/> | |||
<available property="adaptx.present" | |||
classname="org.exolab.adaptx.xslt.XSLTProcessor" | |||
classpathref="classpath" /> | |||
<available property="xerces.present" | |||
classname="org.apache.xerces.parsers.SAXParser" | |||
classpathref="classpath" /> | |||
@@ -269,7 +266,6 @@ | |||
unless="trax.present" /> | |||
<exclude name="${optional.package}/XslpLiaison.java" unless="xslp.present" /> | |||
<exclude name="${optional.package}/XalanLiaison.java" unless="xalan.present" /> | |||
<exclude name="${optional.package}/AdaptxLiaison.java" unless="adaptx.present" /> | |||
<exclude name="${optional.package}/ejb/Ejbc*.java" unless="ejb.ejbc.present" /> | |||
<exclude name="${optional.package}/ejb/DDCreator*.java" unless="ejb.DDCreator.present" /> | |||
<exclude name="${optional.package}/ejb/WLRun.java" unless="ejb.wls.present" /> | |||
@@ -813,8 +809,6 @@ | |||
unless="xslp.present"/> | |||
<exclude name="org/apache/tools/ant/taskdefs/optional/XalanLiaisonTest.java" | |||
unless="xalan.present"/> | |||
<exclude name="org/apache/tools/ant/taskdefs/optional/AdaptxLiaisonTest.java" | |||
unless="adaptx.present"/> | |||
<exclude name="${optional.package}/TraXLiaisonTest.java" | |||
unless="trax.present"/> | |||
@@ -897,10 +891,6 @@ | |||
<exclude name="org/apache/tools/ant/taskdefs/optional/XalanLiaisonTest.java" | |||
unless="xalan.present"/> | |||
<exclude name="org/apache/tools/ant/taskdefs/optional/AdaptxLiaisonTest.java" | |||
unless="adaptx.present"/> | |||
<exclude name="org/apache/tools/ant/taskdefs/optional/AdaptxLiaisonTest.java" | |||
unless="xerces.present"/> | |||
<exclude name="${optional.package}/perforce/*.java" | |||
unless="jakarta.oro.present" /> | |||
@@ -84,17 +84,17 @@ inclusion/exclusion of files works, and how to write patterns.</p> | |||
</tr> | |||
<tr> | |||
<td valign="top">processor</td> | |||
<td valign="top">name of the XSLT processor to use. Permissible values are | |||
"trax" for a TraX compliant processor, "xslp" for the | |||
XSL:P processor, "xalan" for the Apache XML Xalan (version 1) | |||
processor, "adaptx" for the Exolab Adaptx processor | |||
or the name of an arbitrary XSLTLiaison class. Defaults to trax, | |||
followed by xalan, then adaptx and then xslp (in that | |||
order). The first one found in your class path is the one that | |||
is used. | |||
<em><strong>DEPRECATED</strong> - XSL:P and Adaptx are | |||
deprecated and will be removed in the next version. Use trax or | |||
xalan instead.</em>. | |||
"trax" for a TraX compliant processor, | |||
"xslp" for the XSL:P processor, "xalan" for | |||
the Apache XML Xalan (version 1) processor the name of an | |||
arbitrary XSLTLiaison class. Defaults to trax, followed by xalan | |||
and then xslp (in that order). The first one found in your class | |||
path is the one that is used. | |||
<em><strong>DEPRECATED</strong> - XSL:P is deprecated and will | |||
be removed in the next version. Use trax or xalan instead.</em>. | |||
</td> | |||
<td align="center" valign="top">No</td> | |||
</tr> | |||
@@ -264,12 +264,10 @@ Installing Ant / Optional Tasks</a> section above.</p> | |||
<td><b>Available At</b></td> | |||
</tr> | |||
<tr> | |||
<td>An XSL transformer like Xalan, Adaptx or XSL:P</td> | |||
<td>An XSL transformer like Xalan or XSL:P</td> | |||
<td>style task</td> | |||
<td><a href="http://xml.apache.org/xalan-j/index.html" | |||
target="_top">http://xml.apache.org/xalan-j/index.html</a> for Xalan.<br> | |||
CVS module adaptx from :pserver:anoncvs@virtuals.intalio.com:/cvs/adaptx | |||
with password anoncvs for AdaptX.<br> | |||
XSL:P used to live at <a href="http://www.clc-marketing.com/xslp/" | |||
target="_top">http://www.clc-marketing.com/xslp/</a>, but the link | |||
doesn't work any longer and we are not aware of a replacement site.</td> | |||
@@ -1,16 +0,0 @@ | |||
/* | |||
* Copyright (C) The Apache Software Foundation. All rights reserved. | |||
* | |||
* This software is published under the terms of the Apache Software License | |||
* version 1.1, a copy of which has been included with this distribution in | |||
* the LICENSE file. | |||
*/ | |||
package org.apache.tools.ant; | |||
/** | |||
* Abstract interface to hold constants. | |||
* | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
*/ | |||
interface Constants { | |||
} |
@@ -1,132 +0,0 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact 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; | |||
import java.io.File; | |||
import java.io.FilenameFilter; | |||
/** | |||
* Filters filenames to determine whether or not the file is desirable. | |||
* | |||
* @author Jason Hunter [jhunter@servlets.com] | |||
* @author james@x180.com | |||
*/ | |||
public class DesirableFilter implements FilenameFilter { | |||
/** | |||
* Test the given filename to determine whether or not it's desirable. | |||
* This helps tasks filter temp files and files used by CVS. | |||
*/ | |||
public boolean accept(File dir, String name) { | |||
// emacs save file | |||
if (name.endsWith("~")) { | |||
return false; | |||
} | |||
// emacs autosave file | |||
if (name.startsWith("#") && name.endsWith("#")) { | |||
return false; | |||
} | |||
// openwindows text editor does this I think | |||
if (name.startsWith("%") && name.endsWith("%")) { | |||
return false; | |||
} | |||
/* CVS stuff -- hopefully there won't be a case with | |||
* an all cap file/dir named "CVS" that somebody wants | |||
* to keep around... | |||
*/ | |||
if (name.equals("CVS")) { | |||
return false; | |||
} | |||
/* If we are going to ignore CVS might as well ignore | |||
* this one as well... | |||
*/ | |||
if (name.equals(".cvsignore")){ | |||
return false; | |||
} | |||
// CVS merge autosaves. | |||
if (name.startsWith(".#")) { | |||
return false; | |||
} | |||
// SCCS/CSSC/TeamWare: | |||
if (name.equals("SCCS")) { | |||
return false; | |||
} | |||
// Visual Source Save | |||
if (name.equals("vssver.scc")) { | |||
return false; | |||
} | |||
// default | |||
return true; | |||
} | |||
} | |||
@@ -1,204 +0,0 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact 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; | |||
import java.io.File; | |||
import java.io.FilenameFilter; | |||
import java.util.StringTokenizer; | |||
import java.util.Properties; | |||
import java.net.URL; | |||
import java.net.MalformedURLException; | |||
import java.lang.reflect.Method; | |||
/** | |||
* This is the Ant command line front end to end. This front end | |||
* works out where ant is installed and loads the ant libraries before | |||
* starting Ant proper. | |||
* | |||
* @author <a href="mailto:conor@apache.org">Conor MacNeill</a> | |||
*/ | |||
public class Launcher { | |||
private static File determineAntHome11() { | |||
String classpath = System.getProperty("java.class.path"); | |||
StringTokenizer tokenizer = new StringTokenizer(classpath, System.getProperty("path.separator")); | |||
while (tokenizer.hasMoreTokens()) { | |||
String path = tokenizer.nextToken(); | |||
if (path.endsWith("ant.jar")) { | |||
File antJarFile = new File(path); | |||
File libDirectory = new File(antJarFile.getParent()); | |||
File antHome = new File(libDirectory.getParent()); | |||
return antHome; | |||
} | |||
} | |||
return null; | |||
} | |||
private static File determineAntHome(ClassLoader systemClassLoader) { | |||
try { | |||
String className = Launcher.class.getName().replace('.', '/') + ".class"; | |||
URL classResource = systemClassLoader.getResource(className); | |||
String fileComponent = classResource.getFile(); | |||
if (classResource.getProtocol().equals("file")) { | |||
// Class comes from a directory of class files rather than | |||
// from a jar. | |||
int classFileIndex = fileComponent.lastIndexOf(className); | |||
if (classFileIndex != -1) { | |||
fileComponent = fileComponent.substring(0, classFileIndex); | |||
} | |||
File classFilesDir = new File(fileComponent); | |||
File buildDir = new File(classFilesDir.getParent()); | |||
File devAntHome = new File(buildDir.getParent()); | |||
return devAntHome; | |||
} | |||
else if (classResource.getProtocol().equals("jar")) { | |||
// Class is coming from a jar. The file component of the URL | |||
// is actually the URL of the jar file | |||
int classSeparatorIndex = fileComponent.lastIndexOf("!"); | |||
if (classSeparatorIndex != -1) { | |||
fileComponent = fileComponent.substring(0, classSeparatorIndex); | |||
} | |||
URL antJarURL = new URL(fileComponent); | |||
File antJarFile = new File(antJarURL.getFile()); | |||
File libDirectory = new File(antJarFile.getParent()); | |||
File antHome = new File(libDirectory.getParent()); | |||
return antHome; | |||
} | |||
} | |||
catch (MalformedURLException e) { | |||
e.printStackTrace(); | |||
} | |||
return null; | |||
} | |||
private static void addDirJars(AntClassLoader classLoader, File jarDir) { | |||
String[] fileList = jarDir.list(new FilenameFilter() { | |||
public boolean accept(File dir, String name) { | |||
return name.endsWith(".jar"); | |||
} | |||
}); | |||
if (fileList != null) { | |||
for (int i = 0; i < fileList.length; ++i) { | |||
File jarFile = new File(jarDir, fileList[i]); | |||
classLoader.addPathElement(jarFile.getAbsolutePath()); | |||
} | |||
} | |||
} | |||
private static void addToolsJar(AntClassLoader antLoader) { | |||
String javaHome = System.getProperty("java.home"); | |||
if (javaHome.endsWith("jre")) { | |||
javaHome = javaHome.substring(0, javaHome.length() - 4); | |||
} | |||
System.out.println("Java home is " + javaHome); | |||
File toolsJar = new File(javaHome, "lib/tools.jar"); | |||
if (!toolsJar.exists()) { | |||
System.out.println("Unable to find tools.jar at " + toolsJar.getPath()); | |||
} | |||
else { | |||
antLoader.addPathElement(toolsJar.getAbsolutePath()); | |||
} | |||
} | |||
public static void main(String[] args) { | |||
File antHome = null; | |||
ClassLoader systemClassLoader = Launcher.class.getClassLoader(); | |||
if (systemClassLoader == null) { | |||
antHome = determineAntHome11(); | |||
} | |||
else { | |||
antHome = determineAntHome(systemClassLoader); | |||
} | |||
if (antHome == null) { | |||
System.err.println("Unable to determine ANT_HOME"); | |||
System.exit(1); | |||
} | |||
System.out.println("ANT_HOME is " + antHome); | |||
// We now create the class loader with which we are going to launch ant | |||
AntClassLoader antLoader = new AntClassLoader(systemClassLoader, false); | |||
// need to find tools.jar | |||
addToolsJar(antLoader); | |||
// add everything in the lib directory to this classloader | |||
File libDir = new File(antHome, "lib"); | |||
addDirJars(antLoader, libDir); | |||
File optionalDir = new File(antHome, "lib/optional"); | |||
addDirJars(antLoader, optionalDir); | |||
Properties launchProperties = new Properties(); | |||
launchProperties.put("ant.home", antHome.getAbsolutePath()); | |||
try { | |||
Class mainClass = antLoader.loadClass("org.apache.tools.ant.Main"); | |||
antLoader.initializeClass(mainClass); | |||
final Class[] param = {Class.forName("[Ljava.lang.String;"), | |||
Properties.class, ClassLoader.class}; | |||
final Method startMethod = mainClass.getMethod("start", param); | |||
final Object[] argument = {args, launchProperties, systemClassLoader}; | |||
startMethod.invoke(null, argument); | |||
} | |||
catch (Exception e) { | |||
System.out.println("Exception running Ant: " + e.getClass().getName() + ": " + e.getMessage()); | |||
e.printStackTrace(); | |||
} | |||
} | |||
} | |||
@@ -1,118 +0,0 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact 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; | |||
import org.apache.tools.ant.types.PatternSet; | |||
import java.util.Vector; | |||
import java.util.Enumeration; | |||
/** | |||
* This task will compile and load a new taskdef all in one step. | |||
* At times, this is useful for eliminating ordering dependencies | |||
* which otherwise would require multiple executions of Ant. | |||
* | |||
* @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a> | |||
* | |||
* @deprecated use <taskdef> elements nested into <target>s instead | |||
*/ | |||
public class CompileTask extends Javac { | |||
protected Vector taskList = new Vector(); | |||
/** | |||
* add a new task entry on the task list | |||
*/ | |||
public Taskdef createTaskdef() { | |||
Taskdef task = new Taskdef(); | |||
taskList.addElement(task); | |||
return task; | |||
} | |||
/** | |||
* do all the real work in init | |||
*/ | |||
public void init() { | |||
log("!! CompileTask is deprecated. !!"); | |||
log("Use <taskdef> elements nested into <target>s instead"); | |||
// create all the include entries from the task defs | |||
for (Enumeration e=taskList.elements(); e.hasMoreElements(); ) { | |||
Taskdef task = (Taskdef)e.nextElement(); | |||
String source = task.getClassname().replace('.','/') + ".java"; | |||
PatternSet.NameEntry include = super.createInclude(); | |||
include.setName("**/" + source); | |||
} | |||
// execute Javac | |||
super.init(); | |||
super.execute(); | |||
// now define all the new tasks | |||
for (Enumeration e=taskList.elements(); e.hasMoreElements(); ) { | |||
Taskdef task = (Taskdef)e.nextElement(); | |||
task.init(); | |||
} | |||
} | |||
/** | |||
* have execute do nothing | |||
*/ | |||
public void execute() { | |||
} | |||
} |
@@ -1,127 +0,0 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact 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; | |||
import org.apache.tools.ant.Task; | |||
import java.io.OutputStream; | |||
import java.io.IOException; | |||
/** | |||
* Serves as an output stream to Javac. This let's us print messages | |||
* out to the log and detect whether or not Javac had an error | |||
* while compiling. | |||
* | |||
* @author James Duncan Davidson (duncan@x180.com) | |||
* @deprecated use returnvalue of compile to detect compilation failure. | |||
*/ | |||
class JavacOutputStream extends OutputStream { | |||
private Task task; | |||
private StringBuffer line; | |||
private boolean errorFlag = false; | |||
/** | |||
* Constructs a new JavacOutputStream with the given task | |||
* as the output source for messages. | |||
*/ | |||
JavacOutputStream(Task task) { | |||
this.task = task; | |||
line = new StringBuffer(); | |||
} | |||
/** | |||
* Write a character to the output stream. This method looks | |||
* to make sure that there isn't an error being reported and | |||
* will flush each line of input out to the project's log stream. | |||
*/ | |||
public void write(int c) throws IOException { | |||
char cc = (char)c; | |||
if (cc == '\r' || cc == '\n') { | |||
// line feed | |||
if (line.length() > 0) { | |||
processLine(); | |||
} | |||
} else { | |||
line.append(cc); | |||
} | |||
} | |||
/** | |||
* Processes a line of input and determines if an error occured. | |||
*/ | |||
private void processLine() { | |||
String s = line.toString(); | |||
if (s.indexOf("error") > -1) { | |||
errorFlag = true; | |||
} | |||
task.log(s); | |||
line = new StringBuffer(); | |||
} | |||
/** | |||
* Returns the error status of the compile. If no errors occured, | |||
* this method will return false, else this method will return true. | |||
*/ | |||
boolean getErrorFlag() { | |||
return errorFlag; | |||
} | |||
} | |||
@@ -288,11 +288,6 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
final Class clazz = | |||
loadClass("org.apache.tools.ant.taskdefs.optional.XalanLiaison"); | |||
liaison = (XSLTLiaison)clazz.newInstance(); | |||
} else if (proc.equals("adaptx")) { | |||
log("DEPRECATED - adaptx processor is deprecated. Use trax or xalan instead."); | |||
final Class clazz = | |||
loadClass("org.apache.tools.ant.taskdefs.optional.AdaptxLiaison"); | |||
liaison = (XSLTLiaison) clazz.newInstance(); | |||
} else { | |||
liaison = (XSLTLiaison) loadClass(proc).newInstance(); | |||
} | |||
@@ -422,16 +417,11 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
resolveProcessor("xalan"); | |||
} catch (Throwable e2) { | |||
try { | |||
resolveProcessor("adaptx"); | |||
resolveProcessor("xslp"); | |||
} catch (Throwable e3) { | |||
try { | |||
resolveProcessor("xslp"); | |||
} catch (Throwable e4) { | |||
e4.printStackTrace(); | |||
e3.printStackTrace(); | |||
e2.printStackTrace(); | |||
throw new BuildException(e1); | |||
} | |||
e3.printStackTrace(); | |||
e2.printStackTrace(); | |||
throw new BuildException(e1); | |||
} | |||
} | |||
} | |||
@@ -1,103 +0,0 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact 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.optional; | |||
import java.io.File; | |||
import java.io.FileOutputStream; | |||
import java.io.OutputStreamWriter; | |||
import org.apache.tools.ant.taskdefs.XSLTLiaison; | |||
import org.apache.tools.ant.BuildException; | |||
import org.exolab.adaptx.xslt.XSLTProcessor; | |||
import org.exolab.adaptx.xslt.XSLTReader; | |||
import org.exolab.adaptx.xslt.XSLTStylesheet; | |||
/** | |||
* | |||
* @author <a href="mailto:blandin@intalio.com">Arnaud Blandin</a> | |||
* @version $Revision$ $Date$ | |||
*/ | |||
public class AdaptxLiaison implements XSLTLiaison { | |||
protected XSLTProcessor processor; | |||
protected XSLTStylesheet xslSheet; | |||
public AdaptxLiaison () { | |||
processor = new XSLTProcessor(); | |||
} | |||
public void setStylesheet(File fileName) throws Exception { | |||
XSLTReader xslReader = new XSLTReader(); | |||
xslSheet = xslReader.read( fileName.getAbsolutePath() ); | |||
}; | |||
public void transform(File infile, File outfile) throws Exception { | |||
FileOutputStream fos = new FileOutputStream(outfile); | |||
OutputStreamWriter out = new OutputStreamWriter(fos,"UTF8"); | |||
processor.process(infile.getAbsolutePath(), xslSheet, out); | |||
} | |||
public void addParam(String name, String expression){ | |||
processor.setProperty(name, expression); | |||
} | |||
public void setOutputtype(String type) throws Exception { | |||
if (!type.equals("xml")) { | |||
throw new BuildException("Unsupported output type: " + type); | |||
} | |||
} | |||
} //-- AdaptxLiaison |
@@ -1,332 +0,0 @@ | |||
package org.apache.tools.ant.taskdefs.optional; | |||
import java.io.File; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.io.FileInputStream; | |||
import java.io.FileNotFoundException; | |||
import java.util.Vector; | |||
import java.util.Enumeration; | |||
import java.util.Comparator; | |||
import java.util.ListIterator; | |||
import java.util.StringTokenizer; | |||
import java.util.ArrayList; | |||
import org.apache.tools.ant.Task; | |||
import org.apache.tools.ant.BuildException; | |||
/** | |||
* Task for creating a manifest file for a jar archiv. | |||
* use: | |||
* <pre> | |||
* <taskdef name="manifest" classname="ManifestFile"/> | |||
* <target name="jar_manifest"> | |||
* <manifest file="manifest.mf" method="replaceAll"> | |||
* <entry value="Manifest-Version: 1_0"/> | |||
* </manifest> | |||
* </target> | |||
* </pre> | |||
* | |||
*@version 1.0 2001-10-11 | |||
*@author Thomas Kerle | |||
*/ | |||
public class ManifestFile extends Task { | |||
private final static String newLine = System.getProperty("line.separator"); | |||
private final static String keyValueSeparator = ":"; | |||
private final static String UPDATE_ = "update"; | |||
private final static String REPLACEALL_ = "replaceAll"; | |||
private File manifestFile; | |||
private Vector entries; | |||
private EntryContainer container; | |||
private String currentMethod; | |||
public ManifestFile() { | |||
entries = new Vector(); | |||
container = new EntryContainer(); | |||
} | |||
/** | |||
* execute task | |||
* @exception BuildException : Failure in building | |||
*/ | |||
public void execute() throws BuildException { | |||
checkParameters(); | |||
if (isUpdate(currentMethod)) { | |||
readFile(); | |||
} | |||
executeOperation(); | |||
writeFile(); | |||
} | |||
/** | |||
* adding entries to a container | |||
* @exception BuildException | |||
*/ | |||
private void executeOperation() throws BuildException { | |||
Enumeration enum = entries.elements(); | |||
while (enum.hasMoreElements()) { | |||
Entry entry = (Entry) enum.nextElement(); | |||
entry.addTo (container); | |||
} | |||
} | |||
/** | |||
* creating entries by Ant | |||
* | |||
* | |||
*/ | |||
public Entry createEntry() { | |||
Entry entry = new Entry(); | |||
entries.addElement(entry); | |||
return entry; | |||
} | |||
private boolean isUpdate (String method) { | |||
return method.equals(UPDATE_.toUpperCase()); | |||
} | |||
private boolean isReplaceAll (String method) { | |||
return method.equals(REPLACEALL_.toUpperCase()); | |||
} | |||
/** | |||
* Setter for the method attribute (update/replaceAll) | |||
* @param method Method to set task | |||
*/ | |||
public void setMethod (String method) { | |||
currentMethod = method.toUpperCase(); | |||
} | |||
/** | |||
* Setter for the file attribute | |||
* @param filename for the manifest | |||
*/ | |||
public void setFile(File f) { | |||
manifestFile = f; | |||
} | |||
private StringBuffer buildBuffer () { | |||
StringBuffer buffer = new StringBuffer (); | |||
ListIterator iterator = container.elements(); | |||
while (iterator.hasNext()) { | |||
Entry entry = (Entry) iterator.next(); | |||
String key = (String) entry.getKey(); | |||
String value = (String) entry.getValue(); | |||
String entry_string = key + keyValueSeparator + value; | |||
buffer.append (entry_string + this.newLine); | |||
} | |||
return buffer; | |||
} | |||
private void writeFile() throws BuildException { | |||
try { | |||
manifestFile.delete(); | |||
log ("Replacing or creating new manifest file " + manifestFile.getAbsolutePath()); | |||
if (manifestFile.createNewFile()) { | |||
FileOutputStream fos = new FileOutputStream(manifestFile); | |||
StringBuffer buffer = buildBuffer(); | |||
int size = buffer.length(); | |||
for (int i=0; i<size; i++) { | |||
fos.write( (char) buffer.charAt(i)); | |||
} | |||
fos.flush(); | |||
fos.close(); | |||
} else { | |||
throw new BuildException ("Can't create manifest file"); | |||
} | |||
} catch (IOException ioe) { | |||
throw new BuildException ("An input/ouput error occured" + ioe.toString()); | |||
} | |||
} | |||
private StringTokenizer getLineTokens (StringBuffer buffer) { | |||
String manifests = buffer.toString(); | |||
StringTokenizer strTokens = new StringTokenizer(manifests, newLine); | |||
return strTokens; | |||
} | |||
private void addLine (String line) { | |||
Entry entry = new Entry(); | |||
entry.setValue (line); | |||
entry.addTo(container); | |||
} | |||
private void readFile() throws BuildException { | |||
if (manifestFile.exists()) { | |||
this.log("update existing manifest file " + manifestFile.getAbsolutePath()); | |||
if (container != null) { | |||
try { | |||
FileInputStream fis = new FileInputStream(manifestFile); | |||
int c; | |||
StringBuffer buffer = new StringBuffer(""); | |||
boolean stop = false; | |||
while (!stop) { | |||
c = fis.read(); | |||
if (c == -1){ | |||
stop =true; | |||
} else { | |||
buffer.append( (char) c); | |||
} | |||
} | |||
fis.close(); | |||
StringTokenizer lineTokens = getLineTokens (buffer); | |||
while (lineTokens.hasMoreElements()) { | |||
String currentLine = (String) lineTokens.nextElement(); | |||
addLine (currentLine); | |||
} | |||
} | |||
catch (FileNotFoundException fnfe) { | |||
throw new BuildException ("File not found exception " + fnfe.toString()); | |||
} | |||
catch (IOException ioe) { | |||
throw new BuildException ("Unknown input/output exception " + ioe.toString()); | |||
} | |||
} | |||
} | |||
} | |||
private void checkParameters() throws BuildException { | |||
if (!checkParam(manifestFile)) { | |||
throw new BuildException ("file token must not be null.", location); | |||
} | |||
} | |||
private boolean checkParam (String param) { | |||
return !((param==null) || (param.equals("null"))); | |||
} | |||
private boolean checkParam (File param) { | |||
return !(param == null); | |||
} | |||
public class EntryContainer { | |||
private ArrayList list = null; | |||
public EntryContainer () { | |||
list = new ArrayList(); | |||
} | |||
public void set (Entry entry) { | |||
if (list.contains(entry)) { | |||
int index = list.indexOf(entry); | |||
list.remove(index); | |||
list.add(index, entry); | |||
} else { | |||
list.add(entry); | |||
} | |||
} | |||
public ListIterator elements() { | |||
ListIterator iterator = list.listIterator(); | |||
return iterator; | |||
} | |||
} | |||
public class Entry implements Comparator { | |||
//extern format | |||
private String value = null; | |||
//intern representation | |||
private String val = null; | |||
private String key = null; | |||
public Entry () { | |||
} | |||
public void setValue (String value) { | |||
this.value = new String(value); | |||
} | |||
public String getKey () { | |||
return key; | |||
} | |||
public String getValue() { | |||
return val; | |||
} | |||
private void checkFormat () throws BuildException { | |||
if (value==null) { | |||
throw new BuildException ("no argument for value"); | |||
} | |||
StringTokenizer st = new StringTokenizer(value, ManifestFile.keyValueSeparator); | |||
int size = st.countTokens(); | |||
if (size < 2 ) { | |||
throw new BuildException ("value has not the format of a manifest entry"); | |||
} | |||
} | |||
private void split () { | |||
StringTokenizer st = new StringTokenizer(value, ManifestFile.keyValueSeparator); | |||
key = (String) st.nextElement(); | |||
val = (String) st.nextElement(); | |||
} | |||
public int compare (Object o1, Object o2) { | |||
int result = -1; | |||
try { | |||
Entry e1 = (Entry) o1; | |||
Entry e2 = (Entry) o2; | |||
String key_1 = e1.getKey(); | |||
String key_2 = e2.getKey(); | |||
result = key_1.compareTo(key_2); | |||
} catch (Exception e) { | |||
} | |||
return result; | |||
} | |||
public boolean equals (Object obj) { | |||
Entry ent = new Entry(); | |||
boolean result = false; | |||
int res = ent.compare (this,(Entry) obj ); | |||
if (res==0) { | |||
result =true; | |||
} | |||
return result; | |||
} | |||
protected void addTo (EntryContainer container) throws BuildException { | |||
checkFormat(); | |||
split(); | |||
container.set(this); | |||
} | |||
} | |||
} |
@@ -1,72 +0,0 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Jakarta-Regexp", 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.optional; | |||
import org.apache.tools.ant.taskdefs.XSLTLiaison; | |||
/** | |||
* Adaptx Liaison testcase | |||
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> | |||
*/ | |||
public class AdaptxLiaisonTest extends AbstractXSLTLiaisonTest { | |||
public AdaptxLiaisonTest(String name){ | |||
super(name); | |||
} | |||
protected XSLTLiaison createLiaison() throws Exception { | |||
return new AdaptxLiaison(); | |||
} | |||
} |