diff --git a/ant/org.eclipse.ant.core/.classpath b/ant/org.eclipse.ant.core/.classpath new file mode 100644 index 000000000..dc92c623b --- /dev/null +++ b/ ant/org.eclipse.ant.core/.classpath@@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry output="src_ant_bin" kind="src" path="src_ant/"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="output" path="bin"/> +</classpath> @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean"/> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.debug.ui.target_run_perspective" value="perspective_none"/> +<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS" value="clean,"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" name="workingSet" editPageId="org.eclipse.ui.resourceWorkingSetPage"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.core/src_ant" type="2"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.core/buildfiles/buildExtraJAR.xml" type="1"/> </launchConfigurationWorkingSet> }"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" name="workingSet" editPageId="org.eclipse.ui.resourceWorkingSetPage"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.core" type="4"/> </launchConfigurationWorkingSet> }"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.ant.core/buildfiles/buildExtraJAR.xml}"/> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_RUN_IN_BACKGROUND" value="false"/> +</launchConfiguration> diff --git a/ant/org.eclipse.ant.core/.project b/ant/org.eclipse.ant.core/.project new file mode 100644 index 000000000..f37d1c56c --- /dev/null +++ b/ ant/org.eclipse.ant.core/.project@@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.ant.core</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/Build Ant Support JAR.launch</value> + </dictionary> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> + </natures> +</projectDescription> @@ -0,0 +1,3 @@ +#Thu May 27 14:47:50 PDT 2004
+eclipse.preferences.version=1
+selfhosting.binExcludes=/org.eclipse.ant.core/src_ant_bin
diff --git a/ant/org.eclipse.ant.core/about.html b/ant/org.eclipse.ant.core/about.html new file mode 100644 index 000000000..b3c0a26b7 --- /dev/null +++ b/ ant/org.eclipse.ant.core/about.html@@ -0,0 +1,54 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> +<title>About</title> +</head> +<body lang="EN-US"> +<h2>About This Content</h2> + +<p>October 8, 2009</p> +<h3>License</h3> + +<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>. +For purposes of the EPL, "Program" will mean the Content.</p> + +<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p> + +<h3>Third Party Content</h3> + +<p>The Content includes items that have been sourced from third parties as set out below. If you +did not receive this Content directly from the Eclipse Foundation, the following is provided +for informational purposes only, and you should look to the Redistributor’s license for +terms and conditions of use.</p> + +<h4>Ant 1.7.1</h4> + +<p>The following classes in the plug-in JAR are based on Ant code developed by The Apache Software Foundation and shall be defined as the "Ant-Derived Work":</p> + +<ul> + <li>org.eclipse.ant.internal.core.ant.InternalAntRunner</li> + <li>org.eclipse.ant.internal.core.ant.InternalProject</li> +</ul> + +<p>The binary code for the Ant-Derived Work is located in lib/antsupportlib.jar and the source code is located in lib/antsupportlibsrc.zip.</p> + +<p>Your use of the Ant-Derived Work is subject to the terms and conditions of the Apache Software License 2.0. A copy of the license is contained +in the file <a href="about_files/asl-v20.txt" target="_blank">about_files/asl-v20.txt</a> and is also available at <a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>. + +<p>The names "Ant" and "Apache Software Foundation" must not be used to endorse or promote products derived from this +software without prior written permission. For written permission, please contact <a href="mailto:apache@apache.org">apache@apache.org</a>.</p> + +<p>The Apache attribution <a href="about_files/NOTICE" target="_blank">NOTICE</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p> + +</body> +</html>
\ No newline at end of file @@ -0,0 +1,15 @@ + ========================================================================= + == NOTICE file corresponding to the section 4 d of == + == the Apache License, Version 2.0, == + == in this case for the Apache Ant distribution. == + ========================================================================= + + This product includes software developed by + The Apache Software Foundation (http://www.apache.org/). + + This product includes also software developed by : + - the W3C consortium (http://www.w3c.org) , + - the SAX project (http://www.saxproject.org) + + Please read the different LICENSE files present in the root directory of + this distribution. @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. @@ -0,0 +1,25 @@ +############################################################################### +# Copyright (c) 2000, 2007 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +source.. =src/ +source.lib/antsupportlib.jar=src_ant/ +src.includes = about.html,\ + schema/,\ + about_files/ +bin.includes = plugin.xml,\ + plugin.properties,\ + about.html,\ + .,\ + lib/*.jar,\ + META-INF/,\ + about_files/ +jars.compile.order=.,lib/antsupportlib.jar +jars.extra.classpath=platform:/plugin/org.apache.ant/lib/ant.jar,platform:/plugin/org.apache.ant/lib/ant-launcher.jar +javadoc.packages=org.eclipse.*
\ No newline at end of file @@ -0,0 +1,37 @@ +<!-- Export a jar of .class files for the org.eclipse.ant.core Eclipse plug-in + along with other important plugin files to the "plugin-export" subdirectory + of the target Eclipse installation --> +<project name="Export ant.core" default="export" basedir=".."> + + <!-- Set the timestamp and important properties --> + <target name="init"> + <tstamp/> + <property name="destdir" value="../../plugin-export" /> + <property name="dest" value="${destdir}/org.eclipse.ant.core_3.0.0" /> + </target> + + <!-- Create the jar of .class files, and copy other important files to export dir --> + <target name="export" depends="init"> + <mkdir dir="${destdir}" /> + <delete dir="${dest}" /> + <mkdir dir="${dest}" /> + <delete dir="${dest}/lib"/> + <mkdir dir="${dest}/lib"/> + <jar destfile="${dest}/antsupport.jar"> + <fileset dir="bin"> + <exclude name="org/eclipse/ant/internal/core/ant/*"/> + </fileset> + </jar> + <!-- Create the source zip --> + <zip destfile="${dest}/antsupportsrc.zip"> + <fileset dir="src"/> + </zip> + <copy file="plugin.xml" todir="${dest}"/> + <copy file="plugin.properties" todir="${dest}"/> + <copy file=".classpath" todir="${dest}"/> + <copy file=".options" todir="${dest}"/> + <ant antfile="buildfiles/buildExtraJAR.xml" target="build"/> + <copy file="lib/antsupportlib.jar" todir="${dest}/lib"/> + </target> + +</project> @@ -0,0 +1,19 @@ +############################################################################### +# Copyright (c) 2000, 2005 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +pluginName = Ant Build Tool Core +providerName = Eclipse.org +classpathName = Extra Ant Classpath Entry Definitions +tasksName = Ant Task Definitions +typesName = Ant Type Definitions +propertiesName = Ant Properties Definitions + +antBuildFileContentType.name= Ant Buildfile @@ -0,0 +1,149 @@ +<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.ant.core">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.ant.core" id="antProperties" name="Ant Properties"/>
+ </appInfo>
+ <documentation>
+ Allows plug-ins to define Ant properties for use in Ant build files.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="antProperty" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+ a fully qualified identifier of the target extension point
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+ an optional identifier of the extension instance
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+ an optional name of the extension instance
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="antProperty">
+ <annotation>
+ <appInfo>
+ <meta.element labelAttribute="name"/>
+ </appInfo>
+ </annotation>
+ <complexType>
+ <attribute name="name" type="string" use="required">
+ <annotation>
+ <documentation>
+ The name of the property.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="value" type="string">
+ <annotation>
+ <documentation>
+ The value of the property. If a value is provided here, the "class" attribute is ignored.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string">
+ <annotation>
+ <documentation>
+ If there is no 'value' attribute provided, this class is called to return the dynamic value for the Ant property. If <code>null</code> is returned, the value is not set.
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java" basedOn="org.eclipse.ant.core.IAntPropertyValueProvider"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ <attribute name="headless" type="boolean">
+ <annotation>
+ <documentation>
+ indicates whether this property is suitable for use in a "headless" Ant environment. If running headless and the attribute is "false", the property will not be set and any specified <code>org.eclipse.ant.core.IAntPropertyValueProvider</code> will not be instantiated. The implied value is <code>true</code>, when not specified.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="eclipseRuntime" type="boolean">
+ <annotation>
+ <documentation>
+ indicates whether this property should only be considered when run in the same VM as Eclipse. The implied value is <code>true</code>, when not specified.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ 3.0
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ The following is an example of an Ant properties extension point:
+<p>
+<pre>
+ <extension point="org.eclipse.ant.core.antProperties">
+ <antProperty name="eclipse.home"
+ class="org.eclipse.ant.internal.core.AntPropertyValueProvider"/>
+ <antProperty name="eclipse.running"
+ value="true"/>
+ </extension>
+</pre>
+</p>
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ The class named in the <samp>class</samp> property must implement the <samp>org.eclipse.ant.core.IAntPropertyValueProvider</samp> interface.
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ The platform uses this mechanism to set the Ant property eclipse.home to the Eclipse installation directory and to set the eclipse.running property.
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+ Copyright (c) 2000, 2006 IBM Corporation and others.<br>
+All rights reserved. This program and the accompanying materials are made
+available under the terms of the Eclipse Public License v1.0 which
+accompanies this distribution, and is available at
+<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>
+ </documentation>
+ </annotation>
+
+</schema>
@@ -0,0 +1,141 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!-- Schema file written by PDE --> +<schema targetNamespace="org.eclipse.ant.core"> +<annotation> + <appInfo> + <meta.schema plugin="org.eclipse.ant.core" id="antTypes" name="Ant Types"/> + </appInfo> + <documentation> + Allows plug-ins to define arbitrary Ant datatypes for +use by the Ant infrastructure. The standard Ant +infrastructure allows for the addition of arbitrary +datatypes. Unfortunately, it is unlikely that the +Ant Core plug-in would have the classes required +by these datatypes on its classpath (or that of any +of its prerequisites). To address this, clients +should define an extension which plugs into this +extension-point and maps a datatype name onto a class. +The Ant plug-in can then request that the declaring +plug-in load the specified class. + </documentation> + </annotation> + + <element name="extension"> + <complexType> + <sequence> + <element ref="antType" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="point" type="string" use="required"> + <annotation> + <documentation> + a fully qualified identifier of the target extension point + </documentation> + </annotation> + </attribute> + <attribute name="id" type="string"> + <annotation> + <documentation> + an optional identifier of the extension instance + </documentation> + </annotation> + </attribute> + <attribute name="name" type="string"> + <annotation> + <documentation> + an optional name of the extension instance + </documentation> + </annotation> + </attribute> + </complexType> + </element> + + <element name="antType"> + <annotation> + <appInfo> + <meta.element labelAttribute="name"/> + </appInfo> + </annotation> + <complexType> + <attribute name="name" type="string" use="required"> + <annotation> + <documentation> + name of the type to be defined + </documentation> + </annotation> + </attribute> + <attribute name="uri" type="string"> + <annotation> + <documentation> + The uri that this definition should live in. Only used if using Ant newer than 1.6. + </documentation> + </annotation> + </attribute> + <attribute name="class" type="string" use="required"> + <annotation> + <documentation> + the fully qualified name of a Java class implementing +the datatype. Generally this class must be a subclass of +<code>org.apache.tools.ant.types.DataType</code>. + </documentation> + <appInfo> + <meta.attribute kind="java" basedOn="org.apache.tools.ant.types.DataType"/> + </appInfo> + </annotation> + </attribute> + <attribute name="library" type="string" use="required"> + <annotation> + <documentation> + a path relative to the plug-in install location for the library containing the type. + </documentation> + <appInfo> + <meta.attribute kind="resource"/> + </appInfo> + </annotation> + </attribute> + <attribute name="headless" type="boolean"> + <annotation> + <documentation> + indicates whether this type is suitable for use in a "headless" Ant environment. If running headless and the attribute is <code>false</code>, the type will not be loaded or defined. As well, the plugin class loader will not be added as a parent classloader to the Ant classloader. The implied value is <code>true</code>, when not specified. + </documentation> + </annotation> + </attribute> + <attribute name="eclipseRuntime" type="boolean"> + <annotation> + <documentation> + indicates whether this type requires an Eclipse runtime (i.e. must be run in the same VM as Eclipse). The implied value is <code>true</code>, when not specified. + </documentation> + </annotation> + </attribute> + </complexType> + </element> + + <annotation> + <appInfo> + <meta.section type="examples"/> + </appInfo> + <documentation> + The following is an example of an Ant types extension point: +<p> +<pre> + <extension point="org.eclipse.ant.core.antTypes"> + <antType name="coolType" class="com.example.CoolType" library="lib/antSupport.jar"/> + </extension> +</pre> +</p> + </documentation> + </annotation> + + <annotation> + <appInfo> + <meta.section type="copyright"/> + </appInfo> + <documentation> + Copyright (c) 2000, 2006 IBM Corporation and others.<br> +All rights reserved. This program and the accompanying materials are made +available under the terms of the Eclipse Public License v1.0 which +accompanies this distribution, and is available at +<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a> + </documentation> + </annotation> + +</schema> @@ -0,0 +1,113 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!-- Schema file written by PDE --> +<schema targetNamespace="org.eclipse.ant.core"> +<annotation> + <appInfo> + <meta.schema plugin="org.eclipse.ant.core" id="extraClasspathEntries" name="Extra Ant Classpath Entries"/> + </appInfo> + <documentation> + Allows plug-ins to define arbitrary JARs for use by the Ant infrastructure. +These JARs are put into the Ant classpath at runtime. Besides +the JAR, the plug-in classloader of the plug-in providing the +JAR is also added to the classpath. + </documentation> + </annotation> + + <element name="extension"> + <complexType> + <sequence> + <element ref="extraClasspathEntry" minOccurs="0" maxOccurs="unbounded"/> + </sequence> + <attribute name="point" type="string" use="required"> + <annotation> + <documentation> + a fully qualified identifier of the target extension point + </documentation> + </annotation> + </attribute> + <attribute name="id" type="string"> + <annotation> + <documentation> + an optional identifier of the extension instance + </documentation> + </annotation> + </attribute> + <attribute name="name" type="string"> + <annotation> + <documentation> + an optional name of the extension instance + </documentation> + </annotation> + </attribute> + </complexType> + </element> + + <element name="extraClasspathEntry"> + <complexType> + <attribute name="library" type="string" use="required"> + <annotation> + <documentation> + a path relative to the plug-in install location for the library. + </documentation> + <appInfo> + <meta.attribute kind="resource"/> + </appInfo> + </annotation> + </attribute> + <attribute name="headless" type="boolean"> + <annotation> + <documentation> + indicates whether this extra classpath entry is suitable for use in a "headless" Ant environment. If running headless and the attribute is <code>false</code>, this entry will not be added to the Ant classpath. As well, the plugin class loader will not be added as a parent classloader to the Ant classloader. The implied value is <code>true</code>, when not specified. + </documentation> + </annotation> + </attribute> + <attribute name="eclipseRuntime" type="boolean"> + <annotation> + <documentation> + indicates whether this extra classpath entry should only be considered for builds run in the same VM as Eclipse. The implied value is true, when not specified. + </documentation> + </annotation> + </attribute> + </complexType> + </element> + + <annotation> + <appInfo> + <meta.section type="examples"/> + </appInfo> + <documentation> + The following is an example of an extra classpath entries extension point: + +<p> +<pre> + <extension point="org.eclipse.ant.core.extraClasspathEntries"> + <extraClasspathEntry library="myExtraLibrary.jar"/> + </extension> +</pre> +</p> + </documentation> + </annotation> + + <annotation> + <appInfo> + <meta.section type="implementation"/> + </appInfo> + <documentation> + The platform itself supplies an Ant support jar (antsupportlib.jar). + </documentation> + </annotation> + + <annotation> + <appInfo> + <meta.section type="copyright"/> + </appInfo> + <documentation> + Copyright (c) 2000, 2005 IBM Corporation and others.<br> +All rights reserved. This program and the accompanying materials are made +available under the terms of the Eclipse Public License v1.0 which +accompanies this distribution, and is available at +<a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a> + </documentation> + </annotation> + +</schema> @@ -0,0 +1,308 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.core; + +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Arrays; +import java.util.List; + +import org.eclipse.ant.internal.core.AntClassLoader; +import org.eclipse.ant.internal.core.AntCoreUtil; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Plugin; +import org.eclipse.core.runtime.Status; +import org.osgi.framework.BundleContext; + +/** + * The plug-in runtime class for the Ant Core plug-in. + * Clients may not instantiate or subclass this class. + * @noinstantiate This class is not intended to be instantiated by clients. + * @noextend This class is not intended to be subclassed by clients. + */ +public class AntCorePlugin extends Plugin { + + /** + * Status code indicating an unexpected internal error. + * @since 2.1 + */ + public static final int INTERNAL_ERROR = 120; + + /** + * The single instance of this plug-in runtime class. + */ + private static AntCorePlugin plugin; + + /** + * The preferences class for this plug-in. + */ + private AntCorePreferences preferences; + + /** + * Unique identifier constant (value <code>"org.eclipse.ant.core"</code>) + * for the Ant Core plug-in. + */ + public static final String PI_ANTCORE = "org.eclipse.ant.core"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"antTasks"</code>) + * for the Ant tasks extension point. + */ + public static final String PT_TASKS = "antTasks"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"extraClasspathEntries"</code>) + * for the extra classpath entries extension point. + */ + public static final String PT_EXTRA_CLASSPATH = "extraClasspathEntries"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"antTypes"</code>) + * for the Ant types extension point. + */ + public static final String PT_TYPES = "antTypes"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"antProperties"</code>) + * for the Ant properties extension point. + * + * @since 3.0 + */ + public static final String PT_PROPERTIES = "antProperties"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"org.eclipse.ant.core.antBuildFile"</code>) + * for the content type of an Ant BuildFile + * + * @since 3.0 + */ + public static final String ANT_BUILDFILE_CONTENT_TYPE = PI_ANTCORE + ".antBuildFile"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"class"</code>) + * of a tag that appears in Ant extensions. + */ + public static final String CLASS = "class"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"name"</code>) + * of a tag that appears in Ant extensions. + */ + public static final String NAME = "name"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"library"</code>) + * of a tag that appears in Ant extensions. + */ + public static final String LIBRARY = "library"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"headless"</code>) of a tag + * that appears in Ant extensions. + * @since 2.1 + */ + public static final String HEADLESS = "headless"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"eclipseRuntime"</code>) of a tag + * that appears in Ant extensions. + * @since 3.0 + */ + public static final String ECLIPSE_RUNTIME = "eclipseRuntime"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"uri"</code>) of a tag + * that appears in Ant extensions. + * @since 3.2 + */ + public static final String URI = "uri"; //$NON-NLS-1$ + + /** + * Simple identifier constant (value <code>"value"</code>) of a tag + * that appears in Ant extensions. + * @since 3.0 + */ + public static final String VALUE = "value"; //$NON-NLS-1$ + + /** + * Key to access the <code>IProgressMonitor</code> reference. When a + * progress monitor is passed to the <code>AntRunner.run(IProgressMonitor)</code> + * method, the object is available as a reference for the current + * Ant project. + */ + public static final String ECLIPSE_PROGRESS_MONITOR = "eclipse.progress.monitor"; //$NON-NLS-1$ + + /** + * Status code indicating an error occurred running a build. + * @since 2.1 + */ + public static final int ERROR_RUNNING_BUILD = 1; + + /** + * Status code indicating an error occurred due to a malformed URL. + * @since 2.1 + */ + public static final int ERROR_MALFORMED_URL = 2; + + /** + * Status code indicating an error occurred as a library was not specified + * @since 2.1 + */ + public static final int ERROR_LIBRARY_NOT_SPECIFIED = 3; + + /** + * Constructs an instance of this plug-in runtime class. + * <p> + * An instance of this plug-in runtime class is automatically created + * when the facilities provided by the Ant Core plug-in are required. + * <b>Clients must never explicitly instantiate a plug-in runtime class.</b> + * </p> + * @since 3.1 + * + */ + public AntCorePlugin() { + plugin = this; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) + * @since 3.1 + */ + public void stop(BundleContext context) throws Exception { + super.stop(context); + AntCoreUtil.setBundleContext(null); + if (preferences != null) { + savePluginPreferences(); + } + } + + /* (non-Javadoc) + * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) + * @since 3.1 + */ + public void start(BundleContext context) throws Exception { + super.start(context); + AntCoreUtil.setBundleContext(context); + } + + /** + * Given an extension point name, extract its extensions and return them + * as a List. + * @param pointName The name of the extension point + * @return The list of the extensions + */ + private List extractExtensions(String pointName) { + IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(AntCorePlugin.PI_ANTCORE, pointName); + if (extensionPoint == null) { + return null; + } + IConfigurationElement[] extensions = extensionPoint.getConfigurationElements(); + return Arrays.asList(extensions); + } + + /** + * Returns an object representing this plug-in's preferences. + * + * @return the Ant core object representing the preferences for this plug-in. + */ + public AntCorePreferences getPreferences() { + if (preferences == null) { + preferences = new AntCorePreferences(extractExtensions(PT_TASKS), extractExtensions(PT_EXTRA_CLASSPATH), extractExtensions(PT_TYPES), extractExtensions(PT_PROPERTIES), false); + } + return preferences; + } + + /** + * Set this plug-in's preferences for running headless based on the + * headless parameter. + * This method is public for testing purposes only. It should not + * be called outside of the Ant integration framework. + * @param headless Whether or not to mark that the plug-in is running headless or not + */ + public void setRunningHeadless(boolean headless) { + preferences = new AntCorePreferences(extractExtensions(PT_TASKS), extractExtensions(PT_EXTRA_CLASSPATH), extractExtensions(PT_TYPES), extractExtensions(PT_PROPERTIES), headless); + } + + /** + * Returns this plug-in instance. + * + * @return the single instance of this plug-in runtime class + */ + public static AntCorePlugin getPlugin() { + return plugin; + } + + /** + * Returns a new class loader to use when executing Ant builds. + * + * @return the new class loader + */ + public ClassLoader getNewClassLoader() { + AntCorePreferences corePreferences = getPreferences(); + return getNewClassLoader(false, corePreferences.getURLs()); + } + + /** + * Returns a new class loader to use when executing Ant builds. + * @param urls the URLs that define the classpath of the new classloader + * @return the new class loader + * @since 3.1 + */ + public URLClassLoader getNewClassLoader(URL[] urls) { + return getNewClassLoader(false, urls); + } + + /** + * Returns a new class loader to use when executing Ant builds or + * other applications such as parsing or code proposal determination. + * + * @param allowLoading whether to allow plug-in classloaders associated + * with the new classloader to load Apache Ant classes or resources. + * @return the new class loader + */ + public ClassLoader getNewClassLoader(boolean allowLoading) { + AntCorePreferences corePreferences = getPreferences(); + URL[] urls = corePreferences.getURLs(); + return getNewClassLoader(allowLoading, urls); + } + + /** + * Returns a new class loader to use when executing Ant builds or + * other applications such as parsing or code proposal determination. + * + * @param allowLoading whether to allow plug-in classloaders associated + * with the new classloader to load Apache Ant classes or resources. + * @param urls the URLs that define the classpath of the new classloader + * @return the new class loader + * @since 3.1 + */ + public URLClassLoader getNewClassLoader(boolean allowLoading, URL[] urls) { + AntCorePreferences corePreferences = getPreferences(); + ClassLoader[] pluginLoaders = corePreferences.getPluginClassLoaders(); + AntClassLoader loader= new AntClassLoader(urls, pluginLoaders); + loader.allowPluginClassLoadersToLoadAnt(allowLoading); + return loader; + } + + /** + * Logs the specified throwable with this plug-in's log. + * + * @param t throwable to log + * @since 2.1 + */ + public static void log(Throwable t) { + IStatus status= new Status(IStatus.ERROR, PI_ANTCORE, INTERNAL_ERROR, "Error logged from Ant Core: ", t); //$NON-NLS-1$ + getPlugin().getLog().log(status); + } +} @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.core; + + +/** + * A security exception that is thrown by the AntSecurityManager if + * an Ant task in some way attempts to halt or exit the Java Virtual Machine. + * + * Clients may instantiate this class; it is not intended to be subclassed. + * @since 2.1 + * @noextend This class is not intended to be subclassed by clients. + */ +public class AntSecurityException extends SecurityException { + + private static final long serialVersionUID = 1L; + +} @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.core; + +import java.net.URL; + +/** + * Represents an Ant classpath entry. + * Clients may implement this interface. + * + * @since 3.0 + */ +public interface IAntClasspathEntry { + + /** + * Returns the label for this classpath entry. + * @return the label for this entry. + */ + public String getLabel(); + + /** + * Returns the URL for this classpath entry or <code>null</code> + * if it cannot be resolved. + * + * @return the url for this classpath entry. + */ + public URL getEntryURL(); + + /** + * Returns whether this classpath entry requires the Eclipse runtime to be + * relevant. Defaults value is <code>true</code> + * + * @return whether this classpath entry requires the Eclipse runtime + */ + public boolean isEclipseRuntimeRequired(); +} @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.core; + + +import org.eclipse.ant.internal.core.AntObject; + +/** + * Represents an Ant task. + * Clients may instantiate this class; it is not intended to be subclassed. + * @since 2.1 + * @noextend This class is not intended to be subclassed by clients. + */ +public class Task extends AntObject { + + /** + * Returns the name of the task + * @return the name of the task + */ + public String getTaskName() { + return fName; + } + + /** + * Sets the name of the task + * @param taskName The taskName to set + */ + public void setTaskName(String taskName) { + fName= taskName; + } +} @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.core; + + +import org.eclipse.ant.internal.core.AntObject; + +/** + * Represents an Ant type. + * Clients may instantiate this class; it is not intended to be subclassed. + * @since 2.1 + * @noextend This class is not intended to be subclassed by clients. + */ +public class Type extends AntObject { + + /** + * Returns the type name + * @return Returns a String + */ + public String getTypeName() { + return fName; + } + + /** + * Sets the taskName. + * @param taskName The taskName to set + */ + public void setTypeName(String taskName) { + fName = taskName; + } +} @@ -0,0 +1,14 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>Package-level Javadoc</title> +</head> +<body> +Provides support for running the Ant build tool in the platform. +<h2> +Package Specification</h2> +This package defines a number of task and data types and various infrastructure +pieces which make Ant in the platform easier and more powerful. +</body> +</html> @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.core; + +import java.util.Map; + +import org.eclipse.ant.core.AntCorePlugin; + +public abstract class AbstractEclipseBuildLogger { + + /** + * Process identifier - used to link the Eclipse Ant build + * loggers to a process. + */ + public static final String ANT_PROCESS_ID = AntCorePlugin.PI_ANTCORE + ".ANT_PROCESS_ID"; //$NON-NLS-1$ + + protected String fProcessId= null; + + public void configure(Map userProperties) { + fProcessId= (String) userProperties.remove(ANT_PROCESS_ID); + } +}
\ No newline at end of file @@ -0,0 +1,169 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Tom Tromey (tromey@redhat.com) - patch for bug 40972 + *******************************************************************************/ +package org.eclipse.ant.internal.core; + + +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; + +public class AntClassLoader extends URLClassLoader { + + private static final String ANT_PACKAGES_PREFIX = "org.apache.tools"; //$NON-NLS-1$ + private static final String ANT_URL_PREFIX = "org/apache/tools"; //$NON-NLS-1$ + + private boolean fAllowPluginLoading = false; + + protected ClassLoader[] fPluginLoaders; + + private ClassLoader fContextClassloader = null; + + public AntClassLoader(URL[] urls, ClassLoader[] pluginLoaders) { + super(urls, ClassLoader.getSystemClassLoader()); + fPluginLoaders = pluginLoaders; + } + + /* + * @see java.net.URLClassLoader#findClass(java.lang.String) + */ + protected Class findClass(String name) throws ClassNotFoundException { + Class result = null; + //check whether to load the Apache Ant classes from the plug-in class loaders + //or to only load from the URLs specified from the Ant runtime classpath preferences setting + if (fAllowPluginLoading || !(name.startsWith(ANT_PACKAGES_PREFIX))) { + result = loadClassPlugins(name); + } + + if (result != null) { + return result; + } + + return super.findClass(name); + } + + protected Class loadClassPlugins(String name) { + //remove this class loader as the context class loader + //when loading classes from plug-ins...see bug 94471 + ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader(); + if (fContextClassloader != null) { + Thread.currentThread().setContextClassLoader(fContextClassloader); + } + try { + Class result = null; + if (fPluginLoaders != null) { + for (int i = 0; (i < fPluginLoaders.length) && (result == null); i++) { + try { + result = fPluginLoaders[i].loadClass(name); + } catch (ClassNotFoundException e) { + // Ignore exception now. If necessary we'll throw + // a ClassNotFoundException in loadClass(String) + } + } + } + return result; + } finally { + Thread.currentThread().setContextClassLoader(originalClassLoader); + } + } + + /* + * @see java.net.URLClassLoader#findResource(java.lang.String) + */ + public URL findResource(String name) { + if (fAllowPluginLoading || !(name.startsWith(ANT_URL_PREFIX))) { + URL result = findResourcePlugins(name); + if (result != null) { + return result; + } + } + + return super.findResource(name); + } + + private URL findResourcePlugins(String name) { + //remove this class loader as the context class loader + //when loading resources from plug-ins...see bug 94471 + ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader(); + if (fContextClassloader != null) { + Thread.currentThread().setContextClassLoader(fContextClassloader); + } + try { + URL result = null; + if (fPluginLoaders != null) { + for (int i = 0; i < fPluginLoaders.length; i++) { + result = fPluginLoaders[i].getResource(name); + if (result != null) { + return result; + } + } + } + } finally { + Thread.currentThread().setContextClassLoader(originalClassLoader); + } + return null; + } + + /* + * @see java.net.URLClassLoader#findResources(java.lang.String) + */ + public Enumeration findResources(String name) throws IOException { + ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader(); + if (fContextClassloader != null) { + Thread.currentThread().setContextClassLoader(fContextClassloader); + } + List all = new ArrayList(); + try { + if (fAllowPluginLoading || !(name.startsWith(ANT_URL_PREFIX) || name.startsWith(ANT_URL_PREFIX, 1))) { + if (fPluginLoaders != null) { + Enumeration result = null; + for (int i = 0; i < fPluginLoaders.length; i++) { + result = fPluginLoaders[i].getResources(name); + while (result.hasMoreElements()) { + all.add(result.nextElement()); + } + } + } + } + + Enumeration superResources = super.findResources(name); + if (all.isEmpty()) { + return superResources; + } + + while (superResources.hasMoreElements()) { + all.add(superResources.nextElement()); + } + return Collections.enumeration(all); + } finally { + Thread.currentThread().setContextClassLoader(originalClassLoader); + } + } + + /** + * Sets whether this class loader will allow Apache Ant classes or resources to be found or + * loaded from its set of plug-in class loaders. + * + * @param allowLoading whether or not to allow the plug-in class loaders + * to load the Apache Ant classes or resources + */ + public void allowPluginClassLoadersToLoadAnt(boolean allowLoading) { + fAllowPluginLoading = allowLoading; + } + + public void setPluginContextClassloader(ClassLoader classLoader) { + fContextClassloader = classLoader; + } +}
\ No newline at end of file @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2003, 2006 BBDO Detroit and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Thierry Lach (thierry.lach@bbdodetroit.com) - initial API and implementation for bug 40502 + * IBM Corporation - added eclipse.running property, bug 65655 + *******************************************************************************/ +package org.eclipse.ant.internal.core; + +import java.io.File; +import java.net.URL; + +import org.eclipse.ant.core.AntCorePlugin; +import org.eclipse.ant.core.IAntPropertyValueProvider; +import org.eclipse.core.runtime.FileLocator; + +/** + * Dynamic provider for Ant properties. + * + * Provides the dynamic values for the following Ant properties: + * + * <ul> + * <li><code>eclipse.home</code> - set to the Eclipse installation directory</li> + * </ul> + * * <ul> + * <li><code>eclipse.running</code> - set (to "true") when Eclipse is running</li> + * </ul> + * + * @since 3.0 + */ +public class AntPropertyValueProvider implements IAntPropertyValueProvider { + /** + * Returns the dynamic property values for Ant properties. + * + * @param propertyName The name of the property to resolve the value for + * @return The resolved value for the property + * @see org.eclipse.ant.core.IAntPropertyValueProvider#getAntPropertyValue(String) + */ + public String getAntPropertyValue(String propertyName) { + String value = null; + if ("eclipse.running".equals(propertyName)){ //$NON-NLS-1$ + return "true"; //$NON-NLS-1$ + } else if ("eclipse.home".equals(propertyName)) { //$NON-NLS-1$ + try { + value = new File(FileLocator.resolve(new URL("platform:/base/")).getPath()).getAbsolutePath(); //$NON-NLS-1$ + if (value.endsWith("/")) { //$NON-NLS-1$ + value = value.substring(0, value.length() - 1); + } + } catch (Exception e) { + AntCorePlugin.log(e); + } + } + return value; + } +}
\ No newline at end of file @@ -0,0 +1,373 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.core; + + +import java.io.FileDescriptor; +import java.net.InetAddress; +import java.net.SocketPermission; +import java.security.Permission; +import java.util.PropertyPermission; +import org.eclipse.ant.core.AntSecurityException; + +/** + * A security manager that always throws an <code>AntSecurityException</code> + * if the calling thread attempts to cause the Java Virtual Machine to + * exit/halt or if the restricted thread attempts to set a System property. + * Otherwise this manager just delegates to the pre-existing manager + * passed in the constructor or mimics the default security manager behavior + */ +public class AntSecurityManager extends SecurityManager { + + private SecurityManager fSecurityManager= null; + private Thread fRestrictedThread= null; + //ensure that the PropertyPermission class is loaded before we + //start checking permissions: bug 85908 + private static final PropertyPermission fgPropertyPermission= new PropertyPermission("*", "write"); //$NON-NLS-1$ //$NON-NLS-2$ + + private boolean fAllowSettingSystemProperties= true; + + public AntSecurityManager(SecurityManager securityManager, Thread restrictedThread, boolean allowSettingProperties) { + fSecurityManager= securityManager; + fRestrictedThread= restrictedThread; + fAllowSettingSystemProperties= allowSettingProperties; + } + + public AntSecurityManager(SecurityManager securityManager, Thread restrictedThread) { + this(securityManager, restrictedThread, true); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkExit(int) + */ + public void checkExit(int status) { + //no exit allowed from the restricted thread...System.exit is being called + //by some ant task...do not want Eclipse to exit if + //in the same VM. + if (Thread.currentThread() == fRestrictedThread) { + throw new AntSecurityException(); + } + if (fSecurityManager != null) { + fSecurityManager.checkExit(status); + } + } + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkAccept(java.lang.String, int) + */ + public void checkAccept(String host, int port) { + if (fSecurityManager != null) { + fSecurityManager.checkAccept(host, port); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkAccess(java.lang.Thread) + */ + public void checkAccess(Thread t) { + if (fSecurityManager != null) { + fSecurityManager.checkAccess(t); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkAccess(java.lang.ThreadGroup) + */ + public void checkAccess(ThreadGroup g) { + if (fSecurityManager != null) { + fSecurityManager.checkAccess(g); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkAwtEventQueueAccess() + */ + public void checkAwtEventQueueAccess() { + if (fSecurityManager != null) { + fSecurityManager.checkAwtEventQueueAccess(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkConnect(java.lang.String, int, java.lang.Object) + */ + public void checkConnect(String host, int port, Object context) { + if (fSecurityManager != null) { + fSecurityManager.checkConnect(host, port, context); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkConnect(java.lang.String, int) + */ + public void checkConnect(String host, int port) { + if (fSecurityManager != null) { + fSecurityManager.checkConnect(host, port); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkCreateClassLoader() + */ + public void checkCreateClassLoader() { + if (fSecurityManager != null) { + fSecurityManager.checkCreateClassLoader(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkDelete(java.lang.String) + */ + public void checkDelete(String file) { + if (fSecurityManager != null) { + fSecurityManager.checkDelete(file); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkExec(java.lang.String) + */ + public void checkExec(String cmd) { + if (fSecurityManager != null) { + fSecurityManager.checkExec(cmd); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkLink(java.lang.String) + */ + public void checkLink(String lib) { + if (fSecurityManager != null) { + fSecurityManager.checkLink(lib); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkListen(int) + */ + public void checkListen(int port) { + if (fSecurityManager != null) { + fSecurityManager.checkListen(port); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkMemberAccess(java.lang.Class, int) + */ + public void checkMemberAccess(Class clazz, int which) { + if (fSecurityManager != null) { + fSecurityManager.checkMemberAccess(clazz, which); + } + } + + /** + * @see java.lang.SecurityManager#checkMulticast(java.net.InetAddress, byte) + * @deprecated + */ + public void checkMulticast(InetAddress maddr, byte ttl) { + if (fSecurityManager != null) { + String host = maddr.getHostAddress(); + if (!host.startsWith("[") && host.indexOf(':') != -1) { //$NON-NLS-1$ + host = "[" + host + "]"; //$NON-NLS-1$ //$NON-NLS-2$ + } + checkPermission(new SocketPermission(host, "accept,connect")); //$NON-NLS-1$ + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkMulticast(java.net.InetAddress) + */ + public void checkMulticast(InetAddress maddr) { + if (fSecurityManager != null) { + fSecurityManager.checkMulticast(maddr); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPackageAccess(java.lang.String) + */ + public void checkPackageAccess(String pkg) { + if (fSecurityManager != null) { + fSecurityManager.checkPackageAccess(pkg); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPackageDefinition(java.lang.String) + */ + public void checkPackageDefinition(String pkg) { + if (fSecurityManager != null) { + fSecurityManager.checkPackageDefinition(pkg); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPermission(java.security.Permission, java.lang.Object) + */ + public void checkPermission(Permission perm, Object context) { + if (fSecurityManager != null) { + fSecurityManager.checkPermission(perm, context); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPermission(java.security.Permission) + */ + public void checkPermission(Permission perm) { + if (!fAllowSettingSystemProperties && fgPropertyPermission.implies(perm) && fRestrictedThread == Thread.currentThread()) { + //attempting to write a system property + throw new AntSecurityException(); + } + if (fSecurityManager != null) { + fSecurityManager.checkPermission(perm); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPrintJobAccess() + */ + public void checkPrintJobAccess() { + if (fSecurityManager != null) { + fSecurityManager.checkPrintJobAccess(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPropertiesAccess() + */ + public void checkPropertiesAccess() { + if (fSecurityManager != null) { + fSecurityManager.checkPropertiesAccess(); + } + super.checkPropertiesAccess(); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String) + */ + public void checkPropertyAccess(String key) { + if (fSecurityManager != null) { + fSecurityManager.checkPropertyAccess(key); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkRead(java.io.FileDescriptor) + */ + public void checkRead(FileDescriptor fd) { + if (fSecurityManager != null) { + fSecurityManager.checkRead(fd); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkRead(java.lang.String, java.lang.Object) + */ + public void checkRead(String file, Object context) { + if (fSecurityManager != null) { + fSecurityManager.checkRead(file, context); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkRead(java.lang.String) + */ + public void checkRead(String file) { + if (fSecurityManager != null) { + fSecurityManager.checkRead(file); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkSecurityAccess(java.lang.String) + */ + public void checkSecurityAccess(String target) { + if (fSecurityManager != null) { + fSecurityManager.checkSecurityAccess(target); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkSetFactory() + */ + public void checkSetFactory() { + if (fSecurityManager != null) { + fSecurityManager.checkSetFactory(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkSystemClipboardAccess() + */ + public void checkSystemClipboardAccess() { + if (fSecurityManager != null) { + fSecurityManager.checkSystemClipboardAccess(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkTopLevelWindow(java.lang.Object) + */ + public boolean checkTopLevelWindow(Object window) { + if (fSecurityManager != null) { + return fSecurityManager.checkTopLevelWindow(window); + } + return super.checkTopLevelWindow(window); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkWrite(java.io.FileDescriptor) + */ + public void checkWrite(FileDescriptor fd) { + if (fSecurityManager != null) { + fSecurityManager.checkWrite(fd); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkWrite(java.lang.String) + */ + public void checkWrite(String file) { + if (fSecurityManager != null) { + fSecurityManager.checkWrite(file); + } + } + + /** + * @see java.lang.SecurityManager#getInCheck() + * @deprecated + */ + public boolean getInCheck() { + if (fSecurityManager != null) { + return fSecurityManager.getInCheck(); + } + return super.getInCheck(); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#getSecurityContext() + */ + public Object getSecurityContext() { + if (fSecurityManager != null) { + return fSecurityManager.getSecurityContext(); + } + return super.getSecurityContext(); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#getThreadGroup() + */ + public ThreadGroup getThreadGroup() { + if (fSecurityManager != null) { + fSecurityManager.getThreadGroup(); + } + return super.getThreadGroup(); + } +} @@ -0,0 +1,35 @@ +/********************************************************************** + * Copyright (c) 2000, 2005 IBM Corporation and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.ant.internal.core; + +import org.eclipse.osgi.util.NLS; + +public class InternalCoreAntMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.ant.internal.core.InternalCoreAntMessages";//$NON-NLS-1$ + + public static String AntCorePreferences_Malformed_URL__1; + public static String AntCorePreferences_Library_not_specified_for___0__4; + public static String AntCorePreferences_No_library_for_task; + public static String AntCorePreferences_No_library_for_type; + public static String AntCorePreferences_8; + public static String AntCorePreferences_6; + public static String AntCorePreferences_0; + public static String AntCorePreferences_1; + + public static String AntRunner_Could_not_find_one_or_more_classes__Please_check_the_Ant_classpath__1; + public static String AntRunner_Could_not_find_one_or_more_classes__Please_check_the_Ant_classpath__2; + public static String AntRunner_Build_Failed__3; + public static String AntRunner_Already_in_progess; + + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, InternalCoreAntMessages.class); + } +}
\ No newline at end of file @@ -0,0 +1,24 @@ +############################################################################### +# Copyright (c) 2000, 2006 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +AntCorePreferences_Malformed_URL__1=Malformed URL. +AntCorePreferences_Library_not_specified_for___0__4=Library not specified for: {0} +AntCorePreferences_No_library_for_task=The library \"{0}\" specified from \"{1}\" for the antTasks extension does not exist +AntCorePreferences_No_library_for_type=The library \"{0}\" specified from \"{1}\" for the antTypes extension of does not exist +AntCorePreferences_8=The library \"{0}\" specified from \"{1}\" for the antTasks or antTypes extension does not exist +AntCorePreferences_6=The library \"{0}\" specified from \"{1}\" for the extraClasspathEntries extension does not exist +AntCorePreferences_0=Exception parsing bundle manifest file. +AntCorePreferences_1=Host not found for the fragment: {0} + +AntRunner_Could_not_find_one_or_more_classes__Please_check_the_Ant_classpath__1=Could not find one or more classes. Please check the Ant classpath. +AntRunner_Could_not_find_one_or_more_classes__Please_check_the_Ant_classpath__2=Could not find one or more classes: \"{0}\". Please check the Ant classpath. +AntRunner_Build_Failed__3=BUILD FAILED +AntRunner_Already_in_progess=Ant build {0} already in progress. Concurrent Ant builds are possible if you specify to build in a separate JRE. @@ -0,0 +1,118 @@ +/******************************************************************************* + * Copyright (c) 2004, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Philippe Ombredanne (pombredanne@nexb.com) - bug 125367 + *******************************************************************************/ +package org.eclipse.ant.internal.core.contentDescriber; + +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; + +import javax.xml.parsers.ParserConfigurationException; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExecutableExtension; +import org.eclipse.core.runtime.content.IContentDescription; +import org.eclipse.core.runtime.content.XMLContentDescriber; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +/** + * A content describer for Ant buildfiles. + * <p> + * If project top level element is found + * then if: + * target sub-elements are found returns VALID + * default attribute is found returns VALID + * some other likely Ant element is found (classpath, import, macrodef, path, property, taskdef, typedef) returns VALID + * else: + * returns INDETERMINATE + * else + * returns INDETERMINATE + * </p> + * + * @since 3.1 + */ +public final class AntBuildfileContentDescriber extends XMLContentDescriber implements IExecutableExtension { + + /* (Intentionally not included in javadoc) + * Determines the validation status for the given contents. + * + * @param contents the contents to be evaluated + * @return one of the following:<ul> + * <li><code>VALID</code></li>, + * <li><code>INVALID</code></li>, + * <li><code>INDETERMINATE</code></li> + * </ul> + * @throws IOException + */ + private int checkCriteria(InputSource contents) throws IOException { + AntHandler antHandler = new AntHandler(); + try { + if (!antHandler.parseContents(contents)) { + return INDETERMINATE; + } + } catch (SAXException e) { + // we may be handed any kind of contents... it is normal we fail to parse + return INDETERMINATE; + } catch (ParserConfigurationException e) { + // some bad thing happened - force this describer to be disabled + String message = "Internal Error: XML parser configuration error during content description for Ant buildfiles"; //$NON-NLS-1$ + throw new RuntimeException(message); + } + // Check to see if we matched our criteria. + if (antHandler.hasRootProjectElement()) { + if (antHandler.hasProjectDefaultAttribute() || antHandler.hasTargetElement() || antHandler.hasAntElement()) { + //project and default attribute or project and target element(s) + //or project and top level ant element(s) (classpath, import, macrodef, path, property, taskdef, typedef) + return VALID; + } + //only a top level project element...maybe an Ant buildfile + return INDETERMINATE; + } + + return INDETERMINATE; + } + + /* (Intentionally not included in javadoc) + * @see IContentDescriber#describe(InputStream, IContentDescription) + */ + public int describe(InputStream contents, IContentDescription description) throws IOException { + // call the basic XML describer to do basic recognition + if (super.describe(contents, description) == INVALID) { + return INVALID; + } + // super.describe will have consumed some chars, need to rewind + contents.reset(); + // Check to see if we matched our criteria. + return checkCriteria(new InputSource(contents)); + } + + /* (Intentionally not included in javadoc) + * @see IContentDescriber#describe(Reader, IContentDescription) + */ + public int describe(Reader contents, IContentDescription description) throws IOException { + // call the basic XML describer to do basic recognition + if (super.describe(contents, description) == INVALID) { + return INVALID; + } + // super.describe will have consumed some chars, need to rewind + contents.reset(); + // Check to see if we matched our criteria. + return checkCriteria(new InputSource(contents)); + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, java.lang.String, java.lang.Object) + */ + public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { + } +}
\ No newline at end of file @@ -0,0 +1 @@ +jarprocessor.exclude.sign=true
\ No newline at end of file @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2004, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.core.ant; + + +import org.apache.tools.ant.DemuxInputStream; +import org.apache.tools.ant.Project; + +/** + * This class exists so that the Ant integration has backwards compatibility + * with Ant releases previous to 1.6. DemuxInputStream is a new class to Ant 1.6. + */ +class DemuxInputStreamSetter { + + protected void remapSystemIn(Project project) { + System.setIn(new DemuxInputStream(project)); + } +} @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.core.ant; + +import java.util.Iterator; + +import org.apache.tools.ant.BuildListener; +import org.apache.tools.ant.Main; +import org.apache.tools.ant.Project; + +public class EclipseAntMain extends Main { + + private Project fEclipseAntProject; + + public EclipseAntMain(Project eclipseAntProject) { + super(); + fEclipseAntProject = eclipseAntProject; + } + + public static void run(String[] args, Project eclipseAntProject) { + Main projectHelpMain = new EclipseAntMain(eclipseAntProject); + projectHelpMain.startAnt(args, null, null); + } + + /* + * @see org.apache.tools.ant.Main#exit(int) + */ + protected void exit(int exitCode) { + //disallow system exit + } + + /* + * @see org.apache.tools.ant.Main#addBuildListeners(org.apache.tools.ant.Project) + */ + protected void addBuildListeners(Project project) { + Iterator listeners = fEclipseAntProject.getBuildListeners().iterator(); + while (listeners.hasNext()) { + project.addBuildListener((BuildListener) listeners.next()); + } + } +} @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.core.ant; + +import java.util.Arrays; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.helper.DefaultExecutor; + +public class EclipseDefaultExecutor extends DefaultExecutor { + + private static final EclipseSingleCheckExecutor SUB_EXECUTOR = new EclipseSingleCheckExecutor(); + + /* (non-Javadoc) + * @see org.apache.tools.ant.Executor#executeTargets(org.apache.tools.ant.Project, java.lang.String[]) + */ + public void executeTargets(Project project, String[] targetNames) throws BuildException { + Vector v= new Vector(); + v.addAll(Arrays.asList(targetNames)); + project.addReference("eclipse.ant.targetVector", v); //$NON-NLS-1$ + super.executeTargets(project, targetNames); + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Executor#getSubProjectExecutor() + */ + public Executor getSubProjectExecutor() { + return SUB_EXECUTOR; + } +} @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.core.ant; + +import org.apache.tools.ant.Project; + +public class EclipseMainHelper { + + protected void runProjectHelp(String buildFileLocation, Project eclipseAntProject) { + EclipseAntMain.run(new String[]{"-f", buildFileLocation, "-p"}, eclipseAntProject); //$NON-NLS-1$ //$NON-NLS-2$ + } + + protected void runUsage(String buildFileLocation, Project eclipseAntProject) { + EclipseAntMain.run(new String[]{"-f", buildFileLocation, "-h"}, eclipseAntProject); //$NON-NLS-1$ //$NON-NLS-2$ + } +} @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.core.ant; + +import java.util.Arrays; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.helper.SingleCheckExecutor; + +public class EclipseSingleCheckExecutor extends SingleCheckExecutor { + + /* (non-Javadoc) + * @see org.apache.tools.ant.Executor#executeTargets(org.apache.tools.ant.Project, java.lang.String[]) + */ + public void executeTargets(Project project, String[] targetNames) throws BuildException { + Vector v= new Vector(); + v.addAll(Arrays.asList(targetNames)); + project.addReference("eclipse.ant.targetVector", v); //$NON-NLS-1$ + super.executeTargets(project, targetNames); + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Executor#getSubProjectExecutor() + */ + public Executor getSubProjectExecutor() { + return this; + } +} @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.core.ant; + +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; + +/** + * This class exists so that the Ant integration has backwards compatibility + * with Ant releases previous to 1.6.3. Executors are a new feature of Ant 1.6.3. + */ +public class ExecutorSetter { + + protected void setExecutor(Project project) { + Executor executor= new EclipseDefaultExecutor(); + project.setExecutor(executor); + } +} @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.core.ant; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.tools.ant.input.DefaultInputHandler; + +public class FailInputHandler extends DefaultInputHandler { + + protected InputStream getInputStream() { + //ensure any attempts to read input fail + return new InputStream(){ + public int read() throws IOException { + throw new IOException(); + } + }; + } +} @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.core.ant; + + +import java.text.MessageFormat; // can't use ICU in ant + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.input.DefaultInputHandler; +import org.apache.tools.ant.input.InputHandler; + +/** + * This class exists so that the Ant integration has backwards compatibility + * with Ant releases previous to 1.5. InputHandlers are a new feature of Ant 1.5. + */ +class InputHandlerSetter { + + protected void setInputHandler(Project project, String inputHandlerClassname) { + InputHandler handler = null; + if (inputHandlerClassname == null) { + handler = new DefaultInputHandler(); + } else { + try { + handler = (InputHandler)(Class.forName(inputHandlerClassname).newInstance()); + } catch (ClassCastException e) { + String msg = MessageFormat.format(InternalAntMessages.InternalAntRunner_handler_does_not_implement_InputHandler5, new String[]{inputHandlerClassname}); + throw new BuildException(msg, e); + } catch (Exception e) { + String msg = MessageFormat.format(InternalAntMessages.InternalAntRunner_Unable_to_instantiate_input_handler_class, new String[]{inputHandlerClassname, e.getClass().getName()}); + throw new BuildException(msg, e); + } + } + project.setInputHandler(handler); + project.setProjectReference(handler); + } +} @@ -0,0 +1,178 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - derived implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.core.ant; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.text.MessageFormat; // can't use ICU, ant build script +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Properties; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectComponent; + +/** + * A subclass of Project to facilitate "faster" parsing with + * less garbage generated. This class is not used on Ant 1.6 and newer + * due to the improvements in lazy loading of these Ant versions. + * + * Only three tasks are loaded (property, taskdef and + * typedef: three tasks that can be defined outside of a target on Ant 1.5.1 or older). + * + * Datatypes are loaded if requested. + * + * Derived from the original Ant Project class + */ +public class InternalProject extends Project { + + private Hashtable typeNameToClass = null; + + public InternalProject() { + super(); + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Project#init() + */ + public void init() throws BuildException { + setJavaVersionProperty(); + + try { + Class taskClass = Class.forName("org.apache.tools.ant.taskdefs.Property"); //$NON-NLS-1$ + addTaskDefinition("property", taskClass); //$NON-NLS-1$ + taskClass = Class.forName("org.apache.tools.ant.taskdefs.Typedef"); //$NON-NLS-1$ + addTaskDefinition("typedef", taskClass); //$NON-NLS-1$ + taskClass = Class.forName("org.apache.tools.ant.taskdefs.Taskdef"); //$NON-NLS-1$ + addTaskDefinition("taskdef", taskClass); //$NON-NLS-1$ + } catch (NoClassDefFoundError e) { + throw new BuildException(InternalAntMessages.InternalAntRunner_Missing_Class, e); + } catch (ClassNotFoundException c) { + throw new BuildException(InternalAntMessages.InternalAntRunner_Missing_Class, c); + } + + setSystemProperties(); + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Project#createDataType(java.lang.String) + */ + public Object createDataType(String typeName) throws BuildException { + if (typeNameToClass == null) { + initializeTypes(); + } + Class typeClass = (Class) typeNameToClass.get(typeName); + + if (typeClass == null) { + return null; + } + + Throwable thrown = null; + try { + Constructor ctor = null; + boolean noArg = false; + // DataType can have a "no arg" constructor or take a single + // Project argument. + try { + ctor = typeClass.getConstructor(new Class[0]); + noArg = true; + } catch (NoSuchMethodException nse) { + ctor = typeClass.getConstructor(new Class[] { Project.class }); + noArg = false; + } + + Object o = null; + if (noArg) { + o = ctor.newInstance(new Object[0]); + } else { + o = ctor.newInstance(new Object[] { this }); + } + if (o instanceof ProjectComponent) { + ((ProjectComponent) o).setProject(this); + } + return o; + } catch (InvocationTargetException ite) { + thrown = ite.getTargetException(); + } catch (IllegalArgumentException e) { + thrown = e; + } catch (InstantiationException e) { + thrown = e; + } catch (IllegalAccessException e) { + thrown = e; + } catch (NoSuchMethodException nse) { + thrown = nse; + } catch (NoClassDefFoundError ncdfe) { + thrown = ncdfe; + } + if (thrown != null) { + String message= MessageFormat.format(InternalAntMessages.InternalProject_could_not_create_type, new String[]{typeName, thrown.toString()}); + throw new BuildException(message, thrown); + } + // this line is actually unreachable + return null; + } + + /** + * Initialize the mapping of data type name to data type classname + */ + private void initializeTypes() { + typeNameToClass = new Hashtable(18); + String dataDefs = "/org/apache/tools/ant/types/defaults.properties"; //$NON-NLS-1$ + try { + Properties props = new Properties(); + InputStream in = Project.class.getResourceAsStream(dataDefs); + if (in == null) { + return; + } + props.load(in); + in.close(); + + Enumeration enumeration = props.propertyNames(); + while (enumeration.hasMoreElements()) { + String typeName = (String) enumeration.nextElement(); + String className = props.getProperty(typeName); + try { + Class typeClass= Class.forName(className); + typeNameToClass.put(typeName, typeClass); + } catch (NoClassDefFoundError e) { + //ignore + } catch (ClassNotFoundException c) { + //ignore + } + } + } catch (IOException ioe) { + return; + } + + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Project#getDataTypeDefinitions() + */ + public Hashtable getDataTypeDefinitions() { + if (typeNameToClass == null) { + initializeTypes(); + } + return typeNameToClass; + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Project#addDataTypeDefinition(java.lang.String, java.lang.Class) + */ + public void addDataTypeDefinition(String typeName, Class typeClass) { + getDataTypeDefinitions(); + typeNameToClass.put(typeName, typeClass); + } +} @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.core.ant; + +import org.apache.tools.ant.AntClassLoader; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Path; + +public class InternalProject2 extends Project { + + /* (non-Javadoc) + * @see org.apache.tools.ant.Project#createClassLoader(org.apache.tools.ant.types.Path) + */ + public AntClassLoader createClassLoader(Path path) { + AntClassLoader loader= super.createClassLoader(path); + if (path == null) { + //use the "fake" Eclipse runtime classpath for Ant + loader.setClassPath(Path.systemClasspath); + } + + return loader; + } +}
\ No newline at end of file @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.core.ant; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.input.InputHandler; +import org.apache.tools.ant.input.InputRequest; + +/** + * A input handler that does nothing with input requests + * Used to ensure we do not block while retrieving targets from an Ant buildfile + * that has an input task in the top level implicit target + */ +public class NullInputHandler implements InputHandler { + + public NullInputHandler() { + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.input.InputHandler#handleInput(org.apache.tools.ant.input.InputRequest) + */ + public void handleInput(InputRequest request) throws BuildException { + } +} diff --git a/ant/org.eclipse.ant.launching/.classpath b/ant/org.eclipse.ant.launching/.classpath new file mode 100644 index 000000000..a8eb00e30 --- /dev/null +++ b/ ant/org.eclipse.ant.launching/.classpath@@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="src" output="loggers_bin" path="loggers"/> + <classpathentry kind="src" output="common_bin" path="common"/> + <classpathentry kind="src" output="remote_bin" path="remote"/> + <classpathentry kind="output" path="bin"/> +</classpath> @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet editPageId="org.eclipse.ui.resourceWorkingSetPage" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1254539808328_112" label="working set" name="working set"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.launching/lib" type="2"/> </launchConfigurationWorkingSet>}"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/org.eclipse.ant.launching/buildfiles/buildCommonDebug.xml"/> +</listAttribute> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="1"/> +</listAttribute> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.ant.launching"/> +<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet editPageId="org.eclipse.ui.resourceWorkingSetPage" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1254539834953_113" label="workingSet" name="workingSet"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.launching/common" type="2"/> </launchConfigurationWorkingSet>}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.ant.launching/buildfiles/buildCommonDebug.xml}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/> +</launchConfiguration> @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<booleanAttribute key="org.eclipse.ant.uiSET_INPUTHANDLER" value="false"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet editPageId="org.eclipse.ui.resourceWorkingSetPage" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1254539604968_29" label="working set" name="working set"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.launching/lib" type="2"/> </launchConfigurationWorkingSet>}"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/org.eclipse.ant.launching/buildfiles/buildLoggers.xml"/> +</listAttribute> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="1"/> +</listAttribute> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.ant.launching"/> +<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet editPageId="org.eclipse.ui.resourceWorkingSetPage" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1254539671875_56" label="workingSet" name="workingSet"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.launching/loggers" type="2"/> </launchConfigurationWorkingSet>}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.ant.launching/buildfiles/buildLoggers.xml}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/> +</launchConfiguration> @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1254617191468_44" label="working set" name="working set"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.launching/lib" type="2"/> </launchConfigurationWorkingSet>}"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/org.eclipse.ant.launching/buildfiles/buildRemote.xml"/> +</listAttribute> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="1"/> +</listAttribute> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.ant.launching"/> +<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1254617206453_45" label="workingSet" name="workingSet"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.launching/remote" type="2"/> </launchConfigurationWorkingSet>}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.ant.launching/buildfiles/buildRemote.xml}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="process_factory_id" value="org.eclipse.ant.ui.remoteAntProcessFactory"/> +</launchConfiguration> diff --git a/ant/org.eclipse.ant.launching/.project b/ant/org.eclipse.ant.launching/.project new file mode 100644 index 000000000..5f704efb4 --- /dev/null +++ b/ ant/org.eclipse.ant.launching/.project@@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.ant.launching</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <triggers>auto,full,incremental,</triggers> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/build loggers [Builder].launch</value> + </dictionary> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <triggers>auto,full,incremental,</triggers> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/build common debug [Builder].launch</value> + </dictionary> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <triggers>auto,full,incremental,</triggers> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/build remote support [Builder].launch</value> + </dictionary> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> + </natures> +</projectDescription> diff --git a/ant/org.eclipse.ant.launching/about.html b/ant/org.eclipse.ant.launching/about.html new file mode 100644 index 000000000..599392518 --- /dev/null +++ b/ ant/org.eclipse.ant.launching/about.html@@ -0,0 +1,53 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> +<title>About</title> +</head> +<body lang="EN-US"> +<h2>About This Content</h2> + +<p>October 8, 2009</p> +<h3>License</h3> + +<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>. +For purposes of the EPL, "Program" will mean the Content.</p> + +<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p> + +<h3>Third Party Content</h3> + +<p>The Content includes items that have been sourced from third parties as set out below. If you +did not receive this Content directly from the Eclipse Foundation, the following is provided +for informational purposes only, and you should look to the Redistributor’s license for +terms and conditions of use.</p> + +<h4>Ant 1.7.1</h4> + +<p>The following classes in the plug-in JAR are based on Ant code developed by The Apache Software Foundation and shall be defined as the "Ant-Derived Work":</p> + +<ul> + <li>org.eclipse.ant.internal.launching.remote.InternalAntRunner</li> +</ul> + +<p>The object code for InternalAntRunner is located in lib/remote.jar and the source code is located in lib/remotesrc.zip.</p> + +<p>Your use of the Ant-Derived Work is subject to the terms and conditions of the Apache Software License 2.0. A copy of the license is contained +in the file <a href="about_files/asl-v20.txt" target="_blank">about_files/asl-v20.txt</a> and is also available at +<a href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">http://www.apache.org/licenses/LICENSE-2.0.html</a>.</p> + +<p>The names "Ant" and "Apache Software Foundation" must not be used to endorse or promote products derived from this +software without prior written permission. For written permission, please contact <a href="mailto:apache@apache.org">apache@apache.org</a>.</p> + +<p>The Apache attribution <a href="about_files/NOTICE" target="_blank">NOTICE</a> file is included with the Content in accordance with 4d of the Apache License, Version 2.0.</p> +</body> +</html>
\ No newline at end of file @@ -0,0 +1,32 @@ +############################################################################### +# Copyright (c) 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .,\ + plugin.xml,\ + plugin.properties,\ + lib/antdebug.jar,\ + lib/loggers.jar,\ + lib/remote.jar,\ + about.html + +jars.compile.order = .,\ + lib/antdebug.jar,\ + lib/loggers.jar,\ + lib/remote.jar +source.lib/loggers.jar = loggers/ +output.lib/loggers.jar = loggers_bin/ +source.lib/antdebug.jar = common/ +output.lib/antdebug.jar = common_bin/ +source.lib/remote.jar = remote/ +output.lib/remote.jar = remote_bin/ +src.includes = about.html @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2005, 2009 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<project name="Build Ant common debug support JAR" default="build" basedir=".."> + + <target name="build" description="Cleans, builds and refreshes" depends="clean, lib/antdebuglib.jar"/> + + <target name="init"> + <property name="temp.folder" value="${basedir}/temp.folder"/> + <property name="build.result.folder" value="${basedir}"/> + </target> + + <target name="lib/antdebuglib.jar" description= "Creates the antdebug.jar" depends="init"> + <property name="destdir" value="${temp.folder}/lib/antdebug.jar.bin"/> + <delete dir="${destdir}"/> + <mkdir dir="${destdir}"/> + <!-- copy necessary class files resources --> + <copy todir="${destdir}"> + <fileset dir="${basedir}/common_bin"/> + </copy> + <mkdir dir="${build.result.folder}/lib"/> + <jar destfile="${build.result.folder}/lib/antdebug.jar" basedir="${destdir}"/> + <delete dir="${temp.folder}"/> + </target> + + <target name="clean" description="Deletes previous build remnants" depends="init"> + <delete file="${build.result.folder}/lib/antdebug.jar"/> + <delete dir="${temp.folder}"/> + </target> +</project> @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2005, 2009 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<project name="Build Ant loggers support JAR" default="build" basedir=".."> + + <target name="build" description="Cleans, builds and refreshes" depends="clean, lib/loggerslib.jar"/> + + <target name="init"> + <property name="temp.folder" value="${basedir}/temp.folder"/> + <property name="build.result.folder" value="${basedir}"/> + </target> + + <target name="lib/loggerslib.jar" description= "Creates the loggers.jar" depends="init"> + <property name="destdir" value="${temp.folder}/lib/loggers.jar.bin"/> + <delete dir="${destdir}"/> + <mkdir dir="${destdir}"/> + <!-- copy necessary class files resources --> + <copy todir="${destdir}"> + <fileset dir="${basedir}/loggers_bin/"/> + </copy> + <mkdir dir="${build.result.folder}/lib"/> + <jar destfile="${build.result.folder}/lib/loggers.jar" basedir="${destdir}"/> + <delete dir="${temp.folder}"/> + </target> + + <target name="clean" description="Deletes previous build remnants" depends="init"> + <delete file="${build.result.folder}/lib/loggers.jar"/> + <delete dir="${temp.folder}"/> + </target> +</project> @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Copyright (c) 2005, 2009 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<project name="Build Ant remote support JAR" default="build" basedir=".."> + + <target name="build" description="Cleans, builds and refreshes" depends="clean, lib/remotelib.jar"/> + + <target name="init"> + <property name="temp.folder" value="${basedir}/temp.folder"/> + <property name="build.result.folder" value="${basedir}"/> + </target> + + <target name="lib/remotelib.jar" description= "Creates the remote.jar" depends="init"> + <property name="destdir" value="${temp.folder}/lib/remote.jar.bin"/> + <delete dir="${destdir}"/> + <mkdir dir="${destdir}"/> + <!-- copy necessary class files resources --> + <copy todir="${destdir}"> + <fileset dir="${basedir}/remote_bin"/> + </copy> + <mkdir dir="${build.result.folder}/lib"/> + <jar destfile="${build.result.folder}/lib/remote.jar" basedir="${destdir}"/> + <delete dir="${temp.folder}"/> + </target> + + <target name="clean" description="Deletes previous build remnants" depends="init"> + <delete file="${build.result.folder}/lib/remote.jar"/> + <delete dir="${temp.folder}"/> + </target> +</project> @@ -0,0 +1 @@ +jarprocessor.exclude.sign=true
\ No newline at end of file @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug; + + +public interface IDebugBuildLogger { + + /** + * Requests to suspend the build if the current debug state + * indicates that suspension is required. + */ + public abstract void waitIfSuspended(); +}
\ No newline at end of file @@ -0,0 +1 @@ +jarprocessor.exclude.sign=true
\ No newline at end of file @@ -0,0 +1,179 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.runtime.logger; + + +import java.io.PrintStream; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.BuildLogger; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.util.StringUtils; +import org.eclipse.ant.core.AntSecurityException; +import org.eclipse.ant.internal.core.AbstractEclipseBuildLogger; +import org.eclipse.core.runtime.OperationCanceledException; + +public class NullBuildLogger extends AbstractEclipseBuildLogger implements BuildLogger{ + + protected int fMessageOutputLevel = Project.MSG_INFO; + private PrintStream fErr= null; + private PrintStream fOut= null; + protected boolean fEmacsMode= false; + + /** + * An exception that has already been logged. + */ + protected Throwable fHandledException= null; + + /** + * @see org.apache.tools.ant.BuildLogger#setMessageOutputLevel(int) + */ + public void setMessageOutputLevel(int level) { + fMessageOutputLevel= level; + } + + protected int getMessageOutputLevel() { + return fMessageOutputLevel; + } + + /** + * @see org.apache.tools.ant.BuildLogger#setEmacsMode(boolean) + */ + public void setEmacsMode(boolean emacsMode) { + fEmacsMode= emacsMode; + } + + /** + * @see org.apache.tools.ant.BuildListener#buildStarted(org.apache.tools.ant.BuildEvent) + */ + public void buildStarted(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#buildFinished(org.apache.tools.ant.BuildEvent) + */ + public void buildFinished(BuildEvent event) { + String message= handleException(event); + if (message != null) { + logMessage(message, getMessageOutputLevel()); + } + fHandledException= null; + } + + /** + * @see org.apache.tools.ant.BuildListener#targetStarted(org.apache.tools.ant.BuildEvent) + */ + public void targetStarted(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#targetFinished(org.apache.tools.ant.BuildEvent) + */ + public void targetFinished(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#taskStarted(org.apache.tools.ant.BuildEvent) + */ + public void taskStarted(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent) + */ + public void taskFinished(BuildEvent event) { + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.BuildListener#messageLogged(org.apache.tools.ant.BuildEvent) + */ + public void messageLogged(BuildEvent event) { + logMessage(event.getMessage(), event.getPriority()); + } + + protected PrintStream getErrorPrintStream() { + return fErr; + } + + protected PrintStream getOutputPrintStream() { + return fOut; + } + + /** + * @see org.apache.tools.ant.BuildLogger#setErrorPrintStream(java.io.PrintStream) + */ + public void setErrorPrintStream(PrintStream err) { + //this build logger logs to "null" unless + //the user has explicitly set a logfile to use + if (err == System.err) { + fErr= null; + } else { + fErr= err; + } + } + + /** + * @see org.apache.tools.ant.BuildLogger#setOutputPrintStream(java.io.PrintStream) + */ + public void setOutputPrintStream(PrintStream output) { + //this build logger logs to "null" unless + //the user has explicitly set a logfile to use + if (output == System.out) { + fOut= null; + } else { + fOut= output; + } + } + + protected void logMessage(String message, int priority) { + if (priority > getMessageOutputLevel()) { + return; + } + + if (priority == Project.MSG_ERR) { + if (getErrorPrintStream() != null && getErrorPrintStream() != System.err) { + //user has designated to log to a logfile + getErrorPrintStream().println(message); + } + } else { + if (getOutputPrintStream() != null && getOutputPrintStream() != System.out) { + //user has designated to log to a logfile + getOutputPrintStream().println(message); + } + } + } + + protected String handleException(BuildEvent event) { + Throwable exception = event.getException(); + if (exception == null || exception == fHandledException + || exception instanceof OperationCanceledException + || exception instanceof AntSecurityException) { + return null; + } + fHandledException= exception; + StringBuffer message= new StringBuffer(); + message.append(StringUtils.LINE_SEP); + message.append(RuntimeMessages.NullBuildLogger_1); + message.append(StringUtils.LINE_SEP); + if (Project.MSG_VERBOSE <= fMessageOutputLevel || !(exception instanceof BuildException)) { + message.append(StringUtils.getStackTrace(exception)); + } else { + if (exception instanceof BuildException) { + message.append(exception.toString()).append(StringUtils.LINE_SEP); + } else { + message.append(exception.getMessage()).append(StringUtils.LINE_SEP); + } + } + + return message.toString(); + } +} @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.runtime.logger; + +import org.eclipse.osgi.util.NLS; + +public class RuntimeMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.ant.internal.launching.runtime.logger.RuntimeMessages";//$NON-NLS-1$ + + public static String NullBuildLogger_1; + public static String AntProcessBuildLogger_Total_time; + public static String AntProcessBuildLogger__minutes_2; + public static String AntProcessBuildLogger__minute_3; + public static String AntProcessBuildLogger__seconds_4; + public static String AntProcessBuildLogger__second_5; + public static String AntProcessBuildLogger__milliseconds_6; + + public static String AntProcessDebugBuildLogger_1; + + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, RuntimeMessages.class); + } +}
\ No newline at end of file @@ -0,0 +1,20 @@ +############################################################################### +# Copyright (c) 2000, 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +NullBuildLogger_1=BUILD FAILED +AntProcessBuildLogger_Total_time=Total time: +AntProcessBuildLogger__minutes_2=\ minutes +AntProcessBuildLogger__minute_3=\ minute +AntProcessBuildLogger__seconds_4=\ seconds +AntProcessBuildLogger__second_5=\ second +AntProcessBuildLogger__milliseconds_6=\ milliseconds + +AntProcessDebugBuildLogger_1=Build cancelled. @@ -0,0 +1,24 @@ +############################################################################### +# Copyright (c) 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +pluginName=Ant Launching Support +providerName=Eclipse.org + +AntBuild = Ant Build +AntLaunchDelegate.name=Eclipse Ant Launcher +AntLaunchDelegate.description=The Eclipse Ant Launcher supports running and debugging Ant build files. + +AntBuilder.name=Ant Builder +AntBuilderLaunchDelegate.name= Eclipse Ant Builder Launcher +AntBuilderLaunchDelegate.description=The Eclipse Ant Builder Launcher supports running Ant build files. + +antBreakpointGroupName= Ant Breakpoints +AntLineBreakpoint.name = Ant Line Breakpoint
\ No newline at end of file @@ -0,0 +1 @@ +jarprocessor.exclude.sign=true
\ No newline at end of file @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote; + +/** + * A security exception that is thrown by the AntSecurityManager if + * an Ant task in some way attempts to halt or exit the Java Virtual Machine. + * + * @since 2.1 + */ +public class AntSecurityException extends SecurityException { + + private static final long serialVersionUID = 1L; + +} @@ -0,0 +1,371 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote; + + +import java.io.FileDescriptor; +import java.net.InetAddress; +import java.net.SocketPermission; +import java.security.Permission; +import java.util.PropertyPermission; + +/** + * A security manager that always throws an <code>AntSecurityException</code> + * if the calling thread attempts to cause the Java Virtual Machine to + * exit/halt or if the restricted thread attempts to set a System property. + * Otherwise this manager just delegates to the pre-existing manager + * passed in the constructor or mimics the default security manager behavior + */ +public class AntSecurityManager extends SecurityManager { + + private SecurityManager fSecurityManager= null; + private Thread fRestrictedThread= null; + //ensure that the PropertyPermission class is loaded before we + //start checking permissions: bug 85908 + private static final PropertyPermission fgPropertyPermission= new PropertyPermission("*", "write"); //$NON-NLS-1$ //$NON-NLS-2$ + + private boolean fAllowSettingSystemProperties= true; + + public AntSecurityManager(SecurityManager securityManager, Thread restrictedThread, boolean allowSettingProperties) { + fSecurityManager= securityManager; + fRestrictedThread= restrictedThread; + fAllowSettingSystemProperties= allowSettingProperties; + } + + public AntSecurityManager(SecurityManager securityManager, Thread restrictedThread) { + this(securityManager, restrictedThread, true); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkExit(int) + */ + public void checkExit(int status) { + //no exit allowed from the restricted thread...System.exit is being called + //by some ant task...disallow the exit + if (Thread.currentThread() == fRestrictedThread) { + throw new AntSecurityException(); + } + if (fSecurityManager != null) { + fSecurityManager.checkExit(status); + } + } + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkAccept(java.lang.String, int) + */ + public void checkAccept(String host, int port) { + if (fSecurityManager != null) { + fSecurityManager.checkAccept(host, port); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkAccess(java.lang.Thread) + */ + public void checkAccess(Thread t) { + if (fSecurityManager != null) { + fSecurityManager.checkAccess(t); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkAccess(java.lang.ThreadGroup) + */ + public void checkAccess(ThreadGroup g) { + if (fSecurityManager != null) { + fSecurityManager.checkAccess(g); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkAwtEventQueueAccess() + */ + public void checkAwtEventQueueAccess() { + if (fSecurityManager != null) { + fSecurityManager.checkAwtEventQueueAccess(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkConnect(java.lang.String, int, java.lang.Object) + */ + public void checkConnect(String host, int port, Object context) { + if (fSecurityManager != null) { + fSecurityManager.checkConnect(host, port, context); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkConnect(java.lang.String, int) + */ + public void checkConnect(String host, int port) { + if (fSecurityManager != null) { + fSecurityManager.checkConnect(host, port); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkCreateClassLoader() + */ + public void checkCreateClassLoader() { + if (fSecurityManager != null) { + fSecurityManager.checkCreateClassLoader(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkDelete(java.lang.String) + */ + public void checkDelete(String file) { + if (fSecurityManager != null) { + fSecurityManager.checkDelete(file); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkExec(java.lang.String) + */ + public void checkExec(String cmd) { + if (fSecurityManager != null) { + fSecurityManager.checkExec(cmd); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkLink(java.lang.String) + */ + public void checkLink(String lib) { + if (fSecurityManager != null) { + fSecurityManager.checkLink(lib); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkListen(int) + */ + public void checkListen(int port) { + if (fSecurityManager != null) { + fSecurityManager.checkListen(port); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkMemberAccess(java.lang.Class, int) + */ + public void checkMemberAccess(Class clazz, int which) { + if (fSecurityManager != null) { + fSecurityManager.checkMemberAccess(clazz, which); + } + } + + /** + * @see java.lang.SecurityManager#checkMulticast(java.net.InetAddress, byte) + * @deprecated + */ + public void checkMulticast(InetAddress maddr, byte ttl) { + if (fSecurityManager != null) { + String host = maddr.getHostAddress(); + if (!host.startsWith("[") && host.indexOf(':') != -1) { //$NON-NLS-1$ + host = "[" + host + "]"; //$NON-NLS-1$ //$NON-NLS-2$ + } + checkPermission(new SocketPermission(host, "accept,connect")); //$NON-NLS-1$ + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkMulticast(java.net.InetAddress) + */ + public void checkMulticast(InetAddress maddr) { + if (fSecurityManager != null) { + fSecurityManager.checkMulticast(maddr); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPackageAccess(java.lang.String) + */ + public void checkPackageAccess(String pkg) { + if (fSecurityManager != null) { + fSecurityManager.checkPackageAccess(pkg); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPackageDefinition(java.lang.String) + */ + public void checkPackageDefinition(String pkg) { + if (fSecurityManager != null) { + fSecurityManager.checkPackageDefinition(pkg); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPermission(java.security.Permission, java.lang.Object) + */ + public void checkPermission(Permission perm, Object context) { + if (fSecurityManager != null) { + fSecurityManager.checkPermission(perm, context); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPermission(java.security.Permission) + */ + public void checkPermission(Permission perm) { + if (!fAllowSettingSystemProperties && fgPropertyPermission.implies(perm) && fRestrictedThread == Thread.currentThread()) { + //attempting to write a system property + throw new AntSecurityException(); + } + if (fSecurityManager != null) { + fSecurityManager.checkPermission(perm); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPrintJobAccess() + */ + public void checkPrintJobAccess() { + if (fSecurityManager != null) { + fSecurityManager.checkPrintJobAccess(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPropertiesAccess() + */ + public void checkPropertiesAccess() { + if (fSecurityManager != null) { + fSecurityManager.checkPropertiesAccess(); + } + super.checkPropertiesAccess(); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkPropertyAccess(java.lang.String) + */ + public void checkPropertyAccess(String key) { + if (fSecurityManager != null) { + fSecurityManager.checkPropertyAccess(key); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkRead(java.io.FileDescriptor) + */ + public void checkRead(FileDescriptor fd) { + if (fSecurityManager != null) { + fSecurityManager.checkRead(fd); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkRead(java.lang.String, java.lang.Object) + */ + public void checkRead(String file, Object context) { + if (fSecurityManager != null) { + fSecurityManager.checkRead(file, context); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkRead(java.lang.String) + */ + public void checkRead(String file) { + if (fSecurityManager != null) { + fSecurityManager.checkRead(file); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkSecurityAccess(java.lang.String) + */ + public void checkSecurityAccess(String target) { + if (fSecurityManager != null) { + fSecurityManager.checkSecurityAccess(target); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkSetFactory() + */ + public void checkSetFactory() { + if (fSecurityManager != null) { + fSecurityManager.checkSetFactory(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkSystemClipboardAccess() + */ + public void checkSystemClipboardAccess() { + if (fSecurityManager != null) { + fSecurityManager.checkSystemClipboardAccess(); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkTopLevelWindow(java.lang.Object) + */ + public boolean checkTopLevelWindow(Object window) { + if (fSecurityManager != null) { + return fSecurityManager.checkTopLevelWindow(window); + } + return super.checkTopLevelWindow(window); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkWrite(java.io.FileDescriptor) + */ + public void checkWrite(FileDescriptor fd) { + if (fSecurityManager != null) { + fSecurityManager.checkWrite(fd); + } + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#checkWrite(java.lang.String) + */ + public void checkWrite(String file) { + if (fSecurityManager != null) { + fSecurityManager.checkWrite(file); + } + } + + /** + * @see java.lang.SecurityManager#getInCheck() + * @deprecated + */ + public boolean getInCheck() { + if (fSecurityManager != null) { + return fSecurityManager.getInCheck(); + } + return super.getInCheck(); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#getSecurityContext() + */ + public Object getSecurityContext() { + if (fSecurityManager != null) { + return fSecurityManager.getSecurityContext(); + } + return super.getSecurityContext(); + } + + /* (non-Javadoc) + * @see java.lang.SecurityManager#getThreadGroup() + */ + public ThreadGroup getThreadGroup() { + if (fSecurityManager != null) { + fSecurityManager.getThreadGroup(); + } + return super.getThreadGroup(); + } +} @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote; + + +import org.apache.tools.ant.DemuxInputStream; +import org.apache.tools.ant.Project; + +/** + * This class exists so that the Ant integration has backwards compatibility + * with Ant releases previous to 1.6. DemuxInputStream is a new class to Ant 1.6. + */ +class DemuxInputStreamSetter { + + protected void remapSystemIn(Project project) { + System.setIn(new DemuxInputStream(project)); + } +} @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote; + +import java.util.Arrays; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.helper.DefaultExecutor; + +public class EclipseDefaultExecutor extends DefaultExecutor { + + private static final EclipseSingleCheckExecutor SUB_EXECUTOR = new EclipseSingleCheckExecutor(); + + /* (non-Javadoc) + * @see org.apache.tools.ant.Executor#executeTargets(org.apache.tools.ant.Project, java.lang.String[]) + */ + public void executeTargets(Project project, String[] targetNames) throws BuildException { + Vector v= new Vector(); + v.addAll(Arrays.asList(targetNames)); + project.addReference("eclipse.ant.targetVector", v); //$NON-NLS-1$ + super.executeTargets(project, targetNames); + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Executor#getSubProjectExecutor() + */ + public Executor getSubProjectExecutor() { + return SUB_EXECUTOR; + } +} @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote; + +import java.util.Arrays; +import java.util.Vector; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.helper.SingleCheckExecutor; + +public class EclipseSingleCheckExecutor extends SingleCheckExecutor { + + /* (non-Javadoc) + * @see org.apache.tools.ant.Executor#executeTargets(org.apache.tools.ant.Project, java.lang.String[]) + */ + public void executeTargets(Project project, String[] targetNames) throws BuildException { + Vector v= new Vector(); + v.addAll(Arrays.asList(targetNames)); + project.addReference("eclipse.ant.targetVector", v); //$NON-NLS-1$ + super.executeTargets(project, targetNames); + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Executor#getSubProjectExecutor() + */ + public Executor getSubProjectExecutor() { + return this; + } +} @@ -0,0 +1,26 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote; + +import org.apache.tools.ant.Executor; +import org.apache.tools.ant.Project; + +/** + * This class exists so that the Ant integration has backwards compatibility + * with Ant releases previous to 1.6.3. Executors are a new feature of Ant 1.6.3. + */ +public class ExecutorSetter { + + protected void setExecutor(Project project) { + Executor executor= new EclipseDefaultExecutor(); + project.setExecutor(executor); + } +} @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote; + + +import java.text.MessageFormat; // can't use ICU, used by ant + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.input.DefaultInputHandler; +import org.apache.tools.ant.input.InputHandler; + +/** + * This class exists so that the Ant integration has backwards compatibility + * with Ant releases previous to 1.5. InputHandlers are a new feature of Ant 1.5. + */ +class InputHandlerSetter { + + protected void setInputHandler(Project project, String inputHandlerClassname) { + InputHandler handler = null; + if (inputHandlerClassname == null) { + handler = new DefaultInputHandler(); + } else { + try { + handler = (InputHandler)(Class.forName(inputHandlerClassname).newInstance()); + } catch (ClassCastException e) { + String msg = MessageFormat.format(RemoteAntMessages.getString("InternalAntRunner.The_specified_input_handler_class_{0}_does_not_implement_the_org.apache.tools.ant.input.InputHandler_interface_5"), new String[]{inputHandlerClassname}); //$NON-NLS-1$ + throw new BuildException(msg, e); + } catch (Exception e) { + String msg = MessageFormat.format(RemoteAntMessages.getString("InternalAntRunner.Unable_to_instantiate_specified_input_handler_class_{0}___{1}_6"), new String[]{inputHandlerClassname, e.getClass().getName()}); //$NON-NLS-1$ + throw new BuildException(msg, e); + } + } + project.setInputHandler(handler); + } +} @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote; + + +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +public class RemoteAntMessages { + + private static final String BUNDLE_NAME = "org.eclipse.ant.internal.launching.remote.RemoteAntMessages"; //$NON-NLS-1$ + + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); + + private RemoteAntMessages() { + } + + public static String getString(String key) { + try { + return RESOURCE_BUNDLE.getString(key); + } catch (MissingResourceException e) { + return '!' + key + '!'; + } + } +} @@ -0,0 +1,76 @@ +############################################################################### +# Copyright (c) 2000, 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +InternalAntRunner.Build_file__{0}_1=Buildfile: {0} +InternalAntRunner.Arguments__{0}_2=Arguments: {0} +InternalAntRunner.Default_target__3=Default target: +InternalAntRunner.Main_targets__4=Main targets: +InternalAntRunner.Subtargets__5=Subtargets: +InternalAntRunner.Unable_to_instantiate_logger__{0}_6=Unable to instantiate logger: {0} +InternalAntRunner.Could_not_load_the_version_information._{0}_9=Could not load the version information. {0} +InternalAntRunner.Could_not_load_the_version_information._10=Could not load the version information. +InternalAntRunner.options_13=options +InternalAntRunner.target_15=target +InternalAntRunner.Options___21=Options: +InternalAntRunner.print_this_message_23=print this message +InternalAntRunner.print_project_help_information_25=print project help information +InternalAntRunner.print_the_version_information_and_exit_27=print the version information and exit +InternalAntRunner.be_extra_quiet_29=be extra quiet +InternalAntRunner.be_extra_verbose_31=be extra verbose +InternalAntRunner.print_debugging_information_33=print debugging information +InternalAntRunner.produce_logging_information_without_adornments_35=produce logging information without adornments +InternalAntRunner.use_given_file_for_log_37=use given file for log +InternalAntRunner.the_class_which_is_to_perform_logging_39=the class which is to perform logging +InternalAntRunner.add_an_instance_of_class_as_a_project_listener_41=add an instance of class as a project listener +InternalAntRunner.use_given_buildfile_43=use given buildfile +InternalAntRunner.use_value_for_given_property_45=use value for given property +InternalAntRunner.Using_{0}_file_as_build_log._1=Using {0} file as build log. +InternalAntRunner.Could_not_write_to_the_specified_log_file__{0}._Make_sure_the_path_exists_and_you_have_write_permissions._2=Cannot write on the specified log file: {0}. Make sure the path exists and you have write permissions. +InternalAntRunner.BUILD_SUCCESSFUL_1=BUILD SUCCESSFUL +InternalAntRunner.Unknown_argument__{0}_2=Unknown argument: {0} +InternalAntRunner.Buildfile__{0}_does_not_exist_!_1=Buildfile: {0} does not exist +InternalAntRunner.{0}_which_was_specified_to_be_a_build_listener_is_not_an_instance_of_org.apache.tools.ant.BuildListener._1={0} which was specified to be a build listener is not an instance of org.apache.tools.ant.BuildListener. +InternalAntRunner.{0}_which_was_specified_to_perform_logging_is_not_an_instance_of_org.apache.tools.ant.BuildLogger._2={0} which was specified to perform logging is not an instance of org.apache.tools.ant.BuildLogger. +InternalAntRunner.You_must_specify_a_classname_when_using_the_-listener_argument_1=You must specify a classname when using the -listener argument +InternalAntRunner.You_must_specify_a_log_file_when_using_the_-log_argument_3=You must specify a log file when using the -log argument +InternalAntRunner.You_must_specify_a_buildfile_when_using_the_-buildfile_argument_4=You must specify a buildfile when using the -buildfile argument +InternalAntRunner.12=print information that might be helpful to +InternalAntRunner.13=\t\t\t\t\t\t\tdiagnose or report problems. +InternalAntRunner.19=load all properties from file with -D +InternalAntRunner.20=\t\t\t\t\t\t\tproperties taking precedence +InternalAntRunner.22=the class which will handle input requests +InternalAntRunner.1=\t\t\t\t\' +InternalAntRunner.Only_one_logger_class_may_be_specified_1=Only one logger class may be specified +InternalAntRunner.You_must_specify_a_classname_when_using_the_-inputhandler_argument_1=You must specify a classname when using the -inputhandler argument +InternalAntRunner.Only_one_input_handler_class_may_be_specified._2=Only one input handler class may be specified. +InternalAntRunner.You_must_specify_a_property_filename_when_using_the_-propertyfile_argument_3=You must specify a property filename when using the -propertyfile argument +InternalAntRunner.Could_not_load_property_file_{0}__{1}_4=Could not load property file {0}: {1} +InternalAntRunner.The_specified_input_handler_class_{0}_does_not_implement_the_org.apache.tools.ant.input.InputHandler_interface_5=The specified input handler class {0} does not implement the org.apache.tools.ant.input.InputHandler interface +InternalAntRunner.Unable_to_instantiate_specified_input_handler_class_{0}___{1}_6=Unable to instantiate specified input handler class {0} : {1} +InternalAntRunner.The_diagnositics_options_is_an_Ant_1.5.*_feature._Please_update_your_Ant_classpath_to_include_an_Ant_version_greater_than_this._4=The diagnostics options is an Ant 1.5.* feature. Please update your Ant classpath to include an Ant version greater than this. +InternalAntRunner.Specifying_property_files_is_a_Ant_1.5.*_feature._Please_update_your_Ant_classpath._6=Specifying property files is a Ant 1.5.* feature. Please update your Ant classpath to include an Ant version greater than this. +InternalAntRunner.ANT_HOME_must_be_set_to_use_Ant_diagnostics_2=ANT_HOME must be set to use Ant diagnostics +InternalAntRunner.Buildfile__{0}_is_not_a_file_1=Buildfile: {0} is not a file +InternalAntRunner.-find_not_supported=-find not supported.\nCan be emulated using Run As > Ant Build located\nin the Run > External Tools menu +InternalAntRunner.157=-lib not supported\nConfigure the Ant runtime classpath using either the\nglobal Ant runtime classpath or the Ant runtime classpath\n for this particular build +InternalAntRunner.158=\t\t\tdo not allow interactive input +InternalAntRunner.159=\t\texecute all targets that do not depend +InternalAntRunner.160=\t\t\t\t\t\ton failed target(s) +InternalAntRunner.161=Class {0} not found for task {1} +InternalAntRunner.162=Class {0} not found for type {1} + +RemoteAntBuildLogger.1=BUILD FAILED +RemoteAntBuildLogger.Total_time=Total time: +RemoteAntBuildLogger._minutes_2=\ minutes +RemoteAntBuildLogger._minute_3=\ minute +RemoteAntBuildLogger._seconds_4=\ seconds +RemoteAntBuildLogger._second_5=\ second +RemoteAntBuildLogger._milliseconds_6=\ milliseconds @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.launching.remote.inputhandler; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.tools.ant.input.DefaultInputHandler; + +public class FailInputHandler extends DefaultInputHandler { + + protected InputStream getInputStream() { + //ensure any attempts to read input fail + return new InputStream(){ + public int read() throws IOException { + throw new IOException(); + } + }; + } +} @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2003, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote.logger; + + +public class MessageIds { + + public final static String PROCESS_ID= "processID"; //$NON-NLS-1$ + public final static String BUILD_CANCELLED= "cancelled"; //$NON-NLS-1$ + //constants need to start greater than the Project.MSG_* constants + public final static String TASK= "6"; //$NON-NLS-1$ + public final static String TARGET= "7"; //$NON-NLS-1$ +} @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.remote.logger; + +import java.io.File; + +import org.eclipse.ant.internal.launching.debug.model.DebugMessageIds; + +public class RemoteAntBreakpoint { + + private File fFile; + private int fLineNumber; + private String fFileName; + + public RemoteAntBreakpoint(String breakpointRepresentation) { + String[] data= breakpointRepresentation.split(DebugMessageIds.MESSAGE_DELIMITER); + String fileName= data[1]; + String lineNumber= data[2]; + fFileName= fileName; + fFile= new File(fileName); + fLineNumber= Integer.parseInt(lineNumber); + } + + public boolean isAt(String fileName, int lineNumber) { + return fLineNumber == lineNumber && fileName != null && fFile.equals(new File(fileName)); + } + + public String toMarshallString() { + StringBuffer buffer= new StringBuffer(DebugMessageIds.BREAKPOINT); + buffer.append(DebugMessageIds.MESSAGE_DELIMITER); + buffer.append(fFileName); + buffer.append(DebugMessageIds.MESSAGE_DELIMITER); + buffer.append(fLineNumber); + return buffer.toString(); + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals(Object obj) { + if (!(obj instanceof RemoteAntBreakpoint)) { + return false; + } + RemoteAntBreakpoint other= (RemoteAntBreakpoint) obj; + return other.getLineNumber() == fLineNumber && other.getFile().equals(fFile); + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return fFileName.hashCode() + fLineNumber; + } + + public int getLineNumber() { + return fLineNumber; + } + + public String getFileName() { + return fFileName; + } + + public File getFile() { + return fFile; + } +} @@ -0,0 +1,25 @@ +/********************************************************************** + * Copyright (c) 2000, 2009 IBM Corporation and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.ant.internal.launching; + +import org.eclipse.osgi.util.NLS; + +public class AntCoreModelMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.ant.internal.launching.launchConfigurations.AntCoreModelMessages";//$NON-NLS-1$ + + public static String AntUtil_6; + public static String AntUtil_7; + public static String AntUtil_2; + + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, AntCoreModelMessages.class); + } +}
\ No newline at end of file @@ -0,0 +1,14 @@ +############################################################################### +# Copyright (c) 2000, 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +AntUtil_6=Invalid property file entry: {0} +AntUtil_7=Unable to generate Ant classpath +AntUtil_2=Error reading launch configuration @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.Launch; +import org.eclipse.debug.core.model.ISourceLocator; + +/** + * Stores link descriptors for Launch for further use of TaskLinkManager + */ +public class AntLaunch extends Launch { + List linkDescriptors; + + public AntLaunch(ILaunchConfiguration launchConfiguration, String mode, ISourceLocator locator) { + super(launchConfiguration, mode, locator); + linkDescriptors = new ArrayList(); + } + + public void addLinkDescriptor(String line, String fileName, int lineNumber, int offset, int length) { + if (fileName!= null && fileName.trim().length() > 0) { + synchronized (linkDescriptors) { + linkDescriptors.add(new LinkDescriptor(line, fileName, lineNumber, offset, length)); + } + } + } + + public void removeLinkDescriptor(LinkDescriptor ld) { + synchronized (linkDescriptors) { + linkDescriptors.remove(ld); + } + } + + public List getLinkDescriptors() { + synchronized (linkDescriptors) { + return new ArrayList(linkDescriptors); + } + } + + public void clearLinkDescriptors() { + synchronized (linkDescriptors) { + linkDescriptors.clear(); + } + } + +} @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching; + +import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; +import org.eclipse.core.runtime.preferences.DefaultScope; +import org.eclipse.core.runtime.preferences.IEclipsePreferences; + +public class AntLaunchingPreferenceInitializer extends + AbstractPreferenceInitializer { + + public AntLaunchingPreferenceInitializer() { + super(); + } + + /* + * (non-Javadoc) + * + * @seeorg.eclipse.core.runtime.preferences.AbstractPreferenceInitializer# + * initializeDefaultPreferences() + */ + public void initializeDefaultPreferences() { + + IEclipsePreferences node = new DefaultScope() + .getNode(AntLaunching.getUniqueIdentifier()); + node.put(IAntLaunchingPreferenceConstants.ANT_COMMUNICATION_TIMEOUT, + "20000"); //$NON-NLS-1$ + } +} @@ -0,0 +1,23 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching; + +/** + * Constants used to identify user preferences. + */ +public interface IAntLaunchingPreferenceConstants { + + /** + * int preference identifier constant which specifies the length of time to wait + * to connect with the socket that communicates with the separate JRE to capture the output + */ + public static final String ANT_COMMUNICATION_TIMEOUT= "timeout"; //$NON-NLS-1$ +} @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching; + +/** + * Stores detailed data of Link. Used to create linked messages. + */ +public class LinkDescriptor { + String line; + String fileName; + int lineNumber; + int offset; + int length; + + public LinkDescriptor(String line, String fileName, int lineNumber, + int offset, int length) { + super(); + this.line = line; + this.fileName = fileName; + this.lineNumber = lineNumber; + this.offset = offset; + this.length = length; + } + + public String getLine() { + return line; + } + + public void setLine(String line) { + this.line = line; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public int getLineNumber() { + return lineNumber; + } + + public void setLineNumber(int lineNumber) { + this.lineNumber = lineNumber; + } + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } + +} @@ -0,0 +1,23 @@ +/********************************************************************** + * Copyright (c) 2005, 2009 IBM Corporation and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.ant.internal.launching.debug; + +import org.eclipse.osgi.util.NLS; + +public class AntDebugMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.ant.internal.launching.debug.AntDebugMessages";//$NON-NLS-1$ + + public static String AntSourceContainer_0; + + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, AntDebugMessages.class); + } +}
\ No newline at end of file @@ -0,0 +1,12 @@ +############################################################################### +# Copyright (c) 2005, 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +AntSourceContainer_0=Ant Source Container
\ No newline at end of file @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.launching.debug; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.debug.core.sourcelookup.ISourceContainerType; +import org.eclipse.debug.core.sourcelookup.containers.AbstractSourceContainer; +import org.eclipse.debug.core.sourcelookup.containers.LocalFileStorage; + +public class AntSourceContainer extends AbstractSourceContainer { + + private IWorkspaceRoot fRoot; + + public AntSourceContainer() { + fRoot = ResourcesPlugin.getWorkspace().getRoot(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.sourcelookup.ISourceContainer#findSourceElements(java.lang.String) + */ + public Object[] findSourceElements(String path) throws CoreException { + ArrayList sources = new ArrayList(); + File osFile = new File(path); + if (osFile.exists()) { + try { + IPath canonicalPath = new Path(osFile.getCanonicalPath()); + IFile[] files = fRoot.findFilesForLocation(canonicalPath); + if (files.length > 0) { + for (int i = 0; i < files.length; i++) { + sources.add(files[i]); + } + } else { + sources.add(new LocalFileStorage(osFile)); + } + } catch (IOException e) { + } + } + return sources.toArray(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.sourcelookup.ISourceContainer#getName() + */ + public String getName() { + return AntDebugMessages.AntSourceContainer_0; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.sourcelookup.ISourceContainer#getType() + * Not persisted via the launch configuration + */ + public ISourceContainerType getType() { + return null; + } +}
\ No newline at end of file @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.sourcelookup.AbstractSourceLookupDirector; +import org.eclipse.debug.core.sourcelookup.ISourceLookupParticipant; + +/** + * Ant source lookup director. For Ant source lookup there is one source + * lookup participant. + */ +public class AntSourceLookupDirector extends AbstractSourceLookupDirector { + + /* (non-Javadoc) + * @see org.eclipse.debug.core.sourcelookup.ISourceLookupDirector#initializeParticipants() + */ + public void initializeParticipants() { + addParticipants(new ISourceLookupParticipant[]{new AntSourceLookupParticipant()}); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IPersistableSourceLocator#getMemento() + */ + public String getMemento() throws CoreException { + return null; + } +}
\ No newline at end of file @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug; + +import org.eclipse.ant.internal.launching.debug.model.AntStackFrame; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.sourcelookup.AbstractSourceLookupParticipant; + +/** + * The Ant source lookup participant knows how to translate a + * Ant stack frame into a source file name + */ +public class AntSourceLookupParticipant extends AbstractSourceLookupParticipant { + + /* (non-Javadoc) + * @see org.eclipse.debug.core.sourcelookup.ISourceLookupParticipant#getSourceName(java.lang.Object) + */ + public String getSourceName(Object object) throws CoreException { + if (object instanceof AntStackFrame) { + return ((AntStackFrame)object).getFilePath(); + } + if (object instanceof String) { + // assume it's a file name + return (String)object; + } + return null; + } +} @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.sourcelookup.ISourceContainer; +import org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate; + +/** + * Computes the default source lookup path for an Ant launch configuration. + * The default source lookup is a container that knows how to map the + * fully qualified file system paths to either the <code>IFile</code> within the workspace or + * a <code>LocalFileStorage</code> for buildfiles not in the workspace. + */ +public class AntSourcePathComputerDelegate implements ISourcePathComputerDelegate { + + /* (non-Javadoc) + * @see org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate#computeSourceContainers(org.eclipse.debug.core.ILaunchConfiguration, org.eclipse.core.runtime.IProgressMonitor) + */ + public ISourceContainer[] computeSourceContainers(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException { + return new ISourceContainer[] {new AntSourceContainer()}; + } +}
\ No newline at end of file @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.launching.debug; + +public interface IAntDebugConstants { + + /** + * Unique identifier for the Ant debug model (value + * <code>org.eclipse.ant.ui.debug</code>). + */ + public static final String ID_ANT_DEBUG_MODEL = "org.eclipse.ant.ui.debug"; //$NON-NLS-1$ + + /** + * Unique identifier for the Ant line breakpoint markers + * (value <code>org.eclipse.ant.ui.antLineBreakpointMarker</code>). + */ + public static final String ID_ANT_LINE_BREAKPOINT_MARKER= "org.eclipse.ant.ui.antLineBreakpointMarker"; //$NON-NLS-1$ + + /** + * Unique identifier for the Ant run to line breakpoints + * (value <code>org.eclipse.ant.ui.runToLineBreakpoint</code>). + */ + public static final String ANT_RUN_TO_LINE= "org.eclipse.ant.ui.runToLineBreakpoint"; //$NON-NLS-1$ +} @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + + +import org.eclipse.ant.internal.launching.AntLaunching; +import org.eclipse.ant.internal.launching.debug.IAntDebugConstants; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.DebugElement; + +/** + * Common function of Ant debug model elements + */ +public abstract class AntDebugElement extends DebugElement { + + /** + * Constructs a new debug element contained in the given + * debug target. + * + * @param target debug target + */ + public AntDebugElement(AntDebugTarget target) { + super(target); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier() + */ + public String getModelIdentifier() { + return IAntDebugConstants.ID_ANT_DEBUG_MODEL; + } + + /** + * Throws a debug exception with the given message, error code, and underlying + * exception. + */ + protected void throwDebugException(String message) throws DebugException { + throw new DebugException(new Status(IStatus.ERROR, AntLaunching.getUniqueIdentifier(), + DebugException.TARGET_REQUEST_FAILED, message, null)); + } + + protected AntDebugTarget getAntDebugTarget() { + return (AntDebugTarget)super.getDebugTarget(); + } +} @@ -0,0 +1,112 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + +import com.ibm.icu.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.ant.internal.launching.debug.IAntDebugConstants; +import org.eclipse.core.resources.IMarker; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.model.IBreakpoint; +import org.eclipse.debug.core.model.LineBreakpoint; + +/** + * Ant line breakpoint + */ +public class AntLineBreakpoint extends LineBreakpoint { + + /** + * Default constructor is required for the breakpoint manager + * to re-create persisted breakpoints. After instantiating a breakpoint, + * the <code>setMarker(...)</code> method is called to restore + * this breakpoint's attributes. + */ + public AntLineBreakpoint() { + } + + /** + * Constructs a line breakpoint on the given resource at the given + * line number. The line number is 1-based (i.e. the first line of a + * file is line number 1). + * + * @param resource file on which to set the breakpoint + * @param lineNumber 1-based line number of the breakpoint + * @throws CoreException if unable to create the breakpoint + */ + public AntLineBreakpoint(IResource resource, int lineNumber) throws CoreException { + this(resource, lineNumber, new HashMap(), true); + } + + /** + * Constructs a line breakpoint on the given resource at the given + * line number. The line number is 1-based (i.e. the first line of a + * file is line number 1). + * + * @param resource file on which to set the breakpoint + * @param lineNumber 1-based line number of the breakpoint + * @param attributes the marker attributes to set + * @param register whether to add this breakpoint to the breakpoint manager + * @throws CoreException if unable to create the breakpoint + */ + public AntLineBreakpoint(final IResource resource, final int lineNumber, final Map attributes, final boolean register) throws CoreException { + IWorkspaceRunnable wr= new IWorkspaceRunnable() { + public void run(IProgressMonitor monitor) throws CoreException { + IMarker marker = resource.createMarker(IAntDebugConstants.ID_ANT_LINE_BREAKPOINT_MARKER); + setMarker(marker); + attributes.put(IBreakpoint.ENABLED, Boolean.TRUE); + attributes.put(IMarker.LINE_NUMBER, new Integer(lineNumber)); + attributes.put(IBreakpoint.ID, IAntDebugConstants.ID_ANT_DEBUG_MODEL); + attributes.put(IMarker.MESSAGE, MessageFormat.format(DebugModelMessages.AntLineBreakpoint_0, new String[] {Integer.toString(lineNumber)})); + ensureMarker().setAttributes(attributes); + + register(register); + } + }; + run(getMarkerRule(resource), wr); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IBreakpoint#getModelIdentifier() + */ + public String getModelIdentifier() { + return IAntDebugConstants.ID_ANT_DEBUG_MODEL; + } + + /** + * @return whether this breakpoint is a run to line breakpoint + */ + public boolean isRunToLine() { + try { + return ensureMarker().getAttribute(IAntDebugConstants.ANT_RUN_TO_LINE, false); + } catch (DebugException e) { + return false; + } + } + + /** + * Add this breakpoint to the breakpoint manager, + * or sets it as unregistered. + */ + private void register(boolean register) throws CoreException { + if (register) { + DebugPlugin.getDefault().getBreakpointManager().addBreakpoint(this); + } else { + setRegistered(false); + } + } +} @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.IValue; +import org.eclipse.debug.core.model.IVariable; + +public class AntProperties extends AntDebugElement implements IVariable { + + private IValue fValue; + private String fName; + private boolean fValid= true; + + public AntProperties(AntDebugTarget target, String name) { + super(target); + fName= name; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IVariable#getValue() + */ + public synchronized IValue getValue() throws DebugException { + int attempts= 0; + while (!fValid && !getDebugTarget().isTerminated()) { + try { + wait(50); + } catch (InterruptedException e) { + } + if (attempts == 20 && !fValid && !getDebugTarget().isTerminated()) { + throwDebugException(DebugModelMessages.AntProperties_1); + } + attempts++; + } + return fValue; + } + + public IValue getLastValue() { + return fValue; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IVariable#getName() + */ + public String getName() { + return fName; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName() + */ + public String getReferenceTypeName() { + return ""; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IVariable#hasValueChanged() + */ + public boolean hasValueChanged() { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValueModification#setValue(java.lang.String) + */ + public void setValue(String expression) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValueModification#setValue(org.eclipse.debug.core.model.IValue) + */ + public void setValue(IValue value) { + fValue= value; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValueModification#supportsValueModification() + */ + public boolean supportsValueModification() { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValueModification#verifyValue(java.lang.String) + */ + public boolean verifyValue(String expression) { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValueModification#verifyValue(org.eclipse.debug.core.model.IValue) + */ + public boolean verifyValue(IValue value) { + return false; + } + + public synchronized void setValid(boolean valid) { + fValid= valid; + notifyAll(); + } +} @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Brock Janiczak (brockj@tpg.com.au) - bug 154907 + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import org.eclipse.debug.core.model.IValue; +import org.eclipse.debug.core.model.IVariable; + +public class AntPropertiesValue extends AntDebugElement implements IValue { + + private List fProperties= new ArrayList(); + + public AntPropertiesValue(AntDebugTarget target) { + super(target); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#getReferenceTypeName() + */ + public String getReferenceTypeName() { + return ""; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#getValueString() + */ + public String getValueString() { + return ""; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#isAllocated() + */ + public boolean isAllocated() { + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#getVariables() + */ + public IVariable[] getVariables() { + Collections.sort(fProperties); + return (IVariable[])fProperties.toArray(new IVariable[fProperties.size()]); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#hasVariables() + */ + public boolean hasVariables() { + return true; + } + + protected void addProperties(List properties) { + fProperties.addAll(properties); + } + + public List getProperties() { + return fProperties; + } +} @@ -0,0 +1,121 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + * Brock Janiczak (brockj@tpg.com.au) - bug 154907 + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + +import org.eclipse.debug.core.model.IValue; +import org.eclipse.debug.core.model.IVariable; + +/** + * A property in an Ant build. + */ +public class AntProperty extends AntDebugElement implements IVariable, Comparable { + + private String fName; + private AntValue fValue; + private String fLabel; + + /** + * Constructs a variable associated with the debug target + * with the given name and value. + * + * @param target the debug target + * @param name property name + * @param value property value + */ + public AntProperty(AntDebugTarget target, String name, String value) { + super(target); + fName = name; + fValue= new AntValue(target, value); + } + + /* + * @see org.eclipse.debug.core.model.IVariable#getValue() + */ + public IValue getValue() { + return fValue; + } + + /* + * @see org.eclipse.debug.core.model.IVariable#getName() + */ + public String getName() { + return fName; + } + + /* + * @see org.eclipse.debug.core.model.IVariable#getReferenceTypeName() + */ + public String getReferenceTypeName() { + return ""; //$NON-NLS-1$ + } + + /* + * @see org.eclipse.debug.core.model.IVariable#hasValueChanged() + */ + public boolean hasValueChanged() { + return false; + } + + /* + * @see org.eclipse.debug.core.model.IValueModification#setValue(java.lang.String) + */ + public void setValue(String expression) { + } + + /* + * @see org.eclipse.debug.core.model.IValueModification#setValue(org.eclipse.debug.core.model.IValue) + */ + public void setValue(IValue value) { + } + + /* + * @see org.eclipse.debug.core.model.IValueModification#supportsValueModification() + */ + public boolean supportsValueModification() { + return false; + } + + /* + * @see org.eclipse.debug.core.model.IValueModification#verifyValue(java.lang.String) + */ + public boolean verifyValue(String expression) { + return false; + } + + /* + * @see org.eclipse.debug.core.model.IValueModification#verifyValue(org.eclipse.debug.core.model.IValue) + */ + public boolean verifyValue(IValue value) { + return false; + } + + /** + * @return the text used to render this property + */ + public String getText() { + if (fLabel == null) { + StringBuffer buffer= new StringBuffer(getName()); + buffer.append("= "); //$NON-NLS-1$ + buffer.append(fValue.getValueString()); + fLabel= buffer.toString(); + } + return fLabel; + } + + /* + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + public int compareTo(Object other) { + AntProperty otherProperty = (AntProperty) other; + return fName.compareToIgnoreCase(otherProperty.getName()); + } +} @@ -0,0 +1,314 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + +import org.eclipse.ant.internal.launching.AntLaunchingUtil; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.Path; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.IRegisterGroup; +import org.eclipse.debug.core.model.IStackFrame; +import org.eclipse.debug.core.model.IThread; +import org.eclipse.debug.core.model.IVariable; + +/** + * Ant stack frame. + */ +public class AntStackFrame extends AntDebugElement implements IStackFrame { + + private AntThread fThread; + private String fName; + private int fLineNumber; + private String fFilePath; + private int fId; + private String fFullPath; + + /** + * Constructs a stack frame in the given thread with the given id. + * + * @param antThread + * @param id stack frame id (0 is the top of the stack) + */ + public AntStackFrame(AntThread antThread, int id, String name, String fullPath, int lineNumber) { + super((AntDebugTarget) antThread.getDebugTarget()); + fId = id; + fThread = antThread; + fLineNumber= lineNumber; + fName= name; + setFilePath(fullPath); + } + + public void setId(int id) { + fId= id; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#getThread() + */ + public IThread getThread() { + return fThread; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#getVariables() + */ + public IVariable[] getVariables() throws DebugException { + return fThread.getVariables(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#hasVariables() + */ + public boolean hasVariables() { + return isSuspended(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#getLineNumber() + */ + public int getLineNumber() { + return fLineNumber; + } + + public void setLineNumber(int lineNumber) { + fLineNumber= lineNumber; + } + + public void setFilePath(String fullPath) { + fFullPath= fullPath; + IFile file= AntLaunchingUtil.getFileForLocation(fullPath, null); + if (file != null) { + fFilePath= file.getProjectRelativePath().toString(); + } else { + fFilePath= new Path(fullPath).lastSegment(); + } + } + + public String getFilePath() { + return fFullPath; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#getCharStart() + */ + public int getCharStart() { + return -1; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#getCharEnd() + */ + public int getCharEnd() { + return -1; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#getName() + */ + public String getName() { + return fName; + } + + public void setName(String name) { + fName= name; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#getRegisterGroups() + */ + public IRegisterGroup[] getRegisterGroups() { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStackFrame#hasRegisterGroups() + */ + public boolean hasRegisterGroups() { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStep#canStepInto() + */ + public boolean canStepInto() { + return getThread().canStepInto(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStep#canStepOver() + */ + public boolean canStepOver() { + return getThread().canStepOver(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStep#canStepReturn() + */ + public boolean canStepReturn() { + return getThread().canStepReturn(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStep#isStepping() + */ + public boolean isStepping() { + return getThread().isStepping(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStep#stepInto() + */ + public void stepInto() throws DebugException { + getThread().stepInto(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStep#stepOver() + */ + public void stepOver() throws DebugException { + getThread().stepOver(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IStep#stepReturn() + */ + public void stepReturn() throws DebugException { + getThread().stepReturn(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ISuspendResume#canResume() + */ + public boolean canResume() { + return getThread().canResume(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend() + */ + public boolean canSuspend() { + return getThread().canSuspend(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ISuspendResume#isSuspended() + */ + public boolean isSuspended() { + return getThread().isSuspended(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ISuspendResume#resume() + */ + public void resume() throws DebugException { + getThread().resume(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ISuspendResume#suspend() + */ + public void suspend() throws DebugException { + getThread().suspend(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ITerminate#canTerminate() + */ + public boolean canTerminate() { + return getThread().canTerminate(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ITerminate#isTerminated() + */ + public boolean isTerminated() { + return getThread().isTerminated(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ITerminate#terminate() + */ + public void terminate() throws DebugException { + getThread().terminate(); + } + + /** + * Returns the name of the buildfile this stack frame is associated + * with. + * + * @return the name of the buildfile this stack frame is associated + * with + */ + public String getSourceName() { + return fFilePath; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals(Object obj) { + if (obj instanceof AntStackFrame) { + AntStackFrame sf = (AntStackFrame)obj; + if (getSourceName() != null) { + return getSourceName().equals(sf.getSourceName()) && + sf.getLineNumber() == getLineNumber() && + sf.fId == fId; + } + return sf.fId == fId; + } + return false; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + if (getSourceName() == null) { + return fId; + } + return getSourceName().hashCode() + fId; + } + + /** + * Returns this stack frame's unique identifier within its thread + * + * @return this stack frame's unique identifier within its thread + */ + protected int getIdentifier() { + return fId; + } + + /** + * Returns the system, user or runtime property + * name, or <code>null</code> if unable to resolve a property with the name. + * + * @param propertyName the name of the variable to search for + * @return a property, or <code>null</code> if none + */ + public AntProperty findProperty(String propertyName) { + try { + IVariable[] groups= getVariables(); + for (int i = 0; i < groups.length; i++) { + AntProperties propertiesGrouping = (AntProperties) groups[i]; + AntPropertiesValue value= (AntPropertiesValue) propertiesGrouping.getValue(); + IVariable[] properties= value.getVariables(); + for (int j = 0; j < properties.length; j++) { + AntProperty property = (AntProperty) properties[j]; + if (property.getName().equals(propertyName)) { + return property; + } + } + } + } catch (DebugException e) { + } + return null; + } +} @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + +import org.eclipse.ant.internal.launching.debug.IAntDebugConstants; +import org.eclipse.debug.core.model.IValue; +import org.eclipse.debug.core.model.IVariable; + +public class AntValue extends AntDebugElement implements IValue { + + private String fValueString; + protected static final IVariable[] EMPTY = new IVariable[0]; + + /** + * @param target + */ + public AntValue(AntDebugTarget target, String value) { + super(target); + fValueString= value; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#getReferenceTypeName() + */ + public String getReferenceTypeName() { + return ""; //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#getValueString() + */ + public String getValueString() { + return fValueString; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#isAllocated() + */ + public boolean isAllocated() { + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#getVariables() + */ + public IVariable[] getVariables() { + return EMPTY; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IValue#hasVariables() + */ + public boolean hasVariables() { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier() + */ + public String getModelIdentifier() { + return IAntDebugConstants.ID_ANT_DEBUG_MODEL; + } +} @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + + +public class DebugMessageIds { + + public final static String MESSAGE_DELIMITER= ","; //$NON-NLS-1$ + + public final static String BUILD_STARTED= "build_started"; //$NON-NLS-1$ + public final static String TARGET_STARTED= "target_started"; //$NON-NLS-1$ + public final static String TARGET_FINISHED= "target_finished"; //$NON-NLS-1$ + public final static String TASK_STARTED= "task_started"; //$NON-NLS-1$ + public final static String TASK_FINISHED= "task_finished"; //$NON-NLS-1$ + + public final static String STEP= "step"; //$NON-NLS-1$ + public final static String STEP_OVER= "step_over"; //$NON-NLS-1$ + public final static String STEP_INTO= "step_into"; //$NON-NLS-1$ + + public final static String TERMINATE= "terminate"; //$NON-NLS-1$ + public final static String TERMINATED= "terminated"; //$NON-NLS-1$ + public final static String SUSPEND= "suspend"; //$NON-NLS-1$ + public final static String SUSPENDED= "suspended"; //$NON-NLS-1$ + public final static String RESUME= "resume"; //$NON-NLS-1$ + + public final static String STACK= "stack"; //$NON-NLS-1$ + + public final static String ADD_BREAKPOINT= "add"; //$NON-NLS-1$ + public final static String REMOVE_BREAKPOINT= "remove"; //$NON-NLS-1$ + + public final static String CLIENT_REQUEST= "client"; //$NON-NLS-1$ + public final static String BREAKPOINT= "breakpoint"; //$NON-NLS-1$ + + public final static String PROPERTIES= "prop"; //$NON-NLS-1$ + public final static String PROPERTY_VALUE= "value"; //$NON-NLS-1$ + public final static int PROPERTY_USER= 0; + public final static int PROPERTY_SYSTEM= 1; + public final static int PROPERTY_RUNTIME= 2; +} @@ -0,0 +1,32 @@ +/********************************************************************** + * Copyright (c) 2004, 2009 IBM Corporation and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + **********************************************************************/ +package org.eclipse.ant.internal.launching.debug.model; + +import org.eclipse.osgi.util.NLS; + +public class DebugModelMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.ant.internal.launching.debug.model.DebugModelMessages";//$NON-NLS-1$ + + public static String AntDebugTarget_0; + + public static String AntLineBreakpoint_0; + public static String AntThread_0; + public static String AntThread_1; + public static String AntThread_2; + public static String AntThread_3; + public static String AntThread_4; + + public static String AntProperties_1; + + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, DebugModelMessages.class); + } +}
\ No newline at end of file @@ -0,0 +1,21 @@ +############################################################################### +# Copyright (c) 2004, 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +AntDebugTarget_0=Ant Build + +AntLineBreakpoint_0=Ant breakpoint [line: {0}] +AntThread_0=User Properties +AntThread_1=System Properties +AntThread_2=Runtime Properties +AntThread_3=Request to retrieve Ant stack frames failed +AntThread_4=Request to retrieve Ant properties failed + +AntProperties_1=Request to Ant properties value failed @@ -0,0 +1,50 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.launching.launchConfigurations; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; +import org.eclipse.jdt.launching.IRuntimeClasspathEntry; +import org.eclipse.jdt.launching.JavaRuntime; +import org.eclipse.jdt.launching.StandardClasspathProvider; + +public class AntClasspathProvider extends StandardClasspathProvider { + + /* (non-Javadoc) + * @see org.eclipse.jdt.launching.IRuntimeClasspathProvider#computeUnresolvedClasspath(org.eclipse.debug.core.ILaunchConfiguration) + */ + public IRuntimeClasspathEntry[] computeUnresolvedClasspath(ILaunchConfiguration configuration) throws CoreException { + boolean useDefault = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH, true); + if (useDefault) { + List rtes = new ArrayList(10); + IRuntimeClasspathEntry jreEntry = null; + try { + jreEntry = JavaRuntime.computeJREEntry(configuration); + } catch (CoreException e) { + // not a java project + } + if (jreEntry == null) { + jreEntry = JavaRuntime.newRuntimeContainerClasspathEntry( + JavaRuntime.newDefaultJREContainerPath(), IRuntimeClasspathEntry.STANDARD_CLASSES); + } + rtes.add(jreEntry); + rtes.add(new AntHomeClasspathEntry()); + rtes.add(new ContributedClasspathEntriesEntry()); + return (IRuntimeClasspathEntry[]) rtes.toArray(new IRuntimeClasspathEntry[rtes.size()]); + } + return super.computeUnresolvedClasspath(configuration); + } +} @@ -0,0 +1,210 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.launchConfigurations; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.ant.core.AntCorePlugin; +import org.eclipse.ant.core.AntCorePreferences; +import org.eclipse.ant.core.IAntClasspathEntry; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.jdt.internal.launching.AbstractRuntimeClasspathEntry; +import org.eclipse.jdt.launching.IRuntimeClasspathEntry; +import org.eclipse.jdt.launching.JavaRuntime; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import com.ibm.icu.text.MessageFormat; + +/** + * A classpath entry that contains a set of archives for a particular + * ANT_HOME. + * + * @since 3.0 + */ +public class AntHomeClasspathEntry extends AbstractRuntimeClasspathEntry { + + public static final String TYPE_ID = "org.eclipse.ant.ui.classpathentry.antHome"; //$NON-NLS-1$ + + /** + * Local path on disk where Ant Home is located or <code>null</code> + * to indicate the use of the default Ant Home. + */ + private String antHomeLocation = null; + + /** + * Creates an AntHome entry for the default AntHome installation. + */ + public AntHomeClasspathEntry() { + antHomeLocation = null; + } + + /** + * Constructs an AntHome entry for the Ant installed at the specified + * root directory. + * + * @param antHome path in the local file system to an Ant installation + */ + public AntHomeClasspathEntry(String antHome) { + antHomeLocation = antHome; + } + + /* (non-Javadoc) + * @see org.eclipse.jdt.internal.launching.AbstractRuntimeClasspathEntry#buildMemento(org.w3c.dom.Document, org.w3c.dom.Element) + */ + protected void buildMemento(Document document, Element memento) throws CoreException { + if (antHomeLocation == null) { + memento.setAttribute("default", "true"); //$NON-NLS-1$//$NON-NLS-2$ + } else { + memento.setAttribute("antHome", new Path(antHomeLocation).toString()); //$NON-NLS-1$ + } + } + /* (non-Javadoc) + * @see org.eclipse.jdt.internal.launching.IRuntimeClasspathEntry2#initializeFrom(org.w3c.dom.Element) + */ + public void initializeFrom(Element memento) throws CoreException { + String antHome = memento.getAttribute("antHome"); //$NON-NLS-1$ + if (antHome != null && (antHome.length() > 0)) { + IPath path = new Path(antHome); + antHomeLocation = path.toOSString(); + } else { + antHomeLocation = null; + } + } + /* (non-Javadoc) + * @see org.eclipse.jdt.launching.IRuntimeClasspathEntry2#getTypeId() + */ + public String getTypeId() { + return TYPE_ID; + } + /* (non-Javadoc) + * @see org.eclipse.jdt.launching.IRuntimeClasspathEntry2#getRuntimeClasspathEntries(org.eclipse.debug.core.ILaunchConfiguration) + */ + public IRuntimeClasspathEntry[] getRuntimeClasspathEntries(ILaunchConfiguration configuration) throws CoreException { + List libs = new ArrayList(40); + AntCorePreferences preferences = AntCorePlugin.getPlugin().getPreferences(); + if (antHomeLocation == null) { + IAntClasspathEntry[] entries = preferences.getAntHomeClasspathEntries(); + for (int i = 0; i < entries.length; i++) { + IAntClasspathEntry entry = entries[i]; + libs.add(JavaRuntime.newStringVariableClasspathEntry(entry.getLabel())); + } + } else { + File lib= resolveAntHome(); + IPath libDir = new Path(antHomeLocation).append("lib"); //$NON-NLS-1$ + String[] fileNames = lib.list(); + for (int i = 0; i < fileNames.length; i++) { + String name = fileNames[i]; + IPath path = new Path(name); + String fileExtension = path.getFileExtension(); + if ("jar".equalsIgnoreCase(fileExtension)) { //$NON-NLS-1$ + libs.add(JavaRuntime.newArchiveRuntimeClasspathEntry(libDir.append(path))); + } + } + } + return (IRuntimeClasspathEntry[]) libs.toArray(new IRuntimeClasspathEntry[libs.size()]); + } + + public File resolveAntHome() throws CoreException { + if (antHomeLocation == null) { //using the default ant home + return null; + } + IPath libDir= new Path(antHomeLocation).append("lib"); //$NON-NLS-1$ + File lib= libDir.toFile(); + File parentDir= lib.getParentFile(); + if (parentDir == null || !parentDir.exists()) { + abort(MessageFormat.format(AntLaunchConfigurationMessages.AntHomeClasspathEntry_10, new String[] {antHomeLocation}), null); + } + if (!lib.exists() || !lib.isDirectory()) { + abort(MessageFormat.format(AntLaunchConfigurationMessages.AntHomeClasspathEntry_11, new String[] {antHomeLocation}), null); + } + return lib; + } + + /* (non-Javadoc) + * @see org.eclipse.jdt.launching.IRuntimeClasspathEntry2#getName() + */ + public String getName() { + if (antHomeLocation == null) { + return AntLaunchConfigurationMessages.AntHomeClasspathEntry_8; + } + return MessageFormat.format(AntLaunchConfigurationMessages.AntHomeClasspathEntry_9, new String[]{antHomeLocation}); + } + + /* (non-Javadoc) + * @see org.eclipse.jdt.launching.IRuntimeClasspathEntry#getType() + */ + public int getType() { + return IRuntimeClasspathEntry.OTHER; + } + + /* (non-Javadoc) + * @see org.eclipse.jdt.launching.IRuntimeClasspathEntry2#isComposite() + */ + public boolean isComposite() { + return true; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals(Object obj) { + return obj instanceof AntHomeClasspathEntry && + equalsOrNull(antHomeLocation, ((AntHomeClasspathEntry)obj).antHomeLocation); + } + + /** + * Return whether s1 is equivalent to s2. + * + * @param s1 + * @param s2 + * @return whether s1 is equivalent to s2 + */ + private boolean equalsOrNull(String s1, String s2) { + if (s1 == null || s2 == null) { + return s1 == s2; + } + return s1.equalsIgnoreCase(s2); + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + public int hashCode() { + return getClass().hashCode(); + } + + /** + * Sets the ant home to use. + * + * @param path path to toor of an ant home installation + */ + public void setAntHome(String path) { + antHomeLocation = path; + } + + /** + * Returns the ant home location + * + * @return path to root ant installation directory + */ + public String getAntHome() { + if (antHomeLocation == null) { + return AntCorePlugin.getPlugin().getPreferences().getAntHome(); + } + return antHomeLocation; + } +} @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.launchConfigurations; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; +import org.eclipse.jdt.launching.JavaLaunchDelegate; + +/** + * Used by the AntLaunchDelegate for Ant builds in a separate VM + * The subclassing is needed to be able to launch an Ant build from a non-Java project + */ +public class AntJavaLaunchDelegate extends JavaLaunchDelegate { + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate2#preLaunchCheck(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) + */ + public boolean preLaunchCheck(ILaunchConfiguration configuration,String mode, IProgressMonitor monitor) throws CoreException { + try { + return super.preLaunchCheck(configuration, mode, monitor); + } catch (CoreException ce) { + //likely dealing with a non-Java project + } + //no need to check for breakpoints as always in run mode + return true; + } + + /* (non-Javadoc) + * @see org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate#getProgramArguments(org.eclipse.debug.core.ILaunchConfiguration) + */ + public String getProgramArguments(ILaunchConfiguration configuration) throws CoreException { + try { + return super.getProgramArguments(configuration); + } catch (CoreException ce) { + } + return configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS, ""); //$NON-NLS-1$ + } +} @@ -0,0 +1,37 @@ +/********************************************************************** + * Copyright (c) 2000, 2009 IBM Corporation and others. All rights reserved. This + * program and the accompanying materials are made available under the terms of + * the Eclipse Public License v1.0 which accompanies this distribution, and is + * available at http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM - Initial API and implementation + * dakshinamurthy.karra@gmail.com - bug 165371 + **********************************************************************/ +package org.eclipse.ant.internal.launching.launchConfigurations; + +import org.eclipse.osgi.util.NLS; + +public class AntLaunchConfigurationMessages extends NLS { + private static final String BUNDLE_NAME = "org.eclipse.ant.internal.launching.launchConfigurations.AntLaunchConfigurationMessages";//$NON-NLS-1$ + + public static String AntLaunchDelegate_Launching__0__1; + public static String AntLaunchDelegate_Running__0__2; + public static String AntLaunchDelegate_Build_In_Progress; + public static String AntLaunchDelegate_Failure; + public static String AntLaunchDelegate_22; + public static String AntLaunchDelegate_23; + public static String AntLaunchDelegate_28; + + public static String AntHomeClasspathEntry_8; + public static String AntHomeClasspathEntry_9; + public static String AntHomeClasspathEntry_10; + public static String AntHomeClasspathEntry_11; + + public static String ContributedClasspathEntriesEntry_1; + + static { + // load message values from bundle file + NLS.initializeMessages(BUNDLE_NAME, AntLaunchConfigurationMessages.class); + } +}
\ No newline at end of file @@ -0,0 +1,26 @@ +############################################################################### +# Copyright (c) 2000, 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +# dakshinamurthy.karra@gmail.com - bug 165371 +############################################################################### + +AntLaunchDelegate_Launching__0__1=Launching {0} +AntLaunchDelegate_Running__0__2=Running {0} +AntLaunchDelegate_Build_In_Progress=Ant build {0} already in progress. Concurrent Ant builds are possible if you specify to build in a separate JRE. +AntLaunchDelegate_Failure=Failure of Background Ant Build +AntLaunchDelegate_22=&Do not show error dialog when Ant build fails +AntLaunchDelegate_23=Ant Build Failed +AntLaunchDelegate_28=Waiting for virtual machine to exit... + +AntHomeClasspathEntry_8=Ant Home (Default) +AntHomeClasspathEntry_9=Ant Home ({0}) +AntHomeClasspathEntry_10=Ant Home {0} does not exist +AntHomeClasspathEntry_11=Ant Home {0} does not contain a "lib" directory + +ContributedClasspathEntriesEntry_1=Additional Tasks & Support
\ No newline at end of file @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2006, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.launchConfigurations; + +import org.eclipse.ant.internal.launching.AntLaunchingUtil; +import org.eclipse.core.externaltools.internal.IExternalToolConstants; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.variables.IStringVariableManager; +import org.eclipse.core.variables.VariablesPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationMigrationDelegate; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; + +/** + * Delegate for migrating Ant launch configurations. + * The migration process involves a resource mapping being created such that launch configurations + * can be filtered from the launch configuration dialog based on resource availability. + * + * @since 3.2 + */ +public class AntMigrationDelegate implements ILaunchConfigurationMigrationDelegate { + + /** + * Method to get the file for the specified launch configuration that should be mapped to the launch configuration + * + * @param candidate the launch configuration that the file will be mapped to. + * @return the buildfile or <code>null</code> if not in the workspace + */ + protected IFile getFileForCandidate(ILaunchConfiguration candidate) { + IFile file= null; + String expandedLocation= null; + String location= null; + IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager(); + try { + location= candidate.getAttribute(IExternalToolConstants.ATTR_LOCATION, (String)null); + if (location != null) { + expandedLocation= manager.performStringSubstitution(location); + if (expandedLocation != null) { + file= AntLaunchingUtil.getFileForLocation(expandedLocation, null); + } + } + } catch (CoreException e) { + } + return file; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchConfigurationMigrationDelegate#isCandidate() + */ + public boolean isCandidate(ILaunchConfiguration candidate) throws CoreException { + IResource[] mappedResources = candidate.getMappedResources(); + if (mappedResources != null && mappedResources.length > 0) { + return false; + } + return getFileForCandidate(candidate) != null; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchConfigurationMigrationDelegate#migrate(org.eclipse.debug.core.ILaunchConfiguration) + */ + public void migrate(ILaunchConfiguration candidate) throws CoreException { + IFile file = getFileForCandidate(candidate); + ILaunchConfigurationWorkingCopy wc = candidate.getWorkingCopy(); + wc.setMappedResources(new IResource[] {file}); + wc.doSave(); + } +}
\ No newline at end of file @@ -0,0 +1,83 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.launchConfigurations; + +import org.eclipse.core.runtime.ListenerList; +import org.eclipse.debug.core.IStreamListener; +import org.eclipse.debug.core.model.IFlushableStreamMonitor; + +/** + * Stream monitor implementation for an Ant build process. + */ +public class AntStreamMonitor implements IFlushableStreamMonitor { + + private StringBuffer fContents = new StringBuffer(); + private ListenerList fListeners = new ListenerList(1); + private boolean fBuffered = true; + + /** + * @see org.eclipse.debug.core.model.IStreamMonitor#addListener(org.eclipse.debug.core.IStreamListener) + */ + public void addListener(IStreamListener listener) { + fListeners.add(listener); + } + + /** + * @see org.eclipse.debug.core.model.IStreamMonitor#getContents() + */ + public String getContents() { + return fContents.toString(); + } + + /** + * @see org.eclipse.debug.core.model.IStreamMonitor#removeListener(org.eclipse.debug.core.IStreamListener) + */ + public void removeListener(IStreamListener listener) { + fListeners.remove(listener); + } + + /** + * Appends the given message to this stream, and notifies listeners. + * + * @param message + */ + public void append(String message) { + if (isBuffered()) { + fContents.append(message); + } + Object[] listeners = fListeners.getListeners(); + for (int i = 0; i < listeners.length; i++) { + IStreamListener listener = (IStreamListener)listeners[i]; + listener.streamAppended(message, this); + } + } + /** + * @see org.eclipse.debug.core.model.IFlushableStreamMonitor#flushContents() + */ + public void flushContents() { + fContents.setLength(0); + } + + /** + * @see org.eclipse.debug.core.model.IFlushableStreamMonitor#isBuffered() + */ + public boolean isBuffered() { + return fBuffered; + } + + /** + * @see org.eclipse.debug.core.model.IFlushableStreamMonitor#setBuffered(boolean) + */ + public void setBuffered(boolean buffer) { + fBuffered = buffer; + } +} + @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.internal.launching.launchConfigurations; + + +import org.eclipse.ant.internal.launching.AntLaunching; +import org.eclipse.debug.core.model.IStreamMonitor; +import org.eclipse.debug.core.model.IStreamsProxy; + +/** + * + */ +public class AntStreamsProxy implements IStreamsProxy { + + private AntStreamMonitor fErrorMonitor = new AntStreamMonitor(); + private AntStreamMonitor fOutputMonitor = new AntStreamMonitor(); + + public static final String ANT_DEBUG_STREAM = AntLaunching.PLUGIN_ID + ".ANT_DEBUG_STREAM"; //$NON-NLS-1$ + public static final String ANT_VERBOSE_STREAM = AntLaunching.PLUGIN_ID + ".ANT_VERBOSE_STREAM"; //$NON-NLS-1$ + public static final String ANT_WARNING_STREAM = AntLaunching.PLUGIN_ID + ".ANT_WARNING_STREAM"; //$NON-NLS-1$ + + private AntStreamMonitor fDebugMonitor = new AntStreamMonitor(); + private AntStreamMonitor fVerboseMonitor = new AntStreamMonitor(); + private AntStreamMonitor fWarningMonitor = new AntStreamMonitor(); + + /** + * @see org.eclipse.debug.core.model.IStreamsProxy#getErrorStreamMonitor() + */ + public IStreamMonitor getErrorStreamMonitor() { + return fErrorMonitor; + } + + /** + * @see org.eclipse.debug.core.model.IStreamsProxy#getOutputStreamMonitor() + */ + public IStreamMonitor getOutputStreamMonitor() { + return fOutputMonitor; + } + + /** + * @see org.eclipse.debug.core.model.IStreamsProxy#write(java.lang.String) + */ + public void write(String input) { + } + + public IStreamMonitor getWarningStreamMonitor() { + return fWarningMonitor; + } + + public IStreamMonitor getDebugStreamMonitor() { + return fDebugMonitor; + } + + public IStreamMonitor getVerboseStreamMonitor() { + return fVerboseMonitor; + } +} @@ -0,0 +1,21 @@ +/******************************************************************************* + * Copyright (c) 2003, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.launching.launchConfigurations; + +public class MessageIds { + + public final static String PROCESS_ID= "processID"; //$NON-NLS-1$ + public final static String BUILD_CANCELLED= "cancelled"; //$NON-NLS-1$ + //constants need to start greater than the Project.MSG_* constants + public final static String TASK= "6"; //$NON-NLS-1$ + public final static String TARGET= "7"; //$NON-NLS-1$ +} @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.launching.launchConfigurations; + +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.ant.launching.IAntLaunchConstants; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.IProcessFactory; +import org.eclipse.debug.core.model.IProcess; + +public class RemoteAntProcessFactory implements IProcessFactory { + + /* (non-Javadoc) + * @see org.eclipse.debug.core.IProcessFactory#newProcess(org.eclipse.debug.core.ILaunch, java.lang.Process, java.lang.String, java.util.Map) + */ + public IProcess newProcess(ILaunch launch, Process process, String label, Map attributes) { + if (attributes == null) { + attributes= new HashMap(1); + } + attributes.put(IProcess.ATTR_PROCESS_TYPE, IAntLaunchConstants.ID_ANT_PROCESS_TYPE); + return new RemoteAntRuntimeProcess(launch, process, label, attributes); + } +} @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.internal.launching.launchConfigurations; + +import java.util.Map; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.model.IStreamsProxy; +import org.eclipse.debug.core.model.RuntimeProcess; + +public class RemoteAntRuntimeProcess extends RuntimeProcess { + + /** + * Constructs a RuntimeProcess on the given system process + * with the given name, adding this process to the given + * launch. + * Sets the streams proxy to an AntStreamsProxy if output is captured. + */ + public RemoteAntRuntimeProcess(ILaunch launch, Process process, String name, Map attributes) { + super(launch, process, name, attributes); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.RuntimeProcess#createStreamsProxy() + */ + protected IStreamsProxy createStreamsProxy() { + return new AntStreamsProxy(); + } +} @@ -0,0 +1,126 @@ +/******************************************************************************* + * Copyright (c) 2008, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.launching; + +import org.eclipse.core.externaltools.internal.IExternalToolConstants; + +/** + * Constant definitions for Ant launch configurations. + * + * @since 1.0 + * @noimplement This interface is not intended to be implemented by clients. + */ +public interface IAntLaunchConstants { + + /** + * Ant launch configuration type identifier. + */ + public static final String ID_ANT_LAUNCH_CONFIGURATION_TYPE = "org.eclipse.ant.AntLaunchConfigurationType"; //$NON-NLS-1$ + + public static final String MAIN_TYPE_NAME= "org.eclipse.ant.internal.launching.remote.InternalAntRunner"; //$NON-NLS-1$ + + /** + * Ant builder launch configuration type identifier. Ant project builders + * are of this type. + */ + public static final String ID_ANT_BUILDER_LAUNCH_CONFIGURATION_TYPE = "org.eclipse.ant.AntBuilderLaunchConfigurationType"; //$NON-NLS-1$ + + /** + * String attribute indicating the Ant targets to execute. Default value is + * <code>null</code> which indicates that the default target is to be + * executed. Format is a comma separated listing of targets. + */ + public static final String ATTR_ANT_TARGETS = IExternalToolConstants.UI_PLUGIN_ID + ".ATTR_ANT_TARGETS"; //$NON-NLS-1$ + + /** + * String attribute indicating the Ant targets to execute after a clean + * (full build) for an Ant builder. Default value is <code>null</code> which + * indicates that the default target is to be executed. Format is a comma + * separated listing of targets. + */ + public static final String ATTR_ANT_AFTER_CLEAN_TARGETS = "org.eclipse.ant.ui.ATTR_ANT_AFTER_CLEAN_TARGETS"; //$NON-NLS-1$ + + /** + * String attribute indicating the Ant targets to execute during a manual + * build for an Ant builder. Default value is <code>null</code> which + * indicates that the default target is to be executed. Format is a comma + * separated listing of targets. + */ + public static final String ATTR_ANT_MANUAL_TARGETS = "org.eclipse.ant.ui.ATTR_ANT_MANUAL_TARGETS"; //$NON-NLS-1$ + + /** + * String attribute indicating the Ant targets to execute during an auto + * build for an Ant builder. Default value is <code>null</code> which + * indicates that the default target is to be executed. Format is a comma + * separated listing of targets. + */ + public static final String ATTR_ANT_AUTO_TARGETS = "org.eclipse.ant.ui.ATTR_ANT_AUTO_TARGETS"; //$NON-NLS-1$ + + /** + * String attribute indicating the Ant targets to execute during a clean for + * an Ant builder. Default value is <code>null</code> which indicates that + * the default target is to be executed. Format is a comma separated listing + * of targets. + */ + public static final String ATTR_ANT_CLEAN_TARGETS = "org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS"; //$NON-NLS-1$ + + /** + * Boolean attribute indicating whether or not target specification for an + * Ant builder has been updated for 3.1 + */ + public static final String ATTR_TARGETS_UPDATED = "org.eclipse.ant.ui.ATTR_TARGETS_UPDATED"; //$NON-NLS-1$ + + /** + * Map attribute indicating the Ant properties to be defined during the + * build. Default value is <code>null</code> which indicates no additional + * properties will be defined. + */ + public static final String ATTR_ANT_PROPERTIES = IExternalToolConstants.UI_PLUGIN_ID + ".ATTR_ANT_PROPERTIES"; //$NON-NLS-1$ + + /** + * String attribute indicating the Ant targets to execute. Default value is + * <code>null</code> which indicates that no additional property files will + * be defined. Format is a comma separated listing of property files. + */ + public static final String ATTR_ANT_PROPERTY_FILES = IExternalToolConstants.UI_PLUGIN_ID + ".ATTR_ANT_PROPERTY_FILES"; //$NON-NLS-1$ + + /** + * Boolean attribute indicating whether or not internal targets (targets + * with no description) should be hidden from the user in the launch + * configuration dialog. Default value is <code>false</code> which indicates + * that all targets will be displayed. + */ + public static final String ATTR_HIDE_INTERNAL_TARGETS = IExternalToolConstants.UI_PLUGIN_ID + ".ATTR_HIDE_INTERNAL_TARGETS"; //$NON-NLS-1$ + + /** + * Integer attribute indicating which column targets should be sorted on. A + * value of 0 indicates target name, 1 indicates target description, and -1 + * indicates no sort. Default value is -1. + */ + public static final String ATTR_SORT_TARGETS = IExternalToolConstants.UI_PLUGIN_ID + "ATTR_SORT_TARGETS"; //$NON-NLS-1$ + + /** + * Boolean attribute indicating if the default VM install should be used for + * the separate JRE build Default value is <code>false</code> for backwards + * compatibility + */ + public static final String ATTR_DEFAULT_VM_INSTALL = "org.eclipse.ant.ui.DEFAULT_VM_INSTALL"; //$NON-NLS-1$ + + /** + * Identifier for Ant processes (value + * <code>org.eclipse.ant.ui.antProcess</code>). This identifier is set as + * the value for the <code>IProcess.ATTR_PROCESS_TYPE</code> attribute in + * processes created by the Ant launch delegate. + */ + public static final String ID_ANT_PROCESS_TYPE = "org.eclipse.ant.ui.antProcess"; //$NON-NLS-1$ + +} @@ -0,0 +1,13 @@ +<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> +<html> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> + <title>Package-level Javadoc</title> +</head> +<body> +Provides support for Ant launching. +<h2> +Package Specification</h2> +This package defines constants for Ant launch configuration attributes. +</body> +</html> @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="test plugin"/> + <classpathentry kind="src" path="tests"/> + <classpathentry kind="src" output="test_support_bin" path="test support"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/> + <classpathentry kind="output" path="bin"/> +</classpath> @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean"/> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" name="workingSet" editPageId="org.eclipse.ui.resourceWorkingSetPage"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.tests.core/test support/org" type="2"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.tests.core/buildfiles/buildAntTestsSupportJAR.xml" type="1"/> </launchConfigurationWorkingSet> }"/> +<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS" value="clean,"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" name="workingSet" editPageId="org.eclipse.ui.resourceWorkingSetPage"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.tests.core" type="4"/> </launchConfigurationWorkingSet> }"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.ant.tests.core/buildfiles/buildAntTestsSupportJAR.xml}"/> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_RUN_IN_BACKGROUND" value="false"/> +</launchConfiguration> diff --git a/ant/org.eclipse.ant.tests.core/.project b/ant/org.eclipse.ant.tests.core/.project new file mode 100644 index 000000000..8d670cd7c --- /dev/null +++ b/ ant/org.eclipse.ant.tests.core/.project@@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.ant.tests.core</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/Ant Test Support Lib Builder.launch</value> + </dictionary> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.pde.PluginNature</nature> + </natures> +</projectDescription> @@ -0,0 +1,3 @@ +#Thu May 27 14:48:43 PDT 2004
+eclipse.preferences.version=1
+selfhosting.binExcludes=/org.eclipse.ant.tests.core/test_support_bin
@@ -0,0 +1,29 @@ +#Mon Dec 14 11:40:48 CST 2009
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.missing.output=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.illegal-att-value=0
+compilers.p.internal=1
+compilers.p.missing-packages=2
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=2
+compilers.p.missing-version-require-bundle=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=1
+compilers.p.unknown-element=0
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.p.unused-element-or-attribute=1
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+compilers.use-project=true
+eclipse.preferences.version=1
@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> +<title>About</title> +</head> +<body lang="EN-US"> +<h2>About This Content</h2> + +<p>June 2, 2006</p> +<h3>License</h3> + +<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>. +For purposes of the EPL, "Program" will mean the Content.</p> + +<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p> + +</body> +</html>
\ No newline at end of file @@ -0,0 +1,28 @@ +############################################################################### +# Copyright (c) 2000, 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +bin.includes = plugin.xml,\ + plugin.properties,\ + test.xml,\ + about.html,\ + testbuildfiles/,\ + testresources/,\ + testlib/,\ + lib/,\ + lib/*.jar,\ + *.jar,\ + META-INF/ + +source.anttestscore.jar = test plugin/,\ + tests/ +source.lib/antTestsSupport.jar = test support/ +jars.compile.order=anttestscore.jar,lib/antTestsSupport.jar +output.lib/antTestsSupport.jar = test_support_bin/ +output.anttestscore.jar = bin/ @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?>
<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<project name="build tests support jar" default="build" basedir=".."> + + <target name="build" description="Removes all build artifacts, recreates the support jar, and refreshes this plugin's resources" depends="clean, lib/antTestsSupport.jar"/> + + <target name="init" depends="properties"> + <property name="temp.folder" value="${basedir}/temp.folder"/> + <property name="plugin.destination" value="${basedir}"/> + <property name="build.result.folder" value="${basedir}"/> + </target> + + <target name="properties" if="eclipse.running"> + <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> + </target> + + <target name="lib/antTestsSupport.jar" depends="init" description= "Builds the support JAR"> + <property name="destdir" value="${temp.folder}/lib/antTestsSupport.jar.bin"/> + <delete dir="${destdir}"/> + <mkdir dir="${destdir}"/> + <!-- compile the source code --> + <javac target="1.1" destdir="${destdir}" failonerror="false" verbose="false" debug="on" includeAntRuntime="yes"> + <classpath> + <dirset dir="${basedir}"> + <include name="../org.eclipse.core.runtime/bin"/> + <include name="bin"/> + <include name="../org.eclipse.ant.core/bin"/> + </dirset> + <fileset dir="${eclipse.home}/plugins"> + <include name="org.eclipse.core.runtime*.jar"/> + <include name="org.eclipse.equinox.common*.jar"/> + <include name="org.eclipse.ant.core*.jar"/> + </fileset> + </classpath> + <src path="test support/"/> + </javac> + <mkdir dir="${build.result.folder}/lib"/> + <jar destfile="${build.result.folder}/lib/antTestsSupport.jar" basedir="${destdir}"/> + <delete dir="${temp.folder}"/> + </target> + + <target name="clean" depends="init"> + <delete file="${build.result.folder}/lib/antTestsSupport.jar"/> + <delete dir="${temp.folder}"/> + </target> +</project> @@ -0,0 +1,13 @@ +############################################################################### +# Copyright (c) 2000, 2005 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +pluginName=Ant Core Test Plugin +providerName=Eclipse.org @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.0"?>
<!-- + Copyright (c) 2005, 2008 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<plugin> + + <extension + point="org.eclipse.ant.core.extraClasspathEntries"> + <extraClasspathEntry + library="lib/antTestsSupport.jar"> + </extraClasspathEntry> + </extension> + + <extension point="org.eclipse.ant.core.antTasks"> + <antTask + name="coolTask" + class="org.eclipse.ant.tests.core.support.tasks.AntTestTask" + library="lib/antTestsSupport.jar" + headless="false"> + </antTask> + <antTask + name="coolTask" + uri="testing" + class="org.eclipse.ant.tests.core.support.tasks.AntTestTask" + library="lib/antTestsSupport.jar" + headless="false"> + </antTask> + </extension> + + <extension point="org.eclipse.ant.core.antTypes"> + <antType + name="coolType" + class="org.eclipse.ant.tests.core.support.types.AntTestPath" + library="lib/antTestsSupport.jar" + headless="false"> + </antType> + <antType + name="coolType" + uri="testing" + class="org.eclipse.ant.tests.core.support.types.AntTestPath" + library="lib/antTestsSupport.jar" + headless="false"> + </antType> + </extension> + + <extension + point="org.eclipse.ant.core.antProperties"> + <antProperty + name="property.testing" + value="true"> + </antProperty> + <antProperty + name="property.testing2" + value="hey" + class= "org.eclipse.does.not.exist"> + </antProperty> + <antProperty + name="property.testing3" + class= "org.eclipse.ant.tests.core.testplugin.AntTestPropertyValueProvider"> + </antProperty> + <antProperty + name="property.headless" + value="headless" + headless= "false"> + </antProperty> + </extension> + +</plugin> @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.testplugin; + + +import org.eclipse.ant.core.AntRunner; +import org.eclipse.ant.tests.core.AbstractAntTest; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; + +/** + * Responsible for running test ant build files. + */ +public class AntFileRunner { + + private static final String BASE_DIR_PREFIX = "-Dbasedir="; //$NON-NLS-1$ + + public void run(IFile buildFile, String[] targets, String[] args, String baseDir, boolean captureOutput) throws CoreException { + + AntRunner runner = new AntRunner(); + + String[] runnerArgs = args; + + if (baseDir.length() > 0) { + // Ant requires the working directory to be specified + // as one of the arguments, so it needs to be appended. + int length = 1; + if (args != null) { + length = args.length + 1; + } + + runnerArgs = new String[length]; + if (args != null) { + System.arraycopy(args, 0, runnerArgs, 0, args.length); + } + runnerArgs[length - 1] = BASE_DIR_PREFIX + baseDir; + } + runner.setArguments(runnerArgs); + + if (buildFile != null) { + runner.setBuildFileLocation(buildFile.getLocation().toFile().toString()); + } + if (targets != null && targets.length > 0) { + runner.setExecutionTargets(targets); + } + if (captureOutput) { + runner.addBuildLogger(AbstractAntTest.ANT_TEST_BUILD_LOGGER); + } + + runner.run(null); + } + + public void run(String[] args, String baseDir) throws Exception { + + AntRunner runner = new AntRunner(); + + String[] runnerArgs = args; + + if (baseDir.length() > 0) { + // Ant requires the working directory to be specified + // as one of the arguments, so it needs to be appended. + runnerArgs = new String[args.length + 1]; + System.arraycopy(args, 0, runnerArgs, 0, args.length); + runnerArgs[args.length] = BASE_DIR_PREFIX + baseDir; + } + runner.setArguments(runnerArgs); + + runner.run(args); + } +} @@ -0,0 +1,229 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.testplugin; + + +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.List; + +public class AntTestChecker { + + private static AntTestChecker deflt= null; + + private int taskStartedCount; + + private int taskFinishedCount; + + private int targetsStartedCount; + + private int targetsFinishedCount; + + private int buildsStartedCount; + + private int buildsFinishedCount; + + private List messages= new ArrayList(); + + private List targets= new ArrayList(); + + private List tasks= new ArrayList(); + + private List projects= new ArrayList(); + + private Hashtable userProperties; + + private List nameOfListeners= new ArrayList(); + + private AntTestChecker() { + } + + /** + * Returns the singleton AntTestChecker + */ + public static AntTestChecker getDefault() { + if (deflt == null) { + deflt= new AntTestChecker(); + } + return deflt; + } + + /** + * Resets the singleton AntTestChecker + */ + public static void reset() { + if (deflt != null) { + deflt.resetState(); + } + } + /** + * @see org.apache.tools.ant.BuildListener#buildFinished(org.apache.tools.ant.BuildEvent) + */ + public void buildFinished() { + buildsFinishedCount++; + } + + + public void buildStarted(String projectName) { + buildsStartedCount++; + projects.add(projectName); + } + + + public void messageLogged(String message) { + messages.add(message); + } + + /** + * @see org.apache.tools.ant.BuildListener#targetFinished(org.apache.tools.ant.BuildEvent) + */ + public void targetFinished() { + targetsFinishedCount++; + } + + /** + * @see org.apache.tools.ant.BuildListener#targetStarted(org.apache.tools.ant.BuildEvent) + */ + public void targetStarted(String targetName) { + targetsStartedCount++; + targets.add(targetName); + } + + /** + * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent) + */ + public void taskFinished() { + taskFinishedCount++; + } + + /** + * @see org.apache.tools.ant.BuildListener#taskStarted(org.apache.tools.ant.BuildEvent) + */ + public void taskStarted(String taskName) { + taskStartedCount++; + tasks.add(taskName); + } + + /** + * Returns the buildsFinishedCount. + * @return int + */ + public int getBuildsFinishedCount() { + return buildsFinishedCount; + } + + /** + * Returns the buildsStartedCount. + * @return int + */ + public int getBuildsStartedCount() { + return buildsStartedCount; + } + + /** + * Returns the messagesLoggedCount. + * @return int + */ + public int getMessagesLoggedCount() { + return messages.size(); + } + + /** + * Returns the targetsFinishedCount. + * @return int + */ + public int getTargetsFinishedCount() { + return targetsFinishedCount; + } + + /** + * Returns the targetsStartedCount. + * @return int + */ + public int getTargetsStartedCount() { + return targetsStartedCount; + } + + /** + * Returns the taskFinishedCount. + * @return int + */ + public int getTaskFinishedCount() { + return taskFinishedCount; + } + + /** + * Returns the taskStartedCount. + * @return int + */ + public int getTaskStartedCount() { + return taskStartedCount; + } + + protected void resetState() { + taskStartedCount= 0; + taskFinishedCount= 0; + targetsStartedCount= 0; + targetsFinishedCount= 0; + buildsStartedCount= 0; + buildsFinishedCount= 0; + messages= new ArrayList(); + tasks= new ArrayList(); + targets= new ArrayList(); + projects= new ArrayList(); + userProperties= null; + nameOfListeners= new ArrayList(); + } + + /** + * Return the message n from the last: + * e.g. getLoggedMessage(0) returns the most recent message + * + * @param n message index + * @return the nth last message + */ + public String getLoggedMessage(int n) { + n = messages.size() - (n + 1); + if ((n < 0) || (n >= messages.size())) { + return null; + } + return (String) messages.get(n); + } + + public String getLastMessageLogged() { + return getLoggedMessage(0); + } + + public void setUserProperties(Hashtable userProperties) { + this.userProperties= userProperties; + } + + public String getUserProperty(String name) { + return (String)userProperties.get(name); + } + + public List getMessages() { + return messages; + } + + public List getListeners() { + return nameOfListeners; + } + + public String getLastListener() { + return (String)nameOfListeners.get(nameOfListeners.size() - 1); + } + + + public void addNameOfListener(String nameOfListener) { + this.nameOfListeners.add(nameOfListener); + } +} @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.testplugin; + + +import java.io.File; +import java.io.IOException; +import java.net.URL; + +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceDescription; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.IPath; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.Bundle; + + +public class AntTestPlugin extends AbstractUIPlugin { + + private static AntTestPlugin deflt; + + public AntTestPlugin() { + super(); + deflt= this; + } + + public static AntTestPlugin getDefault() { + return deflt; + } + + public static IWorkspace getWorkspace() { + return ResourcesPlugin.getWorkspace(); + } + + public static void enableAutobuild(boolean enable) throws CoreException { + // disable auto build + IWorkspace workspace= AntTestPlugin.getWorkspace(); + IWorkspaceDescription desc= workspace.getDescription(); + desc.setAutoBuilding(enable); + workspace.setDescription(desc); + } + + public File getFileInPlugin(IPath path) { + try { + Bundle bundle = getDefault().getBundle(); + URL installURL= new URL(bundle.getEntry("/"), path.toString()); + URL localURL= FileLocator.toFileURL(installURL); + return new File(localURL.getFile()); + } catch (IOException e) { + return null; + } + } +} @@ -0,0 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2003, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.testplugin; + +import org.eclipse.ant.core.IAntPropertyValueProvider; + +public class AntTestPropertyValueProvider implements IAntPropertyValueProvider { + + /* (non-Javadoc) + * @see org.eclipse.ant.core.IAntPropertyValueProvider#getAntPropertyValue(java.lang.String) + */ + public String getAntPropertyValue(String antPropertyName) { + return "AntTestPropertyValueProvider"; + } + +} @@ -0,0 +1,114 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.testplugin; + + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.*; + +import org.eclipse.core.resources.*; +import org.eclipse.core.runtime.*; +import org.eclipse.ui.dialogs.IOverwriteQuery; +import org.eclipse.ui.wizards.datatransfer.*; + +/** + * Helper methods to set up an IProject. + */ +public class ProjectHelper { + + public static final IPath TEST_BUILDFILES_DIR= new Path("testbuildfiles"); + public static final IPath TEST_RESOURCES_DIR= new Path("testresources"); + public static final IPath TEST_LIB_DIR= new Path("testlib"); + + /** + * Creates a IProject. + */ + public static IProject createProject(String projectName) throws CoreException { + IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); + IProject project= root.getProject(projectName); + if (!project.exists()) { + project.create(null); + } else { + project.refreshLocal(IResource.DEPTH_INFINITE, null); + } + + if (!project.isOpen()) { + project.open(null); + } + + return project; + } + + /** + * Removes an IProject. + */ + public static void delete(IProject project) throws CoreException { + project.delete(true, true, null); + } + + + /** + * Adds a folder to an IProject. + */ + public static IFolder addFolder(IProject project, String containerName) throws CoreException { + + IFolder folder= project.getFolder(containerName); + if (!folder.exists()) { + folder.create(false, true, null); + } + + return folder; + + } + + public static void importFilesFromDirectory(File rootDir, IPath destPath, IProgressMonitor monitor) throws InvocationTargetException, IOException { + IImportStructureProvider structureProvider = FileSystemStructureProvider.INSTANCE; + List files = new ArrayList(100); + addFiles(rootDir, files); + try { + ImportOperation op= new ImportOperation(destPath, rootDir, structureProvider, new ImportOverwriteQuery(), files); + op.setCreateContainerStructure(false); + op.run(monitor); + } catch (InterruptedException e) { + // should not happen + } + } + + private static void addFiles(File dir, List collection) throws IOException { + File[] files = dir.listFiles(); + List subDirs = new ArrayList(2); + for (int i = 0; i < files.length; i++) { + if (files[i].isFile()) { + collection.add(files[i]); + } else if (files[i].isDirectory()) { + subDirs.add(files[i]); + } + } + Iterator iter = subDirs.iterator(); + while (iter.hasNext()) { + File subDir = (File)iter.next(); + addFiles(subDir, collection); + } + } + + private static class ImportOverwriteQuery implements IOverwriteQuery { + public String queryOverwrite(String file) { + return ALL; + } + } + + public static final String PROJECT_NAME = "AntTests"; + public static final String BUILDFILES_FOLDER = "buildfiles"; + public static final String RESOURCES_FOLDER = "resources"; + public static final String LIB_FOLDER = "lib"; +} @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.support.inputHandlers; + + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.input.DefaultInputHandler; +import org.apache.tools.ant.input.InputRequest; + +/** + * A test input handler when using Ant within Eclipse. + * This is the class that will respond to <input> requests from + * within an Ant build file. + * If the build is occurring in Ant 1.6.0 and the -noinput option has been specified + * this input handler will fail. + */ +public class AntTestInputHandler extends DefaultInputHandler { + + /* (non-Javadoc) + * @see org.apache.tools.ant.input.InputHandler#handleInput(org.apache.tools.ant.input.InputRequest) + */ + public void handleInput(InputRequest request) throws BuildException { + if (System.getProperty("eclipse.ant.noInput") != null) { //$NON-NLS-1$ + throw new BuildException("Unable to respond to input request likely as a result of specifying the -noinput command"); + } + request.setInput("testing handling input requests"); + } +} @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.support.tasks; + + + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Echo; + + +public class AntTestTask extends Task { + + public AntTestTask() { + super(); + } + + /** + * @see org.apache.tools.ant.Task#execute() + */ + public void execute() throws BuildException { + Echo echo= new Echo(); + echo.setProject(getProject()); + echo.setMessage("Testing Ant in Eclipse with a custom task"); + echo.execute(); + } +} @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2003, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.support.tasks; + + + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Echo; + + +public class AntTestTask2 extends Task { + + public AntTestTask2() { + super(); + } + + /** + * @see org.apache.tools.ant.Task#execute() + */ + public void execute() throws BuildException { + Echo echo= new Echo(); + echo.setProject(getProject()); + echo.setMessage("Testing Ant in Eclipse with a custom task"); + echo.execute(); + } +} @@ -0,0 +1,64 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.support.testloggers; + + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildListener; +import org.eclipse.ant.tests.core.testplugin.AntTestChecker; + + +public class TestBuildListener implements BuildListener { + + /** + * @see org.apache.tools.ant.BuildListener#buildFinished(org.apache.tools.ant.BuildEvent) + */ + public void buildFinished(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#buildStarted(org.apache.tools.ant.BuildEvent) + */ + public void buildStarted(BuildEvent event) { + AntTestChecker.getDefault().addNameOfListener(this.getClass().getName()); + } + + /** + * @see org.apache.tools.ant.BuildListener#messageLogged(org.apache.tools.ant.BuildEvent) + */ + public void messageLogged(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#targetFinished(org.apache.tools.ant.BuildEvent) + */ + public void targetFinished(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#targetStarted(org.apache.tools.ant.BuildEvent) + */ + public void targetStarted(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent) + */ + public void taskFinished(BuildEvent event) { + } + + /** + * @see org.apache.tools.ant.BuildListener#taskStarted(org.apache.tools.ant.BuildEvent) + */ + public void taskStarted(BuildEvent event) { + } + +} @@ -0,0 +1,178 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.support.testloggers; + + +import java.io.PrintStream; + +import org.apache.tools.ant.BuildEvent; +import org.apache.tools.ant.BuildLogger; +import org.apache.tools.ant.Project; +import org.eclipse.ant.core.AntSecurityException; +import org.eclipse.ant.tests.core.testplugin.AntTestChecker; +import org.eclipse.core.runtime.OperationCanceledException; + +public class TestBuildLogger implements BuildLogger { + + private int fMessageOutputLevel= Project.MSG_INFO; + private PrintStream fErr= null; + private PrintStream fOut= null; + private boolean fSetProperties= true; + + /** + * An exception that has already been logged. + */ + private Throwable fHandledException= null; + + + public TestBuildLogger() { + } + + /** + * @see org.apache.tools.ant.BuildLogger#setMessageOutputLevel(int) + */ + public void setMessageOutputLevel(int level) { + fMessageOutputLevel= level; + } + + protected int getMessageOutputLevel() { + return fMessageOutputLevel; + } + + /** + * @see org.apache.tools.ant.BuildLogger#setEmacsMode(boolean) + */ + public void setEmacsMode(boolean emacsMode) { + } + + /** + * @see org.apache.tools.ant.BuildListener#buildStarted(org.apache.tools.ant.BuildEvent) + */ + public void buildStarted(BuildEvent event) { + AntTestChecker.getDefault().buildStarted(event.getProject().getName()); + } + + /** + * @see org.apache.tools.ant.BuildListener#buildFinished(org.apache.tools.ant.BuildEvent) + */ + public void buildFinished(BuildEvent event) { + handleException(event); + fHandledException= null; + AntTestChecker.getDefault().buildFinished(); + } + + /** + * @see org.apache.tools.ant.BuildListener#targetStarted(org.apache.tools.ant.BuildEvent) + */ + public void targetStarted(BuildEvent event) { + AntTestChecker.getDefault().targetStarted(event.getTarget().getName()); + if (fSetProperties) { + fSetProperties= false; + AntTestChecker.getDefault().setUserProperties(event.getProject().getProperties()); + } + } + + /** + * @see org.apache.tools.ant.BuildListener#targetFinished(org.apache.tools.ant.BuildEvent) + */ + public void targetFinished(BuildEvent event) { + handleException(event); + AntTestChecker.getDefault().targetFinished(); + } + + /** + * @see org.apache.tools.ant.BuildListener#taskStarted(org.apache.tools.ant.BuildEvent) + */ + public void taskStarted(BuildEvent event) { + AntTestChecker.getDefault().taskStarted(event.getTask().getTaskName()); + } + + /** + * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent) + */ + public void taskFinished(BuildEvent event) { + handleException(event); + AntTestChecker.getDefault().targetFinished(); + } + + /** + * @see BuildListener#messageLogged(BuildEvent) + */ + public void messageLogged(BuildEvent event) { + if (event.getPriority() > getMessageOutputLevel()) { + return; + } + logMessage(event.getMessage(), event.getPriority()); + AntTestChecker.getDefault().messageLogged(event.getMessage()); + } + + protected PrintStream getErrorPrintStream() { + return fErr; + } + + protected PrintStream getOutputPrintStream() { + return fOut; + } + + /** + * @see org.apache.tools.ant.BuildLogger#setErrorPrintStream(java.io.PrintStream) + */ + public void setErrorPrintStream(PrintStream err) { + //this build logger logs to "null" unless + //the user has explicitly set a logfile to use + if (err == System.err) { + fErr= null; + } else { + fErr= err; + } + } + + /** + * @see org.apache.tools.ant.BuildLogger#setOutputPrintStream(java.io.PrintStream) + */ + public void setOutputPrintStream(PrintStream output) { + //this build logger logs to "null" unless + //the user has explicitly set a logfile to use + if (output == System.out) { + fOut= null; + } else { + fOut= output; + } + } + + protected void logMessage(String message, int priority) { + if (priority > getMessageOutputLevel()) { + return; + } + + if (priority == Project.MSG_ERR) { + if (getErrorPrintStream() != null && getErrorPrintStream() != System.err) { + //user has designated to log to a logfile + getErrorPrintStream().println(message); + } + } else { + if (getOutputPrintStream() != null && getOutputPrintStream() != System.out) { + //user has designated to log to a logfile + getOutputPrintStream().println(message); + } + } + } + + protected void handleException(BuildEvent event) { + Throwable exception = event.getException(); + if (exception == null || exception == fHandledException + || exception instanceof OperationCanceledException + || exception instanceof AntSecurityException) { + return; + } + fHandledException= exception; + } +} @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.support.types; + + + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Path; + +public class AntTestPath extends Path { + + String message; + + public AntTestPath(Project project) { + super(project); + } + + public void setMessage(String message) { + this.message= message; + } + + public String getMessage() { + return message; + } + +} diff --git a/ant/org.eclipse.ant.tests.core/test.xml b/ant/org.eclipse.ant.tests.core/test.xml new file mode 100644 index 000000000..4f6daa5ae --- /dev/null +++ b/ ant/org.eclipse.ant.tests.core/test.xml@@ -0,0 +1,54 @@ +<?xml version="1.0"?> + +<project name="testsuite" default="run" basedir="."> + <!-- sets the properties eclipse-home, and library-file --> + <!-- The property ${eclipse-home} should be passed into this script --> + <!-- Set a meaningful default value for when it is not. --> + <property name="eclipse-home" value="${basedir}\..\.."/> +<property name="plugin-name" value="org.eclipse.ant.tests.core"/> + <property name="library-file" + value="${eclipse-home}/plugins/org.eclipse.test/library.xml"/> + + <!-- This target holds all initialization code that needs to be done for --> + <!-- all tests that are to be run. Initialization for individual tests --> + <!-- should be done within the body of the suite target. --> + <target name="init"> + <tstamp/> + <delete> + <fileset dir="${eclipse-home}" includes="org*.xml"/> + </delete> + </target> + + <!-- This target defines the tests that need to be run. --> + <target name="suite"> + <property name="jdt-folder" + value="${eclipse-home}/jdt_folder"/> + <delete dir="${jdt-folder}" quiet="true"/> + <ant target="core-test" antfile="${library-file}" dir="${eclipse-home}"> + <property name="data-dir" value="${jdt-folder}"/> + <property name="plugin-name" value="${plugin-name}"/> + <property name="classname" + value="org.eclipse.ant.tests.core.AutomatedSuite"/> + </ant> + </target> + + <!-- This target holds code to cleanup the testing environment after --> + <!-- after all of the tests have been run. You can use this target to --> + <!-- delete temporary files that have been created. --> + <target name="cleanup"> + </target> + + <!-- This target runs the test suite. Any actions that need to happen --> + <!-- after all the tests have been run should go here. --> + <target name="run" depends="init,suite,cleanup"> + <ant target="collect" antfile="${library-file}" dir="${eclipse-home}"> + <property name="includes" value="org*.xml"/> + <property name="output-file" value="${plugin-name}.xml"/> + </ant> + </target> + + <!-- This target runs the performance test suites. --> + <target name="performance"> + </target> + +</project> @@ -0,0 +1,15 @@ +<project name="bug" default="all"> + <path id="myclasspath"> + <fileset dir="..\lib"> + <include name="antTestsSupport.jar" /> + </fileset> + </path> + + <taskdef name="hello" classname="org.eclipse.ant.tests.core.support.tasks.AntTestTask"> + <classpath refid="myclasspath" /> + </taskdef> + + <target name="all"> + <hello /> + </target> + </project>
\ No newline at end of file @@ -0,0 +1,8 @@ +<project name="34663.xml" default="echoP"> + +<taskdef file="${ROOTDIR}/taskdefs.properties" /> + + <target name="echoP"> + <myEchoProperties/> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,12 @@ +<project default="all"> + <path id="someclasspath"> + <fileset dir="${ant.home}/lib" includes="sometask.jar"/> + </path> + + <taskdef name="sometask" classname="com.foo.SomeTask" +classpathref="someclasspath"/> + + <target name="all"> + <echo>Hello ${ant.home}</echo> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,13 @@ +<project name="main" default="all"> + <taskdef resource="taskdefs.properties"/> + <hello/> + <target name="all"> + <echo>Hello</echo> + </target> + <target name="all3"> + <echo>Hello</echo> + </target> + <target name="all4"> + <echo>Hello</echo> + </target> +</project> @@ -0,0 +1,6 @@ +<project name="ClasspathOrdering" default="ordered" basedir=".."> + + <target name="ordered"> + <java classname= "ClasspathOrdering"/> + </target> +</project> @@ -0,0 +1,13 @@ +<project name="Custom Task" default="Custom Task" basedir="."> + <target name="init"> + <tstamp/> + </target> + + <target name="Custom Task" description= "Test adding a custom task" depends="init"> + <AntTestTask/> + </target> + + <target name="Custom Task from Entry" description= "Test adding a custom task"> + <AntTestTask2/> + </target> +</project> @@ -0,0 +1,16 @@ +<project name="Custom Type" default="Custom Type" basedir="."> + + <anttestpath id="compile.classpath"> + <fileset dir="lib"> + <include name="**/*.jar"/> + </fileset> + </anttestpath> + + <target name="init"> + <tstamp/> + </target> + + <target name="Custom Type" description= "Test adding a custom type" depends="init"> + <echo message="Test adding a custom type"/> + </target> +</project> @@ -0,0 +1,16 @@ +<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> +<project name="Extension Point Task" default="Extension Point Task" basedir="."> + <target name="Extension Point Task" description= "Ensure that an extension point defined task is present"> + <coolTask/> + <my:coolTask xmlns:my="testing"/> + </target> +</project> @@ -0,0 +1,12 @@ +<project name="Extension Point Type" default="Extension Point Type" basedir="."> + + <coolType id="compile.classpath"> + <fileset dir="lib"> + <include name="**/*.jar"/> + </fileset> + </coolType> + + <target name="Extension Point Type" description= "Ensure that an extension point defined type is present"> + <echo message="Ensure that an extension point defined type is present"/> + </target> +</project> @@ -0,0 +1,5 @@ +<project name= "Testing"> + <target name= "test"> + <echo message="testing"/> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,11 @@ +<project name="Echo Test" default="Test for Echo" basedir="."> + <target name="init"> + <tstamp/> + </target> + + <target name="Test for Echo" description= "Calls other echos" depends="init"> + <ant antfile="buildfiles/echoing.xml" dir="../../AntTests" target="echo1"/> + <ant antfile="buildfiles/echoing.xml" dir="../../AntTests" target="echo2"/> + <ant antfile="buildfiles/echoing.xml" dir="../../AntTests" target="echo3"/> + </target> +</project> @@ -0,0 +1,14 @@ +<project name="Eching" default="echo1" basedir=".."> + + <target name="echo1"> + <echo message="echo1"/> + </target> + + <target name="echo2"> + <echo message="echo2"/> + </target> + + <target name="echo3" description= "An echo3!"> + <echo message="echo3"/> + </target> +</project> @@ -0,0 +1,14 @@ +<project name="Echoing" default="echo1" basedir=".."> + + <target name="echo1"> + <echo message="echo1"/> + </target> + + <target name="echo2"> + <echo message="echo2"/> + </target> + + <target name="echo3" description= "An echo3!"> + <echo message="echo3"/> + </target> +</project> @@ -0,0 +1,9 @@ +<project default="all"> + <target name="all" depends="fails, echos"/> + <target name="fails"> + <jar jarfile="jar16.jar" basedir="doesNotExist"/> + </target> + <target name="echos"> + <echo>Still echo on failure</echo> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,7 @@ +<project name="input testing" default= "input test"> + <target name="input test"> + <input message="Enter for echo" addproperty= "inputTest"> + </input> + <echo message="${inputTest}"/> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="org.eclipse.ant.core" default="build" basedir=".."> + + + <target name="init" depends="properties"> + <property name="plugin" value="AntTests"/> + <property name="temp.folder" value="${basedir}/temp.folder"/> + <property name="plugin.destination" value="${basedir}"/> + <property name="build.result.folder" value="${basedir}"/> + </target> + + <target name="properties" if="use.eclipse.JDTCompiler"> + <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> + </target> + + <target name="build" depends="init"> + <property name="destdir" value="${temp.folder}/javac.bin"/> + <delete dir="${temp.folder}/javac.bin"/> + <mkdir dir="${temp.folder}/javac.bin"/> + <!-- compile the source code --> + <javac destdir="${temp.folder}/javac.bin" failonerror="false" verbose="false" debug="on" includeAntRuntime="yes"> + <src path="resources"/> + </javac> + </target> + + <target name="clean" depends="init"> + <delete dir="${temp.folder}"/> + </target> + + <target name="refresh" depends="init" if="eclipse.running"> + <eclipse.refreshLocal resource="${plugin}" depth="infinite"/> + </target> +</project> Binary files differBinary files differBinary files differ@@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + + + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Echo; + + +public class AntTestTask extends Task { + + public AntTestTask() { + super(); + } + + /** + * @see org.apache.tools.ant.Task#execute() + */ + public void execute() throws BuildException { + Echo echo= new Echo(); + echo.setProject(getProject()); + echo.setMessage("Testing Ant in Eclipse with a custom task"); + echo.execute(); + } +} @@ -0,0 +1,12 @@ +############################################################################### +# Copyright (c) 2004, 2005 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +myEchoProperties=org.apache.tools.ant.taskdefs.optional.EchoProperties +hello=org.eclipse.ant.tests.core.support.tasks.AntTestTask
\ No newline at end of file @@ -0,0 +1,12 @@ +############################################################################### +# Copyright (c) 2000, 2005 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +AntTests=testing from properties file +eclipse.is.cool=Yep @@ -0,0 +1,263 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core; + + +import java.io.File; +import java.util.List; + +import junit.framework.TestCase; + +import org.eclipse.ant.core.AntCorePlugin; +import org.eclipse.ant.core.AntCorePreferences; +import org.eclipse.ant.core.AntRunner; +import org.eclipse.ant.core.IAntClasspathEntry; +import org.eclipse.ant.core.Property; +import org.eclipse.ant.core.TargetInfo; +import org.eclipse.ant.core.Task; +import org.eclipse.ant.core.Type; +import org.eclipse.ant.tests.core.testplugin.AntFileRunner; +import org.eclipse.ant.tests.core.testplugin.AntTestChecker; +import org.eclipse.ant.tests.core.testplugin.AntTestPlugin; +import org.eclipse.ant.tests.core.testplugin.ProjectHelper; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; + +/** + * Tests for Ant core + */ +public abstract class AbstractAntTest extends TestCase { + + protected static final String BUILD_SUCCESSFUL= "BUILD SUCCESSFUL"; + public static final String ANT_TEST_BUILD_LOGGER = "org.eclipse.ant.tests.core.support.testloggers.TestBuildLogger"; //$NON-NLS-1$ + public static final String ANT_TEST_BUILD_LISTENER= "org.eclipse.ant.tests.core.support.testloggers.TestBuildListener"; + + /* (non-Javadoc) + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + assertProject(); + } + + /** + * Asserts that the test project has been created and all testing resources have been + * loaded each time the {@link #setUp()} method is called + * @throws Exception + * @since 3.5 + */ + protected void assertProject() throws Exception { + // delete any pre-existing project + IProject pro = ResourcesPlugin.getWorkspace().getRoot().getProject(ProjectHelper.PROJECT_NAME); + if (!pro.exists()) { + // create project and import build files and support files + IProject project = ProjectHelper.createProject(ProjectHelper.PROJECT_NAME); + IFolder folder = ProjectHelper.addFolder(project, ProjectHelper.BUILDFILES_FOLDER); + File root = AntTestPlugin.getDefault().getFileInPlugin(ProjectHelper.TEST_BUILDFILES_DIR); + ProjectHelper.importFilesFromDirectory(root, folder.getFullPath(), null); + + folder = ProjectHelper.addFolder(project, ProjectHelper.RESOURCES_FOLDER); + root = AntTestPlugin.getDefault().getFileInPlugin(ProjectHelper.TEST_RESOURCES_DIR); + ProjectHelper.importFilesFromDirectory(root, folder.getFullPath(), null); + + folder = ProjectHelper.addFolder(project, ProjectHelper.LIB_FOLDER); + root = AntTestPlugin.getDefault().getFileInPlugin(ProjectHelper.TEST_LIB_DIR); + ProjectHelper.importFilesFromDirectory(root, folder.getFullPath(), null); + } + } + + /** + * Returns the 'AntTests' project. + * + * @return the test project + */ + protected IProject getProject() { + return ResourcesPlugin.getWorkspace().getRoot().getProject(ProjectHelper.PROJECT_NAME); + } + + public AbstractAntTest(String name) { + super(name); + } + + protected IFile getBuildFile(String buildFileName) { + IFile file = getProject().getFolder(ProjectHelper.BUILDFILES_FOLDER).getFile(buildFileName); + assertTrue("Could not find build file named: " + buildFileName, file.exists()); + return file; + } + + protected IFolder getWorkingDirectory(String workingDirectoryName) { + IFolder folder = getProject().getFolder(workingDirectoryName); + assertTrue("Could not find the working directory named: " + workingDirectoryName, folder.exists()); + return folder; + } + + protected IFile checkFileExists(String fileName) throws CoreException { + getProject().refreshLocal(IResource.DEPTH_INFINITE, null); + IFile file = getProject().getFolder(ProjectHelper.BUILDFILES_FOLDER).getFile(fileName); + assertTrue("Could not find file named: " + fileName, file.exists()); + return file; + } + + public void run(String buildFileName) throws CoreException { + run(buildFileName, null, false); + } + + public void run(String buildFileName, String[] args) throws CoreException { + run(buildFileName, args, false); + } + + public void run(String buildFileName, String[] args, boolean retrieveTargets) throws CoreException { + run(buildFileName, args, retrieveTargets, ""); + } + + public void run(String buildFileName, String[] args, boolean retrieveTargets, String workingDir) throws CoreException { + AntTestChecker.reset(); + IFile buildFile= null; + if (buildFileName != null) { + buildFile= getBuildFile(buildFileName); + } + AntFileRunner runner= new AntFileRunner(); + String[] targets= null; + if (retrieveTargets) { + targets= getTargetNames(buildFileName); + } + if (workingDir.length() > 0) { + workingDir= getWorkingDirectory(workingDir).getLocation().toFile().getAbsolutePath(); + } + runner.run(buildFile, targets, args, workingDir, true); + assertTrue("Build starts did not equal build finishes", AntTestChecker.getDefault().getBuildsStartedCount() == AntTestChecker.getDefault().getBuildsFinishedCount()); + } + + protected TargetInfo[] getTargets(String buildFileName) throws CoreException { + IFile buildFile= getBuildFile(buildFileName); + + AntRunner runner = new AntRunner(); + runner.setBuildFileLocation(buildFile.getLocation().toFile().getAbsolutePath()); + return runner.getAvailableTargets(); + } + + protected String[] getTargetNames(String buildFileName) throws CoreException { + TargetInfo[] infos= getTargets(buildFileName); + String[] names= new String[infos.length]; + for (int i = 0; i < infos.length; i++) { + TargetInfo info = infos[i]; + names[i]= info.getName(); + } + return names; + } + + protected String[] getTargetDescriptions(String buildFileName) throws CoreException { + TargetInfo[] infos= getTargets(buildFileName); + String[] descriptions= new String[infos.length]; + for (int i = 0; i < infos.length; i++) { + TargetInfo info = infos[i]; + descriptions[i]= info.getDescription(); + } + return descriptions; + } + + /** + * Returns the name of the project containing the given target in the given build file or + * <code>null</code> if no project name can be found. + */ + protected String getProjectName(String buildFileName, String targetName) throws CoreException { + TargetInfo info= getTarget(buildFileName, targetName); + if (info != null) { + return info.getProject().getName(); + } + return null; + } + + /** + * Returns the dependencies of the target with the given name in the given build file or <code>null</code> + * if no such target can be found. + */ + protected String[] getDependencies(String buildFileName, String targetName) throws CoreException { + TargetInfo info= getTarget(buildFileName, targetName); + if (info != null) { + return info.getDependencies(); + } + return null; + } + + /** + * Returns the target with the given name in the given build file or <code>null</code> + * if no such target can be found. + */ + protected TargetInfo getTarget(String buildFileName, String targetName) throws CoreException { + TargetInfo[] infos= getTargets(buildFileName); + for (int i= 0, numTargets= infos.length; i < numTargets; i++) { + if (infos[i].getName().equals(targetName)) { + return infos[i]; + } + } + return null; + } + + /** + * Return the log message n from the last: + * e.g. getLoggedMessage(0) returns the most recent message + * + * @param n message index + * @return the nth last message + */ + protected String getLoggedMessage(int n) { + return AntTestChecker.getDefault().getLoggedMessage(n); + } + + protected String getLastMessageLogged() { + return getLoggedMessage(0); + } + + protected void assertSuccessful() { + List messages= AntTestChecker.getDefault().getMessages(); + String success= (String)messages.get(messages.size() - 1); + assertEquals("Build was not flagged as successful: " + success, BUILD_SUCCESSFUL, success); + } + + protected String getPropertyFileName() { + return getProject().getFolder(ProjectHelper.RESOURCES_FOLDER).getFile("test.properties").getLocation().toFile().getAbsolutePath(); + } + + protected void restorePreferenceDefaults() { + AntCorePreferences prefs= AntCorePlugin.getPlugin().getPreferences(); + IAntClasspathEntry toolsEntry= prefs.getToolsJarEntry(); + IAntClasspathEntry[] additionalEntries; + if (toolsEntry == null) { + additionalEntries= new IAntClasspathEntry[]{}; + } else { + additionalEntries= new IAntClasspathEntry[] {toolsEntry}; + } + prefs.setAdditionalClasspathEntries(additionalEntries); + prefs.setAntHomeClasspathEntries(prefs.getDefaultAntHomeEntries()); + prefs.setCustomTasks(new Task[]{}); + prefs.setCustomTypes(new Type[]{}); + prefs.setCustomPropertyFiles(new String[]{}); + prefs.setCustomProperties(new Property[]{}); + prefs.setAntHome(prefs.getDefaultAntHome()); + } + + protected String getAntHome() { + AntCorePreferences prefs= AntCorePlugin.getPlugin().getPreferences(); + IAntClasspathEntry[] entries= prefs.getAntHomeClasspathEntries(); + IAntClasspathEntry antjar= entries[0]; + IPath antHomePath= new Path(antjar.getEntryURL().getFile()); + antHomePath= antHomePath.removeLastSegments(1); + return antHomePath.toFile().getAbsolutePath(); + } +} + @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.tests; + + +import org.eclipse.ant.core.AntCorePlugin; +import org.eclipse.ant.tests.core.AbstractAntTest; +import org.eclipse.ant.tests.core.testplugin.AntTestChecker; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; + + +public class ProjectTests extends AbstractAntTest { + + public ProjectTests(String name) { + super(name); + } + + /** + * Tests that the three properties that should always be set are correct + */ + public void testBasePropertiesSet() throws CoreException { + String buildFileName="TestForEcho.xml"; + run(buildFileName); + IFile buildFile= getBuildFile(buildFileName); + String fullName= buildFile.getLocation().toFile().getAbsolutePath(); + assertEquals("eclipse.running should have been set as true", "true", AntTestChecker.getDefault().getUserProperty("eclipse.running")); + assertEquals("ant.file should have been set as the build file name", fullName, AntTestChecker.getDefault().getUserProperty("ant.file")); + assertNotNull("ant.java.version should have been set", AntTestChecker.getDefault().getUserProperty("ant.java.version")); + assertNotNull("ant.version should have been set", AntTestChecker.getDefault().getUserProperty("ant.version")); + assertNotNull("eclipse.home should have been set", AntTestChecker.getDefault().getUserProperty("eclipse.home")); + } + + public void testValue() throws CoreException { + String buildFileName="TestForEcho.xml"; + run(buildFileName); + assertEquals("property.testing should have been set as true", "true", AntTestChecker.getDefault().getUserProperty("property.testing")); + } + + public void testValueWithClass() throws CoreException { + + String buildFileName="TestForEcho.xml"; + run(buildFileName); + assertEquals("property.testing2 should have been set as hey", "hey", AntTestChecker.getDefault().getUserProperty("property.testing2")); + } + + public void testClass() throws CoreException { + String buildFileName="TestForEcho.xml"; + run(buildFileName); + assertEquals("property.testing3 should have been set as AntTestPropertyProvider", "AntTestPropertyValueProvider", AntTestChecker.getDefault().getUserProperty("property.testing3")); + } + + public void testHeadless() throws CoreException { + try { + AntCorePlugin.getPlugin().setRunningHeadless(true); + String buildFileName="TestForEcho.xml"; + run(buildFileName); + assertNull("property.headless should not have been set as AntTestPropertyProvider", AntTestChecker.getDefault().getUserProperty("property.headless")); + } finally { + AntCorePlugin.getPlugin().setRunningHeadless(false); + } + } + + public void testNotHeadless() throws CoreException { + String buildFileName="TestForEcho.xml"; + run(buildFileName); + assertEquals("property.headless should have been set as AntTestPropertyProvider", "headless", AntTestChecker.getDefault().getUserProperty("property.headless")); + } +}
\ No newline at end of file @@ -0,0 +1,151 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.tests; + +import java.io.File; +import java.net.URL; + +import org.eclipse.ant.core.AntCorePlugin; +import org.eclipse.ant.core.AntCorePreferences; +import org.eclipse.ant.core.IAntClasspathEntry; +import org.eclipse.ant.core.Property; +import org.eclipse.ant.core.Task; +import org.eclipse.ant.internal.core.AntClasspathEntry; +import org.eclipse.ant.tests.core.AbstractAntTest; +import org.eclipse.ant.tests.core.testplugin.AntTestChecker; +import org.eclipse.ant.tests.core.testplugin.ProjectHelper; +import org.eclipse.core.runtime.CoreException; + +public class TaskTests extends AbstractAntTest { + + + public TaskTests(String name) { + super(name); + } + + /** + * Testing the old deprecated API + * @throws CoreException + */ + public void testAddTaskSettingLibrary() throws CoreException { + AntCorePreferences prefs =AntCorePlugin.getPlugin().getPreferences(); + URL[] urls= prefs.getExtraClasspathURLs(); + Task newTask= new Task(); + newTask.setLibrary(urls[0]); + newTask.setTaskName("AntTestTask"); + newTask.setClassName("org.eclipse.ant.tests.core.support.tasks.AntTestTask"); + prefs.setCustomTasks(new Task[]{newTask}); + + prefs.updatePluginPreferences(); + + run("CustomTask.xml", new String[0], false); + String msg= (String)AntTestChecker.getDefault().getMessages().get(1); + assertEquals("Message incorrect: " + msg, "Testing Ant in Eclipse with a custom task", msg); + assertSuccessful(); + } + + public void testAddTaskSettingLibraryEntry() throws CoreException { + AntCorePreferences prefs =AntCorePlugin.getPlugin().getPreferences(); + URL[] urls= prefs.getExtraClasspathURLs(); + Task newTask= new Task(); + newTask.setLibraryEntry(new AntClasspathEntry(urls[0])); + newTask.setTaskName("AntTestTask2"); + newTask.setClassName("org.eclipse.ant.tests.core.support.tasks.AntTestTask"); + prefs.setCustomTasks(new Task[]{newTask}); + + prefs.updatePluginPreferences(); + + run("CustomTask.xml", new String[] {"Custom Task from Entry"}, false); + String msg= (String)AntTestChecker.getDefault().getMessages().get(1); + assertEquals("Message incorrect: " + msg, "Testing Ant in Eclipse with a custom task", msg); + assertSuccessful(); + } + + public void testRemoveTask() { + AntCorePreferences prefs =AntCorePlugin.getPlugin().getPreferences(); + prefs.setCustomTasks(new Task[]{}); + try { + run("CustomTask.xml"); + } catch (CoreException ce) { + assertTrue("Exception from undefined task is incorrect", ce.getMessage().trim().endsWith("Action: Check that any <presetdef>/<macrodef> declarations have taken place.")); + return; + } finally { + restorePreferenceDefaults(); + } + assertTrue("Build should have failed as task no longer defined", false); + } + + public void testAddTaskFromFolder() throws CoreException { + try { + AntCorePreferences prefs =AntCorePlugin.getPlugin().getPreferences(); + Task newTask= new Task(); + String path= getProject().getFolder(ProjectHelper.LIB_FOLDER).getFile("taskFolder").getLocation().toFile().getAbsolutePath(); + IAntClasspathEntry entry= new AntClasspathEntry(path + File.separatorChar); + IAntClasspathEntry entries[] = prefs.getAdditionalClasspathEntries(); + IAntClasspathEntry newEntries[] = new IAntClasspathEntry[entries.length + 1]; + System.arraycopy(entries, 0, newEntries, 0, entries.length); + newEntries[entries.length] = entry; + prefs.setAdditionalClasspathEntries(newEntries); + + newTask.setLibraryEntry(entry); + newTask.setTaskName("AntTestTask"); + newTask.setClassName("org.eclipse.ant.tests.core.support.tasks.AntTestTask2"); + prefs.setCustomTasks(new Task[]{newTask}); + + prefs.updatePluginPreferences(); + + run("CustomTask.xml", new String[0], false); + String msg= (String)AntTestChecker.getDefault().getMessages().get(1); + assertEquals("Message incorrect: " + msg, "Testing Ant in Eclipse with a custom task", msg); + assertSuccessful(); + } finally { + restorePreferenceDefaults(); + } + } + + public void testTasksDefinedInPropertyFile() throws CoreException { + try { + AntCorePreferences prefs =AntCorePlugin.getPlugin().getPreferences(); + Property newProp= new Property("ROOTDIR", "..//resources"); + prefs.setCustomProperties(new Property[]{newProp}); + run("Bug34663.xml"); + } finally { + restorePreferenceDefaults(); + } + } + + public void testTaskDefinedInExtensionPoint() throws CoreException { + run("ExtensionPointTask.xml"); + String msg= (String)AntTestChecker.getDefault().getMessages().get(1); + assertEquals("Message incorrect: " + msg, "Testing Ant in Eclipse with a custom task", msg); + assertSuccessful(); + } + + public void testTaskDefinedInExtensionPointHeadless() { + AntCorePlugin.getPlugin().setRunningHeadless(true); + try { + run("ExtensionPointTask.xml"); + } catch (CoreException ce) { + assertTrue("Exception from undefined task is incorrect", ce.getMessage().trim().endsWith("Action: Check that any <presetdef>/<macrodef> declarations have taken place.")); + return; + } finally { + AntCorePlugin.getPlugin().setRunningHeadless(false); + } + assertTrue("Build should have failed as task was not defined to run in headless", false); + } + + public void testTaskDefinedInExtensionPointWithURI() throws CoreException { + run("ExtensionPointTask.xml"); + String msg= (String)AntTestChecker.getDefault().getMessages().get(2); + assertEquals("Message incorrect: " + msg, "Testing Ant in Eclipse with a custom task", msg); + assertSuccessful(); + } +}
\ No newline at end of file @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.core.tests; + + +import java.net.URL; + +import org.eclipse.ant.core.AntCorePlugin; +import org.eclipse.ant.core.AntCorePreferences; +import org.eclipse.ant.core.Type; +import org.eclipse.ant.internal.core.AntClasspathEntry; +import org.eclipse.ant.tests.core.AbstractAntTest; +import org.eclipse.ant.tests.core.testplugin.AntTestChecker; +import org.eclipse.core.runtime.CoreException; + +public class TypeTests extends AbstractAntTest { + + public TypeTests(String name) { + super(name); + } + + public void testAddType() throws CoreException { + AntCorePreferences prefs =AntCorePlugin.getPlugin().getPreferences(); + URL[] urls= prefs.getExtraClasspathURLs(); + Type newType= new Type(); + newType.setLibraryEntry(new AntClasspathEntry(urls[0])); + newType.setTypeName("anttestpath"); + newType.setClassName("org.eclipse.ant.tests.core.support.types.AntTestPath"); + prefs.setCustomTypes(new Type[]{newType}); + + run("CustomType.xml"); + String msg= (String)AntTestChecker.getDefault().getMessages().get(1); + assertEquals("Message incorrect: " + msg, "Test adding a custom type", msg); + assertSuccessful(); + } + + public void testRemoveType() { + AntCorePreferences prefs =AntCorePlugin.getPlugin().getPreferences(); + prefs.setCustomTypes(new Type[]{}); + try { + run("CustomType.xml"); + } catch (CoreException ce) { + assertTrue("Exception from undefined type is incorrect: "+ ce.getMessage(), ce.getMessage().trim().endsWith("Action: Check that any <presetdef>/<macrodef> declarations have taken place.")); + return; + } finally { + restorePreferenceDefaults(); + } + assertTrue("Build should have failed as type no longer defined", false); + + } + + public void testTypeDefinedInExtensionPoint() throws CoreException { + run("ExtensionPointType.xml"); + String msg= (String)AntTestChecker.getDefault().getMessages().get(1); + assertEquals("Message incorrect: " + msg, "Ensure that an extension point defined type is present", msg); + assertSuccessful(); + } + + public void testTypeDefinedInExtensionPointHeadless() { + AntCorePlugin.getPlugin().setRunningHeadless(true); + try { + run("ExtensionPointType.xml"); + } catch (CoreException ce) { + assertTrue("Exception from undefined type is incorrect: " + ce.getMessage(), ce.getMessage().trim().endsWith("Action: Check that any <presetdef>/<macrodef> declarations have taken place.")); + return; + } finally { + AntCorePlugin.getPlugin().setRunningHeadless(false); + } + assertTrue("Build should have failed as type was not defined to run in headless", false); + } +}
\ No newline at end of file diff --git a/ant/org.eclipse.ant.tests.ui/.classpath b/ant/org.eclipse.ant.tests.ui/.classpath new file mode 100644 index 000000000..3b2694c9a --- /dev/null +++ b/ ant/org.eclipse.ant.tests.ui/.classpath@@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="Ant Editor Tests"/> + <classpathentry kind="src" path="Ant Debug Tests"/> + <classpathentry kind="src" path="test plugin"/> + <classpathentry kind="src" path="Ant Tests"/> + <classpathentry kind="src" path="External Tools"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/> + <classpathentry kind="src" output="test_support_bin" path="test support"/> + <classpathentry kind="output" path="bin"/> +</classpath> @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> +<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS" value="clean,"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" name="workingSet" editPageId="org.eclipse.ui.resourceWorkingSetPage"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.tests.ui/buildfiles/buildAntTestsSupportJAR.xml" type="1"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.tests.ui/test support" type="2"/> </launchConfigurationWorkingSet> }"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean"/> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" name="workingSet" editPageId="org.eclipse.ui.resourceWorkingSetPage"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.tests.ui" type="4"/> </launchConfigurationWorkingSet> }"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.ant.tests.ui/buildfiles/buildAntTestsSupportJAR.xml}"/> +<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +</launchConfiguration> diff --git a/ant/org.eclipse.ant.tests.ui/.project b/ant/org.eclipse.ant.tests.ui/.project new file mode 100644 index 000000000..3c759b06f --- /dev/null +++ b/ ant/org.eclipse.ant.tests.ui/.project@@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.ant.tests.ui</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/Build Test Support JAR.launch</value> + </dictionary> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.pde.PluginNature</nature> + </natures> +</projectDescription> @@ -0,0 +1,3 @@ +#Thu May 27 14:48:38 PDT 2004
+eclipse.preferences.version=1
+selfhosting.binExcludes=/org.eclipse.ant.tests.ui/test_support_bin
@@ -0,0 +1,29 @@ +#Mon Dec 14 11:41:00 CST 2009
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.missing.output=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.illegal-att-value=0
+compilers.p.internal=1
+compilers.p.missing-packages=2
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=2
+compilers.p.missing-version-require-bundle=2
+compilers.p.no-required-att=0
+compilers.p.not-externalized-att=1
+compilers.p.unknown-attribute=0
+compilers.p.unknown-class=1
+compilers.p.unknown-element=0
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.p.unused-element-or-attribute=1
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+compilers.use-project=true
+eclipse.preferences.version=1
@@ -0,0 +1,217 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.debug; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.ant.internal.launching.debug.model.AntDebugTarget; +import org.eclipse.ant.internal.launching.debug.model.AntThread; +import org.eclipse.ant.launching.IAntLaunchConstants; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.core.model.IBreakpoint; +import org.eclipse.debug.core.model.ILineBreakpoint; + +/** + * Tests Ant breakpoints. + */ +public class BreakpointTests extends AbstractAntDebugTest { + + public BreakpointTests(String name) { + super(name); + } + + public void testDeferredBreakpoints() throws Exception { + deferredBreakpoints(false); + } + + public void testDeferredBreakpointsSepVM() throws Exception { + deferredBreakpoints(true); + } + + private void deferredBreakpoints(boolean sepVM) throws Exception, CoreException, DebugException { + String fileName = "breakpoints"; + IFile file= getIFile(fileName + ".xml"); + List bps = new ArrayList(); + bps.add(createLineBreakpoint(5, file)); + bps.add(createLineBreakpoint(14, file)); + AntThread thread= null; + try { + thread= launchToBreakpoint(fileName, true, sepVM); + assertNotNull("Breakpoint not hit within timeout period", thread); + while (!bps.isEmpty()) { + IBreakpoint hit = getBreakpoint(thread); + assertNotNull("suspended, but not by breakpoint", hit); + assertTrue("hit un-registered breakpoint", bps.contains(hit)); + assertTrue("suspended, but not by line breakpoint", hit instanceof ILineBreakpoint); + ILineBreakpoint breakpoint= (ILineBreakpoint) hit; + int lineNumber = breakpoint.getLineNumber(); + int stackLine = thread.getTopStackFrame().getLineNumber(); + assertEquals("line numbers of breakpoint and stack frame do not match", lineNumber, stackLine); + bps.remove(breakpoint); + breakpoint.delete(); + if (!bps.isEmpty()) { + if (sepVM) { + waitForTarget(); + } + thread = resume(thread); + } + } + } finally { + terminateAndRemove(thread); + removeAllBreakpoints(); + } + } + + public void testDisabledBreakpoint() throws Exception { + disabledBreakpoint(false); + } + + public void testDisabledBreakpointSepVM() throws Exception { + disabledBreakpoint(true); + } + + private void disabledBreakpoint(boolean separateVM) throws Exception, CoreException { + String fileName = "breakpoints"; + ILineBreakpoint bp = createLineBreakpoint(5, fileName + ".xml"); + bp.setEnabled(false); + AntDebugTarget debugTarget = null; + try { + debugTarget= launchAndTerminate(fileName, separateVM); + } finally { + terminateAndRemove(debugTarget); + removeAllBreakpoints(); + } + } + + public void testEnableDisableBreakpoint() throws Exception { + enableDisableBreapoint(false); + } + + public void testEnableDisableBreakpointSepVM() throws Exception { + enableDisableBreapoint(true); + } + + private void enableDisableBreapoint(boolean sepVM) throws Exception, CoreException { + + String fileName = "breakpoints"; + ILineBreakpoint bp = createLineBreakpoint(5, fileName + ".xml"); + bp.setEnabled(true); + AntThread thread = null; + try { + if (sepVM) { + fileName+= "SepVM"; + } + ILaunchConfiguration config= getLaunchConfiguration(fileName); + ILaunchConfigurationWorkingCopy copy= config.getWorkingCopy(); + copy.setAttribute(IAntLaunchConstants.ATTR_ANT_TARGETS, "entry1,entry2"); + thread= launchToLineBreakpoint(copy, bp); + bp.setEnabled(false); + if (sepVM) { + waitForTarget(); + } + resumeAndExit(thread); + } finally { + terminateAndRemove(thread); + removeAllBreakpoints(); + } + } + + private synchronized void waitForTarget() { + try { + //wait for the target to get updated for the new breakpoint state + wait(1000); + } catch (InterruptedException ie) { + } + } + + public void testSkipLineBreakpoint() throws Exception { + skipLineBreakpoint(false); + } + + public void testSkipLineBreakpointSepVM() throws Exception { + skipLineBreakpoint(true); + } + + private void skipLineBreakpoint(boolean sepVM) throws Exception { + String fileName = "breakpoints"; + IFile file= getIFile(fileName + ".xml"); + ILineBreakpoint bp = createLineBreakpoint(5, file); + createLineBreakpoint(15, file); + AntThread thread = null; + try { + if (sepVM) { + fileName+= "SepVM"; + } + thread= launchToLineBreakpoint(fileName, bp); + getBreakpointManager().setEnabled(false); + resumeAndExit(thread); + } finally { + terminateAndRemove(thread); + removeAllBreakpoints(); + getBreakpointManager().setEnabled(true); + } + } + + public void testBreakpoint() throws Exception { + breakpoints(false, "default", 5, 15); + } + + public void testBreakpointSepVM() throws Exception { + breakpoints(true, "default", 5, 15); + } + + public void testTargetBreakpoint() throws Exception { + breakpoints(false, "entry2", 4, 24); + } + + public void testTaskOutOfTargetBreakpoint() throws Exception { + breakpoints(false, "entry2", 36, 5); + } + + public void testTaskOutOfTargetBreakpointSepVm() throws Exception { + breakpoints(true, "entry2", 36, 5); + } + + public void testTargetBreakpointSepVM() throws Exception { + breakpoints(true, "entry2", 4, 24); + } + + private void breakpoints(boolean sepVM, String defaultTargetName, int firstLineNumber, int secondLineNumber) throws CoreException { + String fileName = "breakpoints"; + IFile file= getIFile(fileName + ".xml"); + ILineBreakpoint bp = createLineBreakpoint(firstLineNumber, file); + AntThread thread = null; + try { + if (sepVM) { + fileName+= "SepVM"; + } + ILaunchConfiguration config= getLaunchConfiguration(fileName); + ILaunchConfigurationWorkingCopy copy= config.getWorkingCopy(); + copy.setAttribute(IAntLaunchConstants.ATTR_ANT_TARGETS, defaultTargetName); + if (!sepVM) { + Thread.sleep(3000); //TODO bug 121207: wait for previous launch to fully terminate + } + thread= launchToLineBreakpoint(copy, bp); + bp= createLineBreakpoint(secondLineNumber, file); + resumeToLineBreakpoint(thread, bp); + } catch (InterruptedException e) { + + } finally { + terminateAndRemove(thread); + removeAllBreakpoints(); + } + } +} @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.debug; + +import org.eclipse.ant.tests.ui.testplugin.DebugEventWaiter; +import org.eclipse.debug.core.DebugEvent; + +/** + * Waits for an event on a specific element + */ + +public class DebugElementEventWaiter extends DebugEventWaiter { + + protected Object fElement; + + public DebugElementEventWaiter(int kind, Object element) { + super(kind); + fElement = element; + } + + public boolean accept(DebugEvent event) { + return super.accept(event) && fElement == event.getSource(); + } + +} @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.debug; + +import org.eclipse.ant.tests.ui.testplugin.DebugElementKindEventWaiter; +import org.eclipse.debug.core.DebugEvent; + +/** + * Wait for the specified event with the specified from the specified element. + */ +public class DebugElementKindEventDetailWaiter extends DebugElementKindEventWaiter { + + protected int fDetail; + + public DebugElementKindEventDetailWaiter(int eventKind, Class elementClass, int detail) { + super(eventKind, elementClass); + fDetail = detail; + } + + public boolean accept(DebugEvent event) { + return super.accept(event) && fDetail == event.getDetail(); + } + +} @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.debug; + +import org.eclipse.ant.internal.launching.debug.model.AntThread; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.model.ILineBreakpoint; +import org.eclipse.debug.core.model.IStackFrame; + +public class StackTests extends AbstractAntDebugTest { + + public StackTests(String name) { + super(name); + } + + public void testStackForAntCall() throws Exception { + antCallStack(false); + } + + public void testStackForAntCallVM() throws Exception { + antCallStack(true); + } + + private void antCallStack(boolean sepVM) throws CoreException { + String fileName = "85769"; + IFile file= getIFile(fileName + ".xml"); + ILineBreakpoint bp = createLineBreakpoint(18, file); + AntThread thread = null; + try { + if (sepVM) { + fileName+= "SepVM"; + } + thread= launchToLineBreakpoint(fileName, bp); + + + IStackFrame[] frames= thread.getStackFrames(); + + assertTrue(frames.length == 3); + IStackFrame frame = frames[0]; + frame.getName().equals(""); + } finally { + terminateAndRemove(thread); + removeAllBreakpoints(); + } + } +} @@ -0,0 +1,234 @@ +/******************************************************************************* + * Copyright (c) 2005, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.debug; + +import org.eclipse.ant.internal.launching.debug.model.AntStackFrame; +import org.eclipse.ant.internal.launching.debug.model.AntThread; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.model.ILineBreakpoint; +import org.eclipse.debug.core.model.IStackFrame; + +public class SteppingTests extends AbstractAntDebugTest { + + public SteppingTests(String name) { + super(name); + } + + /** + * bug 84400 + */ + public void testStepBackFromAntCall() throws Exception { + antCallStack(false, 12, DebugEvent.STEP_OVER, "default: echo", 7); + } + + /** + * bug 84400 + */ + public void testStepBackFromAntCallSepVM() throws Exception { + antCallStack(true, 12, DebugEvent.STEP_OVER, "default: echo", 7); + } + + /** + * bug 88218, 85769 + */ + public void testStepIntoAntCall() throws Exception { + AntThread thread= null; + try { + thread= antCallStack(false, 5, DebugEvent.STEP_INTO, "pre-call: echo", 16, false); + IStackFrame[] frames= thread.getStackFrames(); + assertFrame("call", 10, (AntStackFrame)frames[1]); + } finally { + terminateAndRemove(thread); + removeAllBreakpoints(); + } + } + + /** + * bug 88218, 85769 + */ + public void testStepIntoAntCallSepVM() throws Exception { + AntThread thread= null; + try { + thread= antCallStack(true, 5, DebugEvent.STEP_INTO, "pre-call: echo", 16, false); + IStackFrame[] frames= thread.getStackFrames(); + assertFrame("call", 10, (AntStackFrame)frames[1]); + } finally { + terminateAndRemove(thread); + removeAllBreakpoints(); + } + } + + public void testStepOverAntCall() throws Exception { + antCallStack(false, 5, DebugEvent.STEP_OVER, "default: echo", 7); + } + + public void testStepOverAntCallSepVM() throws Exception { + antCallStack(true, 5, DebugEvent.STEP_OVER, "default: echo", 7); + } + + /** + * bug 96022 + */ + public void testStepOverAntCallPastOtherAntCalls() throws Exception { + debugStack(false, 7, DebugEvent.STEP_OVER, "default: echo", 9, "96022", true); + } + /** + * bug 96022 + */ + public void testStepOverAntCallPastOtherAntCallsSepVm() throws Exception { + debugStack(true, 7, DebugEvent.STEP_OVER, "default: echo", 9, "96022", true); + } + + public void testStepOverAntCallHitBreakpoint() throws Exception { + String fileName = "debugAntCall"; + createLineBreakpoint(12, fileName + ".xml"); + antCallStack(false, 5, DebugEvent.BREAKPOINT, "call: sleep", 12); + } + + public void testStepOverAntCallHitBreakpointSepVM() throws Exception { + String fileName = "debugAntCall"; + createLineBreakpoint(12, fileName + ".xml"); + antCallStack(true, 5, DebugEvent.BREAKPOINT, "call: sleep", 12); + } + + private AntThread antCallStack(boolean sepVM, int lineNumber, int kind, String frameName, int frameLineNumber) throws CoreException { + return antCallStack(sepVM, lineNumber, kind, frameName, frameLineNumber, true); + } + + private AntThread antCallStack(boolean sepVM, int lineNumber, int kind, String frameName, int frameLineNumber, boolean terminate) throws CoreException { + String fileName = "debugAntCall"; + return debugStack(sepVM, lineNumber, kind, frameName, frameLineNumber, fileName, terminate); + } + + private AntThread debugStack(boolean sepVM, int lineNumber, int kind, String frameName, int frameLineNumber, String fileName, boolean terminate) throws CoreException, DebugException { + ILineBreakpoint bp = createLineBreakpoint(lineNumber, fileName + ".xml"); + AntThread thread= null; + try { + if (sepVM) { + fileName+="SepVM"; + } + ILaunchConfiguration config= getLaunchConfiguration(fileName); + thread= launchToLineBreakpoint(config, bp); + debugFrame(kind, frameName, frameLineNumber, thread); + return thread; + } finally { + if (terminate) { + terminateAndRemove(thread); + removeAllBreakpoints(); + } + } + } + + private void debugFrame(int kind, String frameName, int frameLineNumber, AntThread thread) throws DebugException { + AntStackFrame frame = (AntStackFrame)thread.getTopStackFrame(); + assertNotNull(frame); + switch (kind) { + case DebugEvent.BREAKPOINT: + stepOverToHitBreakpoint(frame); + break; + case DebugEvent.STEP_OVER: + stepOver(frame); + break; + case DebugEvent.STEP_INTO: + stepInto(frame); + break; + } + assertFrame(thread, frameName, frameLineNumber); + } + + private AntStackFrame assertFrame(AntThread thread, String frameName, int lineNumber) throws DebugException { + AntStackFrame frame = (AntStackFrame)thread.getTopStackFrame(); + return assertFrame(frameName, lineNumber, frame); + } + + private AntStackFrame assertFrame(String frameName, int lineNumber, AntStackFrame frame) { + String actualFrameName= frame.getName(); + int actualLineNumber= frame.getLineNumber(); + assertTrue("Name of stack frame incorrect. Expected " + frameName + " was: " + actualFrameName, frameName.equals(actualFrameName)); + assertTrue("Line number of stack frame incorrect. Expected " + lineNumber + " was: " + actualLineNumber, lineNumber == actualLineNumber); + return frame; + } + + /** + * bug 85309 + * @throws CoreException + */ + public void testStepOutOfMacrodef() throws CoreException { + String fileName = "macrodef"; + debugStack(false, 8 , DebugEvent.STEP_OVER, "type: eclipseMacro", 16, fileName, true); + } + + /** + * bug 85309 + * @throws CoreException + */ + public void testStepOutOfMacrodefSepVM() throws CoreException { + String fileName = "macrodef"; + debugStack(true, 8 , DebugEvent.STEP_OVER, "type: eclipseMacro", 16, fileName, true); + } + + /** + * bug 94769 + * @throws CoreException + */ + public void testStepIntoMacrodef() throws CoreException { + testMacroDef(false); + } + + /** + * bug 94769 + * @throws CoreException + */ + public void testStepIntoMacrodefSepVM() throws CoreException { + testMacroDef(true); + } + + private void testMacroDef(boolean sepVM) throws CoreException, DebugException { + AntThread thread= null; + try { + String fileName = "macrodef"; + thread= debugStack(sepVM, 16 , DebugEvent.STEP_INTO, "type: sequential", 0, fileName, false); + debugFrame(DebugEvent.STEP_INTO, "type: echo", 8, thread); + debugFrame(DebugEvent.STEP_OVER, "type: eclipseMacro", 17, thread); + } finally { + terminateAndRemove(thread); + removeAllBreakpoints(); + } + } + +// public void testStepBackFromAnt() throws Exception { +// antCallStack(false); +// } +// +// public void testStepBackFromAntSepVM() throws Exception { +// antCallStack(false); +// } +// +// +// public void testStepIntoAnt() throws Exception { +// antCallStack(false); +// } +// +// public void testStepIntoAntSepVM() throws Exception { +// antCallStack(false); +// } +// +// public void testStepOverAnt() throws Exception { +// antCallStack(false); +// } +// +// public void testStepOverAntSepVM() throws Exception { +// antCallStack(false); +// } +} @@ -0,0 +1,147 @@ +/******************************************************************************* + * Copyright (c) 2002, 2005 Object Factory Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Object Factory Inc. - Initial implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.dtd; + +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Map; + +import org.eclipse.ant.internal.ui.dtd.IDfm; +import org.eclipse.ant.internal.ui.dtd.IElement; +import org.eclipse.ant.internal.ui.dtd.IModel; +import org.eclipse.ant.internal.ui.dtd.ISchema; +import org.eclipse.ant.internal.ui.dtd.ParseError; +import org.eclipse.ant.internal.ui.dtd.Parser; + +/** + * This class is intended to be used from the command line (hence the + * uncapitalized class name). + * @author Bob Foster + */ +public class dumper { + + public static int main(String[] args) { + + if (args.length <= 0) { + System.out.println("Usage: java DTDMerger URL"); + return 0; + } + String document = args[0]; + + Parser parser = new Parser(); + + ISchema schema; + try { + schema = parser.parse(document); + } catch (ParseError e) { + System.out.println(e.getMessage()); + e.printStackTrace(); + return 1; + } catch (IOException e) { + e.printStackTrace(); + return 1; + } + System.out.println("DTD successfully parsed"); + dumpSchema(schema); + return 0; + } + + /** + * Write schema contents to standard output. + */ + private static void dumpSchema(ISchema schema) { + IElement[] elements = schema.getElements(); + System.out.println(""+elements.length+" elements defined"); + for (int i = 0; i < elements.length; i++) { + IElement element = elements[i]; + IModel model = element.getContentModel(); + System.out.println("ELEMENT "+element.getName() + +'"'+model.stringRep()+'"'); + dumpDfm(element.getDfm()); + } + } + + /** + * Dump dfm as a series of states. + * <pre> + * S0 a=>S1 b=>S2 + * S1 c=>S2 + * S2* d=>S2 + * </pre> + * Where * indicates accepting state. + * @param dfm to dump + */ + private static void dumpDfm(IDfm dfm) { + HashMap map = new HashMap(); + dumpDfm(dfm, map, 0); + LinkedList list = new LinkedList(); + Iterator it = map.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = (Map.Entry) it.next(); + list.add(new State((IDfm)entry.getKey(), (Integer)entry.getValue())); + } + State[] states = (State[]) list.toArray(new State[list.size()]); + Arrays.sort(states); + for (int i = 0; i < states.length; i++) { + print(states[i], map); + } + } + + private static void print(State state, HashMap map) { + System.out.print(" S"+state.n.intValue() + +(state.dfm.isAccepting() ? "* " : " ")); + String[] accepts = state.dfm.getAccepts(); + for (int i = 0; i < accepts.length; i++) { + String accept = accepts[i]; + IDfm next = state.dfm.advance(accept); + int n = ((Integer)map.get(next)).intValue(); + System.out.print(" "+accept+"=>S"+n); + } + System.out.println(); + } + + private static int dumpDfm(IDfm dfm, HashMap map, int num) { + if (!map.containsKey(dfm)) { + map.put(dfm, new Integer(num++)); + String[] accepts = dfm.getAccepts(); + for (int i = 0; i < accepts.length; i++) { + IDfm next = dfm.advance(accepts[i]); + num = dumpDfm(next, map, num); + } + } + return num; + } + + private static class State implements Comparable { + public IDfm dfm; + public Integer n; + public State(IDfm dfm, Integer n) { + this.dfm = dfm; + this.n = n; + } + /** + * @see java.lang.Comparable#compareTo(java.lang.Object) + */ + public int compareTo(Object o) { + State other = (State) o; + return n.intValue() < other.n.intValue() + ? -1 + : (n.intValue() == other.n.intValue() + ? 0 + : 1); + } + + } +} @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2002, 2005 GEBIT Gesellschaft fuer EDV-Beratung + * und Informatik-Technologien mbH, + * Berlin, Duesseldorf, Frankfurt (Germany). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * GEBIT Gesellschaft fuer EDV-Beratung und Informatik-Technologien mbH - initial implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.editor; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; +import org.eclipse.ant.internal.ui.editor.TaskDescriptionProvider; + +/** + * Tests the tasks description provider. + * + */ +public class TaskDescriptionProviderTest extends AbstractAntUITest { + + public TaskDescriptionProviderTest(String name) { + super(name); + } + + /** + * Tests getting the description of a task. + */ + public void testGettingTaskDescription() { + TaskDescriptionProvider provider = TaskDescriptionProvider.getDefault(); + String description = provider.getDescriptionForTask("apply"); + assertNotNull(description); + assertTrue(description.length() > 0); + } + + /** + * Tests getting the description of an attribute. + */ + public void testGettingAttribute() { + TaskDescriptionProvider provider = TaskDescriptionProvider.getDefault(); + String description = provider.getDescriptionForTaskAttribute("apply", "executable"); + assertNotNull(description); + assertTrue(description.length() > 0); + } + + /** + * Tests getting the required value of an attribute. + */ + public void testGettingRequired() { + TaskDescriptionProvider provider = TaskDescriptionProvider.getDefault(); + String required = provider.getRequiredAttributeForTaskAttribute("apply", "executable"); + assertNotNull(required); + assertEquals("yes", required); + } + + public static Test suite() { + return new TestSuite(TaskDescriptionProviderTest.class); + } +} @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2004, 2005 John-Mason P. Shackelford and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * John-Mason P. Shackelford - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.editor.formatter; + +import org.eclipse.ant.internal.ui.editor.formatter.FormattingPreferences; +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; + +public class FormattingPreferencesTest extends AbstractAntUITest { + + public FormattingPreferencesTest(String name) { + super(name); + } + + public final void testGetCanonicalIndent() { + + FormattingPreferences prefs; + + // test spaces + prefs = new FormattingPreferences(){ + public int getTabWidth() { + return 3; + } + public boolean useSpacesInsteadOfTabs() { + return true; + } + }; + assertEquals(" ",prefs.getCanonicalIndent()); + + // ensure the value is not hard coded + prefs = new FormattingPreferences(){ + public int getTabWidth() { + return 7; + } + public boolean useSpacesInsteadOfTabs() { + return true; + } + }; + assertEquals(" ",prefs.getCanonicalIndent()); + + // use tab character + prefs = new FormattingPreferences(){ + public int getTabWidth() { + return 7; + } + public boolean useSpacesInsteadOfTabs() { + return false; + } + }; + assertEquals("\t",prefs.getCanonicalIndent()); + } +} @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2004, 2005 John-Mason P. Shackelford and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * John-Mason P. Shackelford - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.editor.formatter; + +import org.eclipse.ant.internal.ui.editor.formatter.FormattingPreferences; +import org.eclipse.ant.internal.ui.editor.formatter.XmlDocumentFormatter; +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; + +public class XmlDocumentFormatterTest extends AbstractAntUITest { + + public XmlDocumentFormatterTest(String name) { + super(name); + } + + /** + * General Test + */ + public final void testGeneralFormat() throws Exception { + FormattingPreferences prefs = new FormattingPreferences(){ + public int getTabWidth() { + return 3; + } + public boolean useSpacesInsteadOfTabs() { + return true; + } + }; + simpleTest("formatTest_source01.xml","formatTest_target01.xml",prefs); + } + + /** + * Insure that tab width is not hard coded + */ + public final void testTabWidth() throws Exception { + FormattingPreferences prefs = new FormattingPreferences(){ + public int getTabWidth() { + return 7; + } + public boolean useSpacesInsteadOfTabs() { + return true; + } + }; + simpleTest("formatTest_source01.xml","formatTest_target02.xml",prefs); + } + + + /** + * Test with tab characters instead of spaces. + */ + public final void testTabsInsteadOfSpaces() throws Exception { + FormattingPreferences prefs = new FormattingPreferences(){ + public int getTabWidth() { + return 3; + } + public boolean useSpacesInsteadOfTabs() { + return false; + } + }; + simpleTest("formatTest_source01.xml","formatTest_target03.xml",prefs); + } + + /** + * @param sourceFileName - file to format + * @param targetFileName - the source file after a properly executed format + * @param prefs - given the included preference instructions + * @throws Exception + */ + private void simpleTest(String sourceFileName, String targetFileName, FormattingPreferences prefs) throws Exception { + + XmlDocumentFormatter xmlFormatter = new XmlDocumentFormatter(); + xmlFormatter.setDefaultLineDelimiter(System.getProperty("line.separator")); + String result = xmlFormatter.format(getFileContentAsString(getBuildFile(sourceFileName)),prefs); + String expectedResult = getFileContentAsString(getBuildFile(targetFileName)); + + assertEquals(expectedResult, result); + } +}
\ No newline at end of file @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2004, 2005 John-Mason P. Shackelford and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * John-Mason P. Shackelford - initial API and implementation + * IBM Corporation - bug 84342 + *******************************************************************************/ +package org.eclipse.ant.tests.ui.editor.formatter; + +import junit.framework.TestCase; + +import org.eclipse.ant.internal.ui.AntUIPlugin; +import org.eclipse.ant.internal.ui.editor.formatter.FormattingPreferences; +import org.eclipse.ant.internal.ui.editor.formatter.XmlFormatter; +import org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants; +import org.eclipse.core.runtime.Preferences; + +public class XmlFormatterTest extends TestCase { + + public final void testFormatUsingPreferenceStore() { + Preferences prefs = AntUIPlugin.getDefault().getPluginPreferences(); + prefs.setValue(AntEditorPreferenceConstants.FORMATTER_WRAP_LONG, true); + prefs.setValue(AntEditorPreferenceConstants.FORMATTER_MAX_LINE_LENGTH, 40); + prefs.setValue(AntEditorPreferenceConstants.FORMATTER_ALIGN, false); + prefs.setValue(AntEditorPreferenceConstants.FORMATTER_TAB_CHAR, true); + prefs.setValue(AntEditorPreferenceConstants.FORMATTER_TAB_SIZE, 4); + String lineSep= System.getProperty("line.separator"); + String xmlDoc = "<project default=\"go\"><target name=\"go\" description=\"Demonstrate the wrapping of long tags.\"><echo>hi</echo></target></project>"; + String formattedDoc = XmlFormatter.format(xmlDoc); + String expected = "<project default=\"go\">" + lineSep + "\t<target name=\"go\"" + lineSep + "\t description=\"Demonstrate the wrapping of long tags.\">" + lineSep + "\t\t<echo>hi</echo>" + lineSep + "\t</target>" + lineSep + "</project>"; + assertEquals(expected, formattedDoc); + } + + public final void testFormatWithPreferenceParameter() { + FormattingPreferences prefs = new FormattingPreferences() { + public boolean wrapLongTags() { return true;} + public int getMaximumLineWidth() { return 40;} + public boolean alignElementCloseChar() { return false;} + public boolean useSpacesInsteadOfTabs() { return true;} + public int getTabWidth() { return 6;} + }; + String lineSep= System.getProperty("line.separator"); + String xmlDoc = "<project default=\"go\"><target name=\"go\" description=\"Demonstrate the wrapping of long tags.\"><echo>hi</echo></target></project>"; + String formattedDoc = XmlFormatter.format(xmlDoc, prefs); + String expected = "<project default=\"go\">" + lineSep + " <target name=\"go\"" + lineSep + " description=\"Demonstrate the wrapping of long tags.\">" + lineSep + " <echo>hi</echo>" + lineSep + " </target>" + lineSep + "</project>"; + assertEquals(expected, formattedDoc); + } + + /** + * Bug 84342 + */ + public final void testFormatMaintainingLineSeparators() { + FormattingPreferences prefs = new FormattingPreferences() { + public boolean wrapLongTags() { return true;} + public int getMaximumLineWidth() { return 40;} + public boolean alignElementCloseChar() { return false;} + public boolean useSpacesInsteadOfTabs() { return true;} + public int getTabWidth() { return 6;} + }; + String lineSep= System.getProperty("line.separator"); + String xmlDoc = "<project default=\"go\"><target name=\"go\" description=\"Demonstrate the wrapping of long tags.\"><echo>hi</echo></target>" + lineSep + lineSep + "</project>"; + String formattedDoc = XmlFormatter.format(xmlDoc, prefs); + String expected = "<project default=\"go\">" + lineSep + " <target name=\"go\"" + lineSep + " description=\"Demonstrate the wrapping of long tags.\">" + lineSep + " <echo>hi</echo>" + lineSep + " </target>" + lineSep + lineSep + "</project>"; + assertEquals(expected, formattedDoc); + } + +} @@ -0,0 +1,378 @@ +/******************************************************************************* + * Copyright (c) 2004, 2005 John-Mason P. Shackelford and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * John-Mason P. Shackelford - initial API and implementation + * IBM Corporation - Bug 84342 + *******************************************************************************/ +package org.eclipse.ant.tests.ui.editor.formatter; + +import java.util.List; + +import org.eclipse.ant.internal.ui.editor.formatter.XmlTagFormatter; +import org.eclipse.ant.internal.ui.editor.formatter.FormattingPreferences; +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; + +public class XmlTagFormatterTest extends AbstractAntUITest { + + // TODO This test is too low level and too tightly coupled to internals. + + /* ---------------- Test Fixture ---------------- */ + // In case anyone wonders why many people recommend against testing + // privates, I produce this example... + private static class InnerClassFactory extends XmlTagFormatter { + + public static class ParseException extends XmlTagFormatter.ParseException { + + private static final long serialVersionUID = 1L; + + public ParseException(String message) { + super(message); + } + } + + public static class Tag extends XmlTagFormatter.Tag { + } + + public static class TagFormatter extends XmlTagFormatter.TagFormatter { + + public boolean lineRequiresWrap(String line, int lineWidth, + int tabWidth) { + return super.lineRequiresWrap(line, lineWidth, tabWidth); + } + + public int tabExpandedLineWidth(String line, int tabWidth) { + return super.tabExpandedLineWidth(line, tabWidth); + } + + public String wrapTag(Tag tag, FormattingPreferences prefs, + String indent, String lineDelimiter) { + return super.wrapTag(tag, prefs, indent, lineDelimiter); + } + } + + public static class TagParser extends XmlTagFormatter.TagParser { + + public String getElementName(String tagText) + throws XmlTagFormatter.ParseException { + return super.getElementName(tagText); + } + + public List getAttibutes(String elementText) + throws XmlTagFormatter.ParseException { + return super.getAttibutes(elementText); + } + } + + public static Tag createTag() { + return new Tag(); + } + + public static TagFormatter createTagFormatter() { + return new TagFormatter(); + } + + public static TagParser createTagParser() { + return new TagParser(); + } + + public static void validateAttributePair(Object attributePair, String attribute, String value) { + XmlTagFormatter.AttributePair pair = (XmlTagFormatter.AttributePair) attributePair; + assertEquals(attribute, pair.getAttribute()); + assertEquals(value, pair.getValue()); + } + } + + public XmlTagFormatterTest(String name) { + super(name); + } + + private FormattingPreferences getPreferences(final boolean wrapLongTags, + final boolean alignCloseChar, final int maxLineWidth) { + + return new FormattingPreferences() { + + public boolean alignElementCloseChar() { + return alignCloseChar; + } + + public boolean wrapLongTags() { + return wrapLongTags; + } + + public int getMaximumLineWidth() { + return maxLineWidth; + } + }; + } + + private void simpleTest(String source, String target, + FormattingPreferences prefs, String indent, String lineDelimiter) throws Exception { + + String result = XmlTagFormatter.format(source, prefs, indent, lineDelimiter); + assertEquals(target, result); + } + + /* ---------------- Test Methods ---------------- */ + + public void testParserGetElementName() throws Exception { + + InnerClassFactory.TagParser tagParser = InnerClassFactory + .createTagParser(); + + String elementFixture1 = "<myElement attribute1=\"value1\" attribute2=\"value2\" />"; //$NON-NLS-1$ + assertEquals("myElement", tagParser.getElementName(elementFixture1)); //$NON-NLS-1$ + + String elementFixture2 = "<myElement\t\nattribute1=\"value1\" attribute2=\"value2\" />"; //$NON-NLS-1$ + assertEquals("myElement", tagParser.getElementName(elementFixture2)); //$NON-NLS-1$ + + assertEquals("x", tagParser.getElementName("<x/>")); //$NON-NLS-1$ //$NON-NLS-2$ + assertEquals("x", tagParser.getElementName("<x>")); //$NON-NLS-1$ //$NON-NLS-2$ + assertEquals("x:y", tagParser.getElementName("<x:y/>")); //$NON-NLS-1$ //$NON-NLS-2$ + assertEquals("x:y", tagParser.getElementName("<x:y abc/>")); //$NON-NLS-1$ //$NON-NLS-2$ + + Exception e1 = null; + try { + tagParser.getElementName("<>"); //$NON-NLS-1$ + } catch (Exception e) { + e1 = e; + } + assertNotNull(e1); + assertTrue(e1.getClass().isAssignableFrom( + InnerClassFactory.ParseException.class)); + + Exception e2 = null; + try { + tagParser.getElementName("<>"); //$NON-NLS-1$ + } catch (Exception e) { + e2 = e; + } + assertNotNull(e2); + assertTrue(e2.getClass().isAssignableFrom( + InnerClassFactory.ParseException.class)); + + } + + public void testParserGetAttributes() throws Exception { + InnerClassFactory.TagParser tagParser = InnerClassFactory + .createTagParser(); + + List attributePairs; + + // test normal situation + attributePairs = tagParser + .getAttibutes("<myElement attribute1=\"value1\" attribute2=\"value2\" />"); //$NON-NLS-1$ + + assertEquals(2, attributePairs.size()); + InnerClassFactory.validateAttributePair(attributePairs.get(0), + "attribute1", "value1"); //$NON-NLS-1$ //$NON-NLS-2$ + InnerClassFactory.validateAttributePair(attributePairs.get(1), + "attribute2", "value2"); //$NON-NLS-1$ //$NON-NLS-2$ + + + // test with extra whitespace and funny quotes + attributePairs = tagParser + .getAttibutes("<myElement \nattribute1 = 'value1\"'\nattribute2\t=\"value2'\" />"); //$NON-NLS-1$ + + assertEquals(2, attributePairs.size()); + InnerClassFactory.validateAttributePair(attributePairs.get(0), + "attribute1", "value1\""); //$NON-NLS-1$ //$NON-NLS-2$ + InnerClassFactory.validateAttributePair(attributePairs.get(1), + "attribute2", "value2'"); //$NON-NLS-1$ //$NON-NLS-2$ + +// TODO attributes which contain whitespace should throw a parse error +// +// // test parse errors - whitespace in attribute name +// Exception e1 = null; +// try { +// attributePairs = tagParser +// .getAttibutes("<myElement at tribute1 = \"value1\" attribute2=\"value2\" />"); +// } catch (Exception e) { +// e1 = e; +// } +// assertNotNull(e1); +// assertTrue(e1.getClass().isAssignableFrom( +// InnerClassFactory.ParseException.class)); + + + // test parse errors - equals in the wrong place + Exception e2 = null; + try { + attributePairs = tagParser + .getAttibutes("<myElement attribute1=\"value1\" = attribute2=\"value2\" />"); //$NON-NLS-1$ + } catch (Exception e) { + e2 = e; + } + assertNotNull(e2); + assertTrue(e2.getClass().isAssignableFrom( + InnerClassFactory.ParseException.class)); + + + // test parse errors - quotes in the wrong place + Exception e3 = null; + try { + attributePairs = tagParser + .getAttibutes("<myElement attribute1=\"\"value1\" attribute2=\"value2\" />"); //$NON-NLS-1$ + } catch (Exception e) { + e3 = e; + } + assertNotNull(e3); + assertTrue(e3.getClass().isAssignableFrom(InnerClassFactory.ParseException.class)); + } + + public void testFormat01() throws Exception { + String lineSep= System.getProperty("line.separator"); + String indent = "\t"; //$NON-NLS-1$ + String source = "<target name=\"myTargetName\" depends=\"a,b,c,d,e,f,g\" description=\"This is a very long element which ought to be wrapped.\">"; //$NON-NLS-1$ + String target = "<target name=\"myTargetName\"" + lineSep //$NON-NLS-1$ + + indent + + " depends=\"a,b,c,d,e,f,g\"" + lineSep //$NON-NLS-1$ + + indent + + " description=\"This is a very long element which ought to be wrapped.\">"; //$NON-NLS-1$ + + simpleTest(source, target, getPreferences(true, false, 60), indent, lineSep); + } + + public void testFormat02() throws Exception { + String lineSep= System.getProperty("line.separator"); + String indent = "\t"; //$NON-NLS-1$ + String source = "<target name=\"myTargetName\" depends=\"a,b,c,d,e,f,g\" description=\"This is a very long element which ought to be wrapped.\">"; //$NON-NLS-1$ + String target = "<target name=\"myTargetName\"" + lineSep //$NON-NLS-1$ + + indent + + " depends=\"a,b,c,d,e,f,g\"" + lineSep //$NON-NLS-1$ + + indent + + " description=\"This is a very long element which ought to be wrapped.\"" + lineSep //$NON-NLS-1$ + + indent + ">"; //$NON-NLS-1$ + + simpleTest(source, target, getPreferences(true, true, 60), indent, lineSep); + } + + public void testBug73411() throws Exception { + String lineSep= System.getProperty("line.separator"); + String indent = "\t"; //$NON-NLS-1$ + String source = "<target name='myTargetName' depends=\"a,b,c,d,e,f,g\" description=\'This is a very long element which ought to be \"wrapped\".'>"; //$NON-NLS-1$ + String target = "<target name='myTargetName'" + lineSep //$NON-NLS-1$ + + indent + + " depends=\"a,b,c,d,e,f,g\"" + lineSep //$NON-NLS-1$ + + indent + + " description='This is a very long element which ought to be \"wrapped\".'" + lineSep //$NON-NLS-1$ + + indent + ">"; //$NON-NLS-1$ + + simpleTest(source, target, getPreferences(true, true, 60), indent, lineSep); + } + + public void testLineRequiresWrap() throws Exception { + + InnerClassFactory.TagFormatter tagFormatter = InnerClassFactory.createTagFormatter(); + + boolean shouldWrap = tagFormatter.lineRequiresWrap( + "\t\t <myElement attribute1=\"value1\" attribute2=\"value2\" />", //$NON-NLS-1$ + 70, 8); + boolean shouldNotWrap = tagFormatter.lineRequiresWrap( + "\t\t <myElement attribute1=\"value1\" attribute2=\"value2\" />", //$NON-NLS-1$ + 70, 8); + assertTrue(shouldWrap); + assertTrue(!shouldNotWrap); + + } + + public void testTabExpandedLineWidth() throws Exception { + + InnerClassFactory.TagFormatter tagFormatter = InnerClassFactory.createTagFormatter(); + + assertEquals(20, tagFormatter.tabExpandedLineWidth("\t 1234567890", 8)); //$NON-NLS-1$ + assertEquals(10, tagFormatter.tabExpandedLineWidth("1234567890", 8)); //$NON-NLS-1$ + assertEquals(19, tagFormatter.tabExpandedLineWidth("\t1\t2 34567890", 3)); //$NON-NLS-1$ + } + + public void testTabToStringAndMinimumLength() throws Exception { + InnerClassFactory.Tag tag = InnerClassFactory.createTag(); + + tag.setElementName("myElement"); //$NON-NLS-1$ + tag.setClosed(false); + assertEquals("<myElement>", tag.toString()); //$NON-NLS-1$ + assertEquals(tag.toString().length(), tag.minimumLength()); + + tag.setClosed(true); + assertEquals("<myElement />", tag.toString()); //$NON-NLS-1$ + assertEquals(tag.toString().length(), tag.minimumLength()); + + tag.addAttribute("attribute1", "value1", '"'); //$NON-NLS-1$ //$NON-NLS-2$ + tag.addAttribute("attribute2", "value2", '"'); //$NON-NLS-1$ //$NON-NLS-2$ + assertEquals( + "<myElement attribute1=\"value1\" attribute2=\"value2\" />", //$NON-NLS-1$ + tag.toString()); + assertEquals(tag.toString().length(), tag.minimumLength()); + + tag.setClosed(false); + assertEquals("<myElement attribute1=\"value1\" attribute2=\"value2\">", //$NON-NLS-1$ + tag.toString()); + assertEquals(tag.toString().length(), tag.minimumLength()); + } + + public void testWrapTag() throws Exception { + + InnerClassFactory.Tag tag = InnerClassFactory.createTag(); + + InnerClassFactory.TagFormatter tagFormatter = InnerClassFactory + .createTagFormatter(); + + FormattingPreferences dontAlignCloseChar = new FormattingPreferences() { + + public boolean alignElementCloseChar() { + return false; + } + }; + FormattingPreferences doAlignCloseChar = new FormattingPreferences() { + + public boolean alignElementCloseChar() { + return true; + } + }; + + tag.setElementName("myElement"); //$NON-NLS-1$ + tag.addAttribute("attribute1", "value1", '"'); //$NON-NLS-1$ //$NON-NLS-2$ + tag.addAttribute("attribute2", "value2", '"'); //$NON-NLS-1$ //$NON-NLS-2$ + + tag.setClosed(true); + + String lineSep= System.getProperty("line.separator"); + assertEquals("<myElement attribute1=\"value1\"" + lineSep //$NON-NLS-1$ + + "\t\t attribute2=\"value2\" />", tagFormatter //$NON-NLS-1$ + .wrapTag(tag, dontAlignCloseChar, "\t\t ", lineSep)); //$NON-NLS-1$ + + assertEquals("<myElement attribute1=\"value1\"" + lineSep //$NON-NLS-1$ + + "\t\t attribute2=\"value2\"" + lineSep + "\t\t />", //$NON-NLS-1$ + tagFormatter.wrapTag(tag, doAlignCloseChar, "\t\t ", lineSep)); //$NON-NLS-1$ + + tag.setClosed(false); + + assertEquals("<myElement attribute1=\"value1\"" + lineSep //$NON-NLS-1$ + + "\t\t attribute2=\"value2\">", tagFormatter //$NON-NLS-1$ + .wrapTag(tag, dontAlignCloseChar, "\t\t ", lineSep)); //$NON-NLS-1$ + + assertEquals("<myElement attribute1=\"value1\"" + lineSep //$NON-NLS-1$ + + "\t\t attribute2=\"value2\"" + lineSep + "\t\t >", //$NON-NLS-1$ + tagFormatter.wrapTag(tag, doAlignCloseChar, "\t\t ", lineSep)); //$NON-NLS-1$ + + } + + public void testBug63558() throws Exception { + + // Ordinarily the double space after the element name would be repaired + // but if the formatter is working correctly these examples will be + // considered malformed and will be passed through untouched. + String lineSep= System.getProperty("line.separator"); + String source1 = "<echo file=\"foo\">" + lineSep + "<html><body><pre>" //$NON-NLS-1$ + + "${compilelog}</pre></body></html>"; //$NON-NLS-1$ + FormattingPreferences prefs = getPreferences(true, false, 60); //$NON-NLS-1$ + simpleTest(source1, source1, prefs, "\t", lineSep); + + String source2 = "<echo file=\"foo\"/bar/baz></echo>"; //$NON-NLS-1$ + simpleTest(source2, source2, prefs, "\t", lineSep); + } +} @@ -0,0 +1,148 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.editor.performance; + + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.jobs.IJobManager; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.jface.text.IDocument; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IEditorInput; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.ide.IDE; +import org.eclipse.ui.texteditor.IDocumentProvider; +import org.eclipse.ui.texteditor.ITextEditor; + + +/** + * @since 3.1 + */ +public class EditorTestHelper { + + public static IEditorPart openInEditor(IFile file, boolean runEventLoop) throws PartInitException { + IEditorPart part= IDE.openEditor(getActivePage(), file); + if (runEventLoop) + runEventQueue(part); + return part; + } + + public static IEditorPart openInEditor(IFile file, String editorId, boolean runEventLoop) throws PartInitException { + IEditorPart part= IDE.openEditor(getActivePage(), file, editorId); + if (runEventLoop) + runEventQueue(part); + return part; + } + + public static IDocument getDocument(ITextEditor editor) { + IDocumentProvider provider= editor.getDocumentProvider(); + IEditorInput input= editor.getEditorInput(); + return provider.getDocument(input); + } + + public static void revertEditor(ITextEditor editor, boolean runEventQueue) { + editor.doRevertToSaved(); + if (runEventQueue) + runEventQueue(editor); + } + + public static void closeAllEditors() { + IWorkbenchPage page= getActivePage(); + if (page != null) + page.closeAllEditors(false); + } + + public static void runEventQueue() { + IWorkbenchWindow window= getActiveWorkbenchWindow(); + if (window != null) + runEventQueue(window.getShell()); + } + + public static void runEventQueue(IWorkbenchPart part) { + runEventQueue(part.getSite().getShell()); + } + + public static void runEventQueue(Shell shell) { + while (shell.getDisplay().readAndDispatch()); + } + + public static void runEventQueue(long minTime) { + long nextCheck= System.currentTimeMillis() + minTime; + while (System.currentTimeMillis() < nextCheck) { + runEventQueue(); + sleep(1); + } + } + + public static IWorkbenchWindow getActiveWorkbenchWindow() { + return PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + } + + public static IWorkbenchPage getActivePage() { + IWorkbenchWindow window= getActiveWorkbenchWindow(); + return window != null ? window.getActivePage() : null; + } + + public static Display getActiveDisplay() { + IWorkbenchWindow window= getActiveWorkbenchWindow(); + return window != null ? window.getShell().getDisplay() : null; + } + + public static boolean calmDown(long minTime, long maxTime, long intervalTime) { + long startTime= System.currentTimeMillis() + minTime; + runEventQueue(); + while (System.currentTimeMillis() < startTime) + runEventQueue(intervalTime); + + long endTime= maxTime > 0 ? System.currentTimeMillis() + maxTime : Long.MAX_VALUE; + boolean calm= isCalm(); + while (!calm && System.currentTimeMillis() < endTime) { + runEventQueue(intervalTime); + calm= isCalm(); + } +// System.out.println("--------------------------------------------------"); + return calm; + } + + public static void sleep(int intervalTime) { + try { + Thread.sleep(intervalTime); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + public static boolean isCalm() { + IJobManager jobManager= Job.getJobManager(); + Job[] jobs= jobManager.find(null); + for (int i= 0; i < jobs.length; i++) { + Job job= jobs[i]; + int state= job.getState(); +// System.out.println(job.getName() + ": " + getStateName(state)); + if (state == Job.RUNNING || state == Job.WAITING) { +// System.out.println(); + return false; + } + } +// System.out.println(); + return true; + } + + public static void bringToTop() { + getActiveWorkbenchWindow().getShell().forceActive(); + } +} @@ -0,0 +1,94 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.editor.performance; + +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; + +/** + * Measures the time to type in one single target into a large buildfile + * @since 3.1 + */ +public class NonInitialTypingTest extends AbstractAntUITest { + + public NonInitialTypingTest(String name) { + super(name); + } + +// private ITextEditor fEditor; +// +// private static final char[] TARGET= ("<target name=\"newTarget\" >\r" + +// "<echo>\"New Target\"</echo>\r" + +// "</target>\r").toCharArray(); +// +// private PerformanceMeter fMeter; +// +// private KeyboardProbe fKeyboardProbe; +// +// protected void setUp() throws PartInitException, BadLocationException { +// EditorTestHelper.runEventQueue(); +// IFile file= getProject().getFolder("buildfiles").getFolder("performance").getFile("build.xml"); +// fEditor= (ITextEditor) EditorTestHelper.openInEditor(file, true); +// // dirty editor to avoid initial dirtying / validate edit costs +// dirtyEditor(); +// Performance performance= Performance.getDefault(); +// fMeter= performance.createPerformanceMeter(performance.getDefaultScenarioId(this)); +// fKeyboardProbe= new KeyboardProbe(); +// +// int offset= getInsertPosition(); +// fEditor.getSelectionProvider().setSelection(new TextSelection(offset, 0)); +// EditorTestHelper.runEventQueue(); +// sleep(1000); +// } +// +// private void dirtyEditor() { +// fEditor.getSelectionProvider().setSelection(new TextSelection(0, 0)); +// EditorTestHelper.runEventQueue(); +// sleep(1000); +// +// Display display= EditorTestHelper.getActiveDisplay(); +// fKeyboardProbe.pressChar('{', display); +// SWTEventHelper.pressKeyCode(display, SWT.BS); +// sleep(1000); +// } +// +// protected void tearDown() throws Exception { +// sleep(1000); +// EditorTestHelper.revertEditor(fEditor, true); +// EditorTestHelper.closeAllEditors(); +// +// fMeter.commit(); +// } +// +// public void testTypeAMethod() { +// Display display= EditorTestHelper.getActiveDisplay(); +// +// fMeter.start(); +// for (int i= 0; i < TARGET.length; i++) { +// fKeyboardProbe.pressChar(TARGET[i], display); +// } +// fMeter.stop(); +// } +// +// private synchronized void sleep(int time) { +// try { +// wait(time); +// } catch (InterruptedException e) { +// } +// } +// +// private int getInsertPosition() throws BadLocationException { +// IDocument document= EditorTestHelper.getDocument(fEditor); +// int lines= document.getNumberOfLines(); +// int offset= document.getLineOffset(lines - 2); +// return offset; +// } +} @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2003, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.editor.support; + +import java.io.File; + +import org.eclipse.ant.internal.ui.model.LocationProvider; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; + + +public class TestLocationProvider extends LocationProvider { + + private File buildFile; + + public TestLocationProvider(File buildFile) { + super(null); + this.buildFile= buildFile; + } + + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.outline.ILocationProvider#getLocation() + */ + public IPath getLocation() { + return new Path(buildFile.getAbsolutePath()); + } +} @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2003, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.editor.support; + +import org.eclipse.ant.internal.ui.model.IProblem; +import org.eclipse.ant.internal.ui.model.IProblemRequestor; + +public class TestProblemRequestor implements IProblemRequestor { + + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.outline.IProblemRequestor#acceptProblem(org.eclipse.ant.internal.ui.editor.outline.IProblem) + */ + public void acceptProblem(IProblem problem) { + + } + + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.outline.IProblemRequestor#beginReporting() + */ + public void beginReporting() { + + } + + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.outline.IProblemRequestor#endReporting() + */ + public void endReporting() { + + } +} @@ -0,0 +1,224 @@ +/******************************************************************************* + * Copyright (c) 2003, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.editor.support; + +import java.io.File; +import java.io.IOException; + +import junit.framework.Assert; + +import org.eclipse.ant.internal.ui.editor.AntEditor; +import org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor; +import org.eclipse.ant.internal.ui.model.AntModel; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.contentassist.ICompletionListener; +import org.eclipse.jface.text.contentassist.ICompletionProposal; +import org.eclipse.jface.text.contentassist.IContentAssistantExtension2; +import org.eclipse.jface.text.source.ISourceViewer; +import org.w3c.dom.Element; + +public class TestTextCompletionProcessor extends AntEditorCompletionProcessor { + + public final static int TEST_PROPOSAL_MODE_NONE = AntEditorCompletionProcessor.PROPOSAL_MODE_NONE; + public final static int TEST_PROPOSAL_MODE_BUILDFILE = AntEditorCompletionProcessor.PROPOSAL_MODE_BUILDFILE; + public final static int TEST_PROPOSAL_MODE_TASK_PROPOSAL = AntEditorCompletionProcessor.PROPOSAL_MODE_TASK_PROPOSAL; + public final static int TEST_PROPOSAL_MODE_PROPERTY_PROPOSAL = AntEditorCompletionProcessor.PROPOSAL_MODE_PROPERTY_PROPOSAL; + public final static int TEST_PROPOSAL_MODE_ATTRIBUTE_PROPOSAL = AntEditorCompletionProcessor.PROPOSAL_MODE_ATTRIBUTE_PROPOSAL; + public final static int TEST_PROPOSAL_MODE_TASK_PROPOSAL_CLOSING = AntEditorCompletionProcessor.PROPOSAL_MODE_TASK_PROPOSAL_CLOSING; + public final static int TEST_PROPOSAL_MODE_ATTRIBUTE_VALUE_PROPOSAL = AntEditorCompletionProcessor.PROPOSAL_MODE_ATTRIBUTE_VALUE_PROPOSAL; + + private File fEditedFile; + private ISourceViewer fViewer; + private boolean fNeedsToDispose= true; + + + + public TestTextCompletionProcessor(AntModel model) { + super(model); + fContentAssistant= new IContentAssistantExtension2() { + public void setEmptyMessage(String message) { + } + + public void setStatusMessage(String message) { + } + + public void setStatusLineVisible(boolean show) { + } + + public void setShowEmptyList(boolean showEmpty) { + } + + public void setRepeatedInvocationMode(boolean cycling) { + } + + public void removeCompletionListener(ICompletionListener listener) { + } + + public void addCompletionListener(ICompletionListener listener) { + + } + }; + } + + public TestTextCompletionProcessor(AntEditor editor) { + this(editor.getAntModel()); + fViewer= editor.getViewer(); + fNeedsToDispose= false; + } + + public TestTextCompletionProcessor() { + this((AntModel)null); + } + + public ICompletionProposal[] getAttributeProposals(String taskName, String prefix) { + if (cursorPosition == -1) { + cursorPosition= taskName.length(); + } + return super.getAttributeProposals(taskName, prefix); + } + + public Element findChildElementNamedOf(Element anElement, String childElementName) { + return super.findChildElementNamedOf(anElement, childElementName); + } + + public ICompletionProposal[] getTaskProposals(String text, String parentName, String prefix) { + cursorPosition= Math.max(0, text.length() - 1); + return super.getTaskProposals(new Document(text), parentName, prefix); + } + + public ICompletionProposal[] getTaskProposals(IDocument document, String parentName, String aPrefix) { + cursorPosition= Math.max(0, document.getLength() - 1); + return super.getTaskProposals(document, parentName, aPrefix); + } + + public int determineProposalMode(String text, int theCursorPosition, String prefix) { + return super.determineProposalMode(new Document(text), theCursorPosition, prefix); + } + + public String getParentName(String text, int aLineNumber, int aColumnNumber) { + return super.getParentName(new Document(text), aLineNumber, aColumnNumber); + } + + public String getParentName(IDocument doc, int aLineNumber, int aColumnNumber) { + return super.getParentName(doc, aLineNumber, aColumnNumber); + } + + public String getPrefixFromDocument(String aDocumentText, int anOffset) { + String prefix= super.getPrefixFromDocument(aDocumentText, anOffset); + currentPrefix= null; + return prefix; + } + + public ICompletionProposal[] getPropertyProposals(IDocument document, String prefix, int cursorPos) { + return super.getPropertyProposals(document, prefix, cursorPos); + } + + /** + * Returns the edited File that org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor sets or a temporary + * file, which only serves as a dummy. + * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getEditedFile() + */ + public File getEditedFile() { + if (fEditedFile != null){ + return fEditedFile; + } + File tempFile = null; + try { + tempFile = File.createTempFile("test", null); + } catch (IOException e) { + Assert.fail(e.getMessage()); + } + tempFile.deleteOnExit(); + return tempFile; + } + + public void setLineNumber(int aLineNumber) { + lineNumber = aLineNumber; + } + + public void setColumnNumber(int aColumnNumber) { + columnNumber = aColumnNumber; + } + + public void setCursorPosition(int cursorPosition) { + this.cursorPosition = cursorPosition; + } + + public void setEditedFile(File aFile) { + fEditedFile= aFile; + } + + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getTargetAttributeValueProposals(org.eclipse.jface.text.IDocument, java.lang.String, java.lang.String, java.lang.String) + */ + public ICompletionProposal[] getTargetAttributeValueProposals(IDocument document, String textToSearch, String prefix, String attributeName) { + return super.getTargetAttributeValueProposals(document, textToSearch, prefix, attributeName); + } + + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getAntCallAttributeValueProposals(org.eclipse.jface.text.IDocument, java.lang.String, java.lang.String) + */ + public ICompletionProposal[] getAntCallAttributeValueProposals(IDocument document, String prefix, String attributeName) { + return super.getAntCallAttributeValueProposals(document, prefix, attributeName); + } + /** + * Since the testing occurs without necessarily having an associated viewer, return + * a dummy value. + */ + protected char getPreviousChar() { + return '?'; + } + + /** + * Returns whether the specified task name is known. + */ + protected boolean isKnownElement(String elementName) { + if (antModel != null) { + return super.isKnownElement(elementName); + } + return getDtd().getElement(elementName) != null ; + } + + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getProposalsFromDocument(org.eclipse.jface.text.IDocument, java.lang.String) + */ + public ICompletionProposal[] getProposalsFromDocument(IDocument document, String prefix) { + return super.getProposalsFromDocument(document, prefix); + } + + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#getBuildFileProposals(org.eclipse.jface.text.IDocument, java.lang.String) + */ + public ICompletionProposal[] getBuildFileProposals(String text, String prefix) { + return super.getBuildFileProposals(new Document(text), prefix); + } + /* (non-Javadoc) + * @see org.eclipse.ant.internal.ui.editor.AntEditorCompletionProcessor#determineTemplateProposals(org.eclipse.jface.text.ITextViewer, int) + */ + public ICompletionProposal[] determineTemplateProposals() { + return super.determineTemplateProposals(fViewer, cursorPosition); + } + /* (non-Javadoc) + * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(org.eclipse.jface.text.ITextViewer, int) + */ + public ICompletionProposal[] computeCompletionProposals(int documentOffset) { + return super.computeCompletionProposals(fViewer, documentOffset); + } + + public void dispose() { + if (fNeedsToDispose && antModel != null) { + //not working with an editor + antModel.dispose(); + } + } +} @@ -0,0 +1,143 @@ +/******************************************************************************* + * Copyright (c) 2004, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.test.performance.Dimension; +import org.eclipse.test.performance.Performance; +import org.eclipse.test.performance.PerformanceMeter; + +public class AbstractAntUIBuildPerformanceTest extends AbstractAntUIBuildTest { + + protected PerformanceMeter fPerformanceMeter; + + /** + * Constructs a performance test case with the given name. + * @param name the name of the performance test case + */ + public AbstractAntUIBuildPerformanceTest(String name) { + super(name); + } + + /** + * Overridden to create a default performance meter for this test case. + * @throws Exception + */ + protected void setUp() throws Exception { + super.setUp(); + Performance performance= Performance.getDefault(); + fPerformanceMeter= performance.createPerformanceMeter(performance.getDefaultScenarioId(this)); + } + + /** + * Overridden to dispose of the performance meter. + * @throws Exception + */ + protected void tearDown() throws Exception { + fPerformanceMeter.dispose(); + } + + /** + * Mark the scenario of this test case + * to be included into the global performance summary. The summary shows + * the given dimension of the scenario and labels the scenario with the short name. + * + * @param shortName a short (shorter than 40 characters) descritive name of the scenario + * @param dimension the dimension to show in the summary + */ + public void tagAsGlobalSummary(String shortName, Dimension dimension) { + Performance performance= Performance.getDefault(); + performance.tagAsGlobalSummary(fPerformanceMeter, shortName, new Dimension[] { dimension } ); + } + + /** + * Mark the scenario of this test case + * to be included into the performance summary. The summary shows + * the given dimension of the scenario and labels the scenario with the short name. + * + * @param shortName a short (shorter than 40 characters) descriptive name of the scenario + * @param dimension the dimension to show in the summary + */ + public void tagAsSummary(String shortName, Dimension dimension) { + Performance performance= Performance.getDefault(); + performance.tagAsSummary(fPerformanceMeter, shortName, new Dimension[] { dimension } ); + } + + /** + * Mark the scenario represented by the given PerformanceMeter + * to be included into the global performance summary. The summary shows + * the given dimensions of the scenario and labels the scenario with the short name. + * + * @param shortName a short (shorter than 40 characters) descriptive name of the scenario + * @param dimensions an array of dimensions to show in the summary + */ + public void tagAsGlobalSummary(String shortName, Dimension[] dimensions) { + Performance performance= Performance.getDefault(); + performance.tagAsGlobalSummary(fPerformanceMeter, shortName, dimensions ); + } + + /** + * Called from within a test case immediately before the code to measure is run. + * It starts capturing of performance data. + * Must be followed by a call to {@link PerformanceTestCase#stopMeasuring()} before subsequent calls + * to this method or {@link PerformanceTestCase#commitMeasurements()}. + */ + protected void startMeasuring() { + fPerformanceMeter.start(); + } + + protected void stopMeasuring() { + fPerformanceMeter.stop(); + } + + protected void commitMeasurements() { + fPerformanceMeter.commit(); + } + + /** + * Asserts default properties of the measurements captured for this test case. + * + * @throws RuntimeException if the properties do not hold + */ + protected void assertPerformance() { + Performance.getDefault().assertPerformance(fPerformanceMeter); + } + + /** + * Asserts that the measurement specified by the given dimension + * is within a certain range with respect to some reference value. + * If the specified dimension isn't available, the call has no effect. + * + * @param dim the Dimension to check + * @param lowerPercentage a negative number indicating the percentage the measured value is allowed to be smaller than some reference value + * @param upperPercentage a positive number indicating the percentage the measured value is allowed to be greater than some reference value + * @throws RuntimeException if the properties do not hold + */ + protected void assertPerformanceInRelativeBand(Dimension dim, int lowerPercentage, int upperPercentage) { + Performance.getDefault().assertPerformanceInRelativeBand(fPerformanceMeter, dim, lowerPercentage, upperPercentage); + } + + /** + * Launches the Ant build for this config. + * Waits for all of the lines to be appended to the console. + * + * @param config the launch configuration to execute + * @param i the number of times to perform the launch + */ + protected void launch(ILaunchConfiguration config, int i) throws CoreException { + startMeasuring(); + for (int j = 0; j < i; j++) { + super.launch(config); + } + stopMeasuring(); + } +} @@ -0,0 +1,100 @@ +/******************************************************************************* + * Copyright (c) 2003, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui; + +import junit.framework.TestResult; + +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.console.IHyperlink; + + +public abstract class AbstractAntUIBuildTest extends AbstractAntUITest { + + /** + * Flag that indicates test are in progress + */ + protected boolean testing = true; + + public AbstractAntUIBuildTest(String name) { + super(name); + } + + /** + * Runs the test and collects the result in a TestResult without blocking + * the UI thread. + */ + public void run(final TestResult result) { + final Display display = Display.getCurrent(); + Thread thread = null; + try { + Runnable r = new Runnable() { + public void run() { + AbstractAntUIBuildTest.super.run(result); + testing = false; + display.wake(); + } + }; + thread = new Thread(r); + thread.start(); + } catch (Exception e) { + e.printStackTrace(); + } + + while (testing) { + try { + if (!display.readAndDispatch()) + display.sleep(); + } catch (Throwable e) { + e.printStackTrace(); + } + } + } + + /** + * Launches the Ant build with the buildfile name (no extension). + * Waits for all of the lines to be appended to the console. + * + * @param buildFileName the buildfile to execute + * @return thread in which the first suspend event occurred + */ + protected void launch(String buildFileName) throws CoreException { + super.launch(buildFileName); + } + + /** + * Launches the launch configuration + * Waits for all of the lines to be appended to the console. + * + * @param config the config to execute + * @return thread in which the first suspend event occurred + */ + protected void launch(ILaunchConfiguration config) throws CoreException { + launchAndTerminate(config, 20000); + } + + protected void activateLink(final IHyperlink link) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + link.linkActivated(); + } + }); + } + /* (non-Javadoc) + * @see org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest#launch(java.lang.String, java.lang.String) + */ + protected void launch(String buildFileName, String arguments) throws CoreException { + super.launch(buildFileName, arguments); + } +} @@ -0,0 +1,128 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.eclipse.ant.internal.ui.AntUtil; +import org.eclipse.ant.internal.ui.model.AntTargetNode; +import org.eclipse.ant.launching.IAntLaunchConstants; +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; +import org.eclipse.core.externaltools.internal.IExternalToolConstants; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; + +public class AntUtilTests extends AbstractAntUITest { + + public AntUtilTests(String name) { + super(name); + } + + public void testGetTargetsLaunchConfiguration() throws CoreException { + String buildFileName= "echoing"; + File buildFile= getBuildFile(buildFileName + ".xml"); + String arguments= null; + Map properties= null; + String propertyFiles= null; + AntTargetNode[] targets= AntUtil.getTargets(buildFile.getAbsolutePath(), getLaunchConfiguration(buildFileName, arguments, properties, propertyFiles)); + assertTrue(targets != null); + assertTrue("Incorrect number of targets retrieved; should be 4 was: " + targets.length, targets.length == 4); + assertContains("echo3", targets); + } + + public void testGetTargetsLaunchConfigurationMinusD() throws CoreException { + String buildFileName= "importRequiringUserProp"; + File buildFile= getBuildFile(buildFileName + ".xml"); + String arguments= "-DimportFileName=toBeImported.xml"; + Map properties= null; + String propertyFiles= null; + AntTargetNode[] targets= AntUtil.getTargets(buildFile.getAbsolutePath(), getLaunchConfiguration(buildFileName, arguments, properties, propertyFiles)); + assertTrue(targets != null); + assertTrue("Incorrect number of targets retrieved; should be 3 was: " + targets.length, targets.length == 3); + assertContains("import-default", targets); + } + + public void testGetTargetsLaunchConfigurationMinusDAndProperty() throws CoreException { + String buildFileName= "importRequiringUserProp"; + File buildFile= getBuildFile(buildFileName + ".xml"); + String arguments= "-DimportFileName=toBeImported.xml"; + //arguments should win + Map properties= new HashMap(); + properties.put("importFileName", "notToBeImported.xml"); + String propertyFiles= null; + AntTargetNode[] targets= AntUtil.getTargets(buildFile.getAbsolutePath(), getLaunchConfiguration(buildFileName, arguments, properties, propertyFiles)); + assertTrue(targets != null); + assertTrue("Incorrect number of targets retrieved; should be 3 was: " + targets.length, targets.length == 3); + assertContains("import-default", targets); + } + + + public void testGetTargetsLaunchConfigurationProperty() throws CoreException { + String buildFileName= "importRequiringUserProp"; + File buildFile= getBuildFile(buildFileName + ".xml"); + String arguments= null; + Map properties= new HashMap(); + properties.put("importFileName", "toBeImported.xml"); + String propertyFiles= null; + AntTargetNode[] targets= AntUtil.getTargets(buildFile.getAbsolutePath(), getLaunchConfiguration(buildFileName, arguments, properties, propertyFiles)); + assertTrue(targets != null); + assertTrue("Incorrect number of targets retrieved; should be 3 was: " + targets.length, targets.length == 3); + assertContains("import-default", targets); + } + + public void testGetTargetsLaunchConfigurationPropertyFile() throws CoreException { + String buildFileName= "importRequiringUserProp"; + File buildFile= getBuildFile(buildFileName + ".xml"); + String arguments= null; + Map properties= null; + String propertyFiles= "buildtest1.properties"; + AntTargetNode[] targets= AntUtil.getTargets(buildFile.getAbsolutePath(), getLaunchConfiguration(buildFileName, arguments, properties, propertyFiles)); + assertTrue(targets != null); + assertTrue("Incorrect number of targets retrieved; should be 3 was: " + targets.length, targets.length == 3); + assertContains("import-default", targets); + } + + protected ILaunchConfiguration getLaunchConfiguration(String buildFileName, String arguments, Map properties, String propertyFiles) throws CoreException { + ILaunchConfiguration config = getLaunchConfiguration(buildFileName); + assertNotNull("Could not locate launch configuration for " + buildFileName, config); + ILaunchConfigurationWorkingCopy copy= config.getWorkingCopy(); + if (arguments != null) { + copy.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, arguments); + } + if (properties != null) { + copy.setAttribute(IAntLaunchConstants.ATTR_ANT_PROPERTIES, properties); + } + if (propertyFiles != null) { + copy.setAttribute(IAntLaunchConstants.ATTR_ANT_PROPERTY_FILES, propertyFiles); + } + return copy; + } + + /** + * Asserts that <code>displayString</code> is in one of the + * completion proposals. + */ + private void assertContains(String targetName, AntTargetNode[] targets) { + boolean found = false; + for (int i = 0; i < targets.length; i++) { + AntTargetNode target = targets[i]; + String foundName = target.getTargetName(); + if(targetName.equals(foundName)) { + found = true; + break; + } + } + assertEquals("Did not find target: " + targetName, true, found); + } +} @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2005, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.performance; + +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; +import org.eclipse.test.performance.PerformanceTestCase; + +/** + * Abstract class for ant performance tests, ensures the test project is created + * and ready in the test workspace. + * + * @since 3.5 + */ +public abstract class AbstractAntPerformanceTest extends PerformanceTestCase { + + /* (non-Javadoc) + * @see org.eclipse.test.performance.PerformanceTestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + AbstractAntUITest.assertProject(); + } +} @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.performance; + +import org.eclipse.ant.internal.ui.IAntUIConstants; +import org.eclipse.ant.tests.ui.editor.performance.EditorTestHelper; +import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.test.performance.Dimension; +import org.eclipse.test.performance.PerformanceTestCase; +import org.eclipse.ui.externaltools.internal.model.IExternalToolConstants; + +public class OpenLaunchConfigurationDialogTests extends PerformanceTestCase { + + public static String fgIdentifier= IExternalToolConstants.ID_EXTERNAL_TOOLS_LAUNCH_GROUP; + + public void testOpenAntLaunchConfigurationDialog1() { + //cold run + ILaunchConfiguration configuration= getLaunchConfiguration("big"); + IStructuredSelection selection= new StructuredSelection(configuration); + for (int i = 0; i < 10; i++) { + openLCD(selection, fgIdentifier, 20); + } + + commitMeasurements(); + assertPerformance(); + } + + public void testOpenAntLaunchConfigurationDialog2() { + //warm run + ILaunchConfiguration configuration= getLaunchConfiguration("big"); + IStructuredSelection selection= new StructuredSelection(configuration); + tagAsSummary("Open LCD on Targets tab", Dimension.ELAPSED_PROCESS); + for (int i = 0; i < 10; i++) { + openLCD(selection, fgIdentifier, 20); + } + + commitMeasurements(); + assertPerformance(); + } + + private ILaunchConfiguration getLaunchConfiguration(String buildFileName) { + IFile file = AbstractAntUITest.getJavaProject().getProject().getFolder("launchConfigurations").getFile(buildFileName + ".launch"); + ILaunchConfiguration config = AbstractAntUITest.getLaunchManager().getLaunchConfiguration(file); + assertTrue("Could not find launch configuration for " + buildFileName, config.exists()); + return config; + } + + private void openLCD(final IStructuredSelection selection, final String groupIdentifier, int numberOfOpens) { + startMeasuring(); + for (int i = 0; i < numberOfOpens; i++) { + //set a status to go to the targets tab + IStatus status = new Status(IStatus.INFO, IAntUIConstants.PLUGIN_ID, IAntUIConstants.STATUS_INIT_RUN_ANT, "", null); //$NON-NLS-1$ + LaunchConfigurationsDialog dialog= new LaunchConfigurationsDialog(DebugUIPlugin.getShell(), DebugUIPlugin.getDefault().getLaunchConfigurationManager().getLaunchGroup(groupIdentifier)); + dialog.setBlockOnOpen(false); + dialog.setOpenMode(LaunchConfigurationsDialog.LAUNCH_CONFIGURATION_DIALOG_OPEN_ON_SELECTION); + dialog.setInitialSelection(selection); + dialog.setInitialStatus(status); + + dialog.open(); + EditorTestHelper.runEventQueue(dialog.getShell()); + dialog.close(); + } + stopMeasuring(); + } + + /* (non-Javadoc) + * @see org.eclipse.test.performance.PerformanceTestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + IPreferenceStore debugPreferenceStore = DebugUIPlugin.getDefault().getPreferenceStore(); + debugPreferenceStore.setValue(IInternalDebugUIConstants.PREF_FILTER_LAUNCH_CLOSED, false); + debugPreferenceStore.setValue(IInternalDebugUIConstants.PREF_FILTER_LAUNCH_DELETED, false); + debugPreferenceStore.setValue(IInternalDebugUIConstants.PREF_FILTER_LAUNCH_TYPES, false); + debugPreferenceStore.setValue(IInternalDebugUIConstants.PREF_FILTER_WORKING_SETS, false); + EditorTestHelper.runEventQueue(); + } + + /* (non-Javadoc) + * @see org.eclipse.test.performance.PerformanceTestCase#tearDown() + */ + protected void tearDown() throws Exception { + super.tearDown(); + IPreferenceStore debugPreferenceStore = DebugUIPlugin.getDefault().getPreferenceStore(); + debugPreferenceStore.setToDefault(IInternalDebugUIConstants.PREF_FILTER_LAUNCH_CLOSED); + debugPreferenceStore.setToDefault(IInternalDebugUIConstants.PREF_FILTER_LAUNCH_DELETED); + debugPreferenceStore.setToDefault(IInternalDebugUIConstants.PREF_FILTER_LAUNCH_TYPES); + debugPreferenceStore.setToDefault(IInternalDebugUIConstants.PREF_FILTER_WORKING_SETS); + } +} @@ -0,0 +1,105 @@ +/******************************************************************************* + * Copyright (c) 2004, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.performance; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.eclipse.ant.tests.ui.AbstractAntUIBuildPerformanceTest; +import org.eclipse.core.externaltools.internal.IExternalToolConstants; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.ui.IDebugUIConstants; + +public class SeparateVMTests extends AbstractAntUIBuildPerformanceTest { + + public SeparateVMTests(String name) { + super(name); + } + + public static Test suite() { + return new TestSuite(SeparateVMTests.class); + } + + /** + * Performance test for launching Ant in a separate vm. + */ + public void testBuild() throws CoreException { + //tagAsSummary("Separate JRE Build", Dimension.ELAPSED_PROCESS); + ILaunchConfiguration config= getLaunchConfiguration("echoingSepVM"); + //possible first time hit of the SWT pieces getting written from the JAR to the + //metadata area + launchAndTerminate(config, 20000); + for (int i = 0; i < 10; i++) { + launch(config, 10); + } + commitMeasurements(); + assertPerformance(); + } + + /** + * Performance test for launching Ant in a separate vm with no console output. + */ + public void testBuildNoConsole() throws CoreException { + //tagAsSummary("Separate JRE Build; capture output off", Dimension.ELAPSED_PROCESS); + ILaunchConfiguration config = getLaunchConfiguration("echoingSepVM"); + assertNotNull("Could not locate launch configuration for " + "echoingSepVM", config); + ILaunchConfigurationWorkingCopy copy= config.getWorkingCopy(); + copy.setAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE, false); + copy.setAttribute(DebugPlugin.ATTR_CAPTURE_OUTPUT, false); + //possible first time hit of the SWT pieces getting written from the JAR to the + //metadata area + launchAndTerminate(copy, 20000); + for (int i = 0; i < 10; i++) { + launch(copy, 10); + } + commitMeasurements(); + assertPerformance(); + } + + /** + * Performance test for launching Ant in a separate vm with debug information. + */ + public void testBuildMinusDebug() throws CoreException { + //tagAsSummary("Separate JRE Build; -debug", Dimension.ELAPSED_PROCESS); + ILaunchConfiguration config = getLaunchConfiguration("echoingSepVM"); + assertNotNull("Could not locate launch configuration for " + "echoingSepVM", config); + ILaunchConfigurationWorkingCopy copy= config.getWorkingCopy(); + copy.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, "-debug"); + //possible first time hit of the SWT pieces getting written from the JAR to the + //metadata area + launchAndTerminate(copy, 20000); + for (int i = 0; i < 10; i++) { + launch(copy, 10); + } + commitMeasurements(); + assertPerformance(); + } + + /** + * Performance test for launching Ant in a separate vm with lots of links + */ + public void testBuildWithLotsOfLinks() throws CoreException { + //tagAsSummary("Separate JRE Build; links", Dimension.ELAPSED_PROCESS); + ILaunchConfiguration config = getLaunchConfiguration("echoPropertiesSepVM"); + //possible first time hit of the SWT pieces getting written from the JAR to the + //metadata area + launchAndTerminate(config, 20000); + for (int i = 0; i < 10; i++) { + launch(config, 10); + } + commitMeasurements(); + assertPerformance(); + } +} diff --git a/ant/org.eclipse.ant.tests.ui/about.html b/ant/org.eclipse.ant.tests.ui/about.html new file mode 100644 index 000000000..460233046 --- /dev/null +++ b/ ant/org.eclipse.ant.tests.ui/about.html@@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> +<title>About</title> +</head> +<body lang="EN-US"> +<h2>About This Content</h2> + +<p>June 2, 2006</p> +<h3>License</h3> + +<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise +indicated below, the Content is provided to you under the terms and conditions of the +Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available +at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>. +For purposes of the EPL, "Program" will mean the Content.</p> + +<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is +being redistributed by another party ("Redistributor") and different terms and conditions may +apply to your use of any object code in the Content. Check the Redistributor's license that was +provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise +indicated below, the terms and conditions of the EPL still apply to any source code in the Content +and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p> + +</body> +</html>
\ No newline at end of file @@ -0,0 +1,30 @@ +############################################################################### +# Copyright (c) 2004, 2009 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +bin.includes = plugin.xml,\ + plugin.properties,\ + test.xml,\ + about.html,\ + testbuildfiles/,\ + lib/,\ + lib/*.jar,\ + *.jar,\ + META-INF/ + +source.anttestsui.jar = test plugin/,\ + Ant Editor Tests/,\ + Ant Debug Tests/,\ + External Tools/,\ + Ant Tests/ + +source.lib/antUITestsSupport.jar = test support/ +jars.compile.order=anttestsui.jar,lib/antUITestsSupport.jar +output.lib/antUITestsSupport.jar = test_support_bin/ +output.anttestsui.jar = bin/ @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?>
<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<project name="build tests support jar" default="build" basedir=".."> + + <target name="build" description="Removes all build artifacts, recreates the support jar, and refreshes this plugin's resources" depends="clean, lib/antUITestsSupport.jar"/> + + <target name="init" depends="properties"> + <property name="version.suffix" value="_3.1.0"/> + <property name="temp.folder" value="${basedir}/temp.folder"/> + <property name="plugin.destination" value="${basedir}"/> + <property name="build.result.folder" value="${basedir}"/> + </target> + + <target name="properties" if="eclipse.running"> + <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> + </target> + + <target name="lib/antUITestsSupport.jar" depends="init" description= "Builds the support JAR"> + <property name="destdir" value="${temp.folder}/lib/antUITestsSupport.jar.bin"/> + <delete dir="${destdir}"/> + <mkdir dir="${destdir}"/> + <!-- compile the source code --> + <javac target="1.1" destdir="${destdir}" failonerror="false" verbose="false" debug="on" includeAntRuntime="yes" + classpath="${basedir}/bin; + ${eclipse.home}/plugins/org.eclipse.ant.core${version.suffix}.jar; + ${basedir}/../org.eclipse.ant.core/bin + ${eclipse.home}/plugins/org.eclipse.ant.core${version.suffix}.jar/lib/remoteAnt.jar; + ${basedir}/../org.eclipse.ant.ui/lib/remoteAnt.jar"> + <src path="test support/"/> + </javac> + <mkdir dir="${build.result.folder}/lib"/> + <jar destfile="${build.result.folder}/lib/antUITestsSupport.jar" basedir="${destdir}"/> + <delete dir="${temp.folder}"/> + </target> + + <target name="clean" depends="init"> + <delete file="${build.result.folder}/lib/antUITestsSupport.jar"/> + <delete dir="${temp.folder}"/> + </target> +</project> Binary files differ@@ -0,0 +1,13 @@ +############################################################################### +# Copyright (c) 2003, 2005 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### + +pluginName=Ant UI Test Plugin +providerName=Eclipse.org diff --git a/ant/org.eclipse.ant.tests.ui/plugin.xml b/ant/org.eclipse.ant.tests.ui/plugin.xml new file mode 100644 index 000000000..d41961f86 --- /dev/null +++ b/ ant/org.eclipse.ant.tests.ui/plugin.xml@@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<?eclipse version="3.0"?>
<!-- + Copyright (c) 2005, 2008 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<plugin> + + + <extension + point="org.eclipse.debug.ui.consoleLineTrackers"> + <consoleLineTracker + class="org.eclipse.ant.tests.ui.testplugin.ConsoleLineTracker" + processType="org.eclipse.ant.ui.antProcess" + id="org.eclipse.ant.tests.ui.testplugin.ConsoleLineTracker"> + </consoleLineTracker> + </extension> + + <extension + point="org.eclipse.ant.core.extraClasspathEntries"> + <extraClasspathEntry + library="lib/antUITestsSupport.jar" + eclipseRuntime="false"> + </extraClasspathEntry> + </extension> + + <extension point="org.eclipse.ant.core.antTasks"> + <antTask + name="coolUITask" + class="org.eclipse.ant.tests.ui.support.tasks.AntTestTask2" + library="lib/antUITestsSupport.jar" + eclipseRuntime="false"> + </antTask> + <antTask + name="coolUITask" + uri="testing" + class="org.eclipse.ant.tests.ui.support.tasks.AntTestTask2" + library="lib/antUITestsSupport.jar" + eclipseRuntime="false"> + </antTask> + </extension> + + <extension point="org.eclipse.ant.core.antTypes"> + <antType + name="coolUIType" + class="org.eclipse.ant.tests.ui.support.types.AntTestPath" + library="lib/antUITestsSupport.jar" + eclipseRuntime="false"> + </antType> + </extension> + + <extension + point="org.eclipse.ant.core.antProperties"> + <antProperty + name="property.ui.testing" + value="true"> + </antProperty> + <antProperty + name="property.ui.testing2" + value="hey" + eclipseRuntime="false"> + </antProperty> + </extension> +</plugin> @@ -0,0 +1,483 @@ +/******************************************************************************* + * Copyright (c) 2003, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.testplugin; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import junit.framework.TestCase; + +import org.eclipse.ant.internal.ui.AntUIPlugin; +import org.eclipse.ant.internal.ui.IAntUIPreferenceConstants; +import org.eclipse.ant.internal.ui.model.AntModel; +import org.eclipse.ant.tests.ui.editor.support.TestLocationProvider; +import org.eclipse.ant.tests.ui.editor.support.TestProblemRequestor; +import org.eclipse.core.externaltools.internal.IExternalToolConstants; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.core.ILaunchManager; +import org.eclipse.debug.core.model.IProcess; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.BadPositionCategoryException; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IDocumentPartitioner; +import org.eclipse.jface.text.ITypedRegion; +import org.eclipse.jface.text.Position; +import org.eclipse.swt.graphics.Color; +import org.eclipse.ui.console.IHyperlink; +import org.eclipse.ui.internal.console.ConsoleHyperlinkPosition; +import org.eclipse.ui.internal.console.IOConsolePartition; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +/** + * Abstract Ant UI test class + */ +public abstract class AbstractAntUITest extends TestCase { + + public static String ANT_EDITOR_ID= "org.eclipse.ant.ui.internal.editor.AntEditor"; + + private IDocument currentDocument; + + /** + * Constructor + * @param name + */ + public AbstractAntUITest(String name) { + super(name); + } + + /** + * Returns the {@link IFile} for the given build file name + * @param buildFileName + * @return the associated {@link IFile} for the given build file name + */ + protected IFile getIFile(String buildFileName) { + return getProject().getFolder("buildfiles").getFile(buildFileName); + } + + /** + * Returns the {@link File} for the given build file name + * @param buildFileName + * @return the {@link File} for the given build file name + */ + protected File getBuildFile(String buildFileName) { + IFile file = getIFile(buildFileName); + assertTrue("Could not find build file named: " + buildFileName, file.exists()); + return file.getLocation().toFile(); + } + + /* (non-Javadoc) + * @see junit.framework.TestCase#setUp() + */ + protected void setUp() throws Exception { + super.setUp(); + assertProject(); + } + + /** + * Asserts that the testing project has been setup in the test workspace + * @throws Exception + * + * @since 3.5 + */ + public static void assertProject() throws Exception { + IProject pro = ResourcesPlugin.getWorkspace().getRoot().getProject(ProjectHelper.PROJECT_NAME); + if (!pro.exists()) { + // create project and import build files and support files + IProject project = ProjectHelper.createProject(ProjectHelper.PROJECT_NAME); + IFolder folder = ProjectHelper.addFolder(project, "buildfiles"); + ProjectHelper.addFolder(project, "launchConfigurations"); + File root = AntUITestPlugin.getDefault().getFileInPlugin(ProjectHelper.TEST_BUILDFILES_DIR); + ProjectHelper.importFilesFromDirectory(root, folder.getFullPath(), null); + + ProjectHelper.createLaunchConfigurationForBoth("echoing"); + ProjectHelper.createLaunchConfigurationForBoth("102282"); + ProjectHelper.createLaunchConfigurationForBoth("74840"); + ProjectHelper.createLaunchConfigurationForBoth("failingTarget"); + ProjectHelper.createLaunchConfiguration("build"); + ProjectHelper.createLaunchConfiguration("bad"); + ProjectHelper.createLaunchConfiguration("importRequiringUserProp"); + ProjectHelper.createLaunchConfigurationForSeparateVM("echoPropertiesSepVM", "echoProperties"); + ProjectHelper.createLaunchConfigurationForSeparateVM("extensionPointSepVM", null); + ProjectHelper.createLaunchConfigurationForSeparateVM("extensionPointTaskSepVM", null); + ProjectHelper.createLaunchConfigurationForSeparateVM("extensionPointTypeSepVM", null); + ProjectHelper.createLaunchConfigurationForSeparateVM("input", null); + ProjectHelper.createLaunchConfigurationForSeparateVM("environmentVar", null); + + ProjectHelper.createLaunchConfigurationForBoth("breakpoints"); + ProjectHelper.createLaunchConfigurationForBoth("debugAntCall"); + ProjectHelper.createLaunchConfigurationForBoth("96022"); + ProjectHelper.createLaunchConfigurationForBoth("macrodef"); + ProjectHelper.createLaunchConfigurationForBoth("85769"); + + ProjectHelper.createLaunchConfiguration("big", ProjectHelper.PROJECT_NAME + "/buildfiles/performance/build.xml"); + + //do not show the Ant build failed error dialog + AntUIPlugin.getDefault().getPreferenceStore().setValue(IAntUIPreferenceConstants.ANT_ERROR_DIALOG, false); + } + } + + /** + * Returns the 'AntUITests' project. + * + * @return the test project + */ + protected static IProject getProject() { + return ResourcesPlugin.getWorkspace().getRoot().getProject(ProjectHelper.PROJECT_NAME); + } + + /** + * Returns the underlying {@link IDocument} for the given file name + * @param fileName + * @return the underlying {@link IDocument} for the given file name + */ + protected IDocument getDocument(String fileName) { + File file = getBuildFile(fileName); + InputStream in; + try { + in = new FileInputStream(file); + } catch (FileNotFoundException e) { + return null; + } + String initialContent= getStreamContentAsString(in); + return new Document(initialContent); + } + + /** + * Returns the contents of the given {@link InputStream} as a {@link String} + * @param inputStream + * @return the {@link InputStream} as a {@link String} + */ + protected String getStreamContentAsString(InputStream inputStream) { + InputStreamReader reader; + try { + reader = new InputStreamReader(inputStream, ResourcesPlugin.getEncoding()); + } catch (UnsupportedEncodingException e) { + AntUIPlugin.log(e); + return ""; //$NON-NLS-1$ + } + BufferedReader tempBufferedReader = new BufferedReader(reader); + + return getReaderContentAsString(tempBufferedReader); + } + + /** + * Returns the contents of the given {@link BufferedReader} as a {@link String} + * @param bufferedReader + * @return the contents of the given {@link BufferedReader} as a {@link String} + */ + protected String getReaderContentAsStringNew(BufferedReader bufferedReader) { + StringBuffer result = new StringBuffer(); + try { + char[] readBuffer= new char[2048]; + int n= bufferedReader.read(readBuffer); + while (n > 0) { + result.append(readBuffer, 0, n); + n= bufferedReader.read(readBuffer); + } + } catch (IOException e) { + AntUIPlugin.log(e); + return null; + } + + return result.toString(); + } + + /** + * Returns the contents of the given {@link BufferedReader} as a {@link String} + * @param bufferedReader + * @return the contents of the given {@link BufferedReader} as a {@link String} + */ + protected String getReaderContentAsString(BufferedReader bufferedReader) { + StringBuffer result = new StringBuffer(); + try { + String line= bufferedReader.readLine(); + + while(line != null) { + if(result.length() != 0) { + result.append(System.getProperty("line.separator")); //$NON-NLS-1$ + } + result.append(line); + line = bufferedReader.readLine(); + } + } catch (IOException e) { + AntUIPlugin.log(e); + return null; + } + + return result.toString(); + } + + /** + * Returns the {@link AntModel} for the given file name + * @param fileName + * @return the {@link AntModel} for the given file name + */ + protected AntModel getAntModel(String fileName) { + currentDocument= getDocument(fileName); + AntModel model= new AntModel(currentDocument, new TestProblemRequestor(), new TestLocationProvider(getBuildFile(fileName))); + model.reconcile(); + return model; + } + + /** + * @return the current {@link IDocument} context + */ + public IDocument getCurrentDocument() { + return currentDocument; + } + + /** + * Allows the current {@link IDocument} context to be set. This method accepts <code>null</code> + * @param currentDocument + */ + public void setCurrentDocument(IDocument currentDocument) { + this.currentDocument = currentDocument; + } + + /** + * Launches the Ant build with the build file name (no extension). + * + * @param buildFileName the ant build file name + */ + protected void launch(String buildFileName) throws CoreException { + ILaunchConfiguration config = getLaunchConfiguration(buildFileName); + assertNotNull("Could not locate launch configuration for " + buildFileName, config); + launchAndTerminate(config, 20000); + } + + /** + * Launches the Ant build with the build file name (no extension). + * + * @param buildFileName the build file + * @param arguments the ant arguments + */ + protected void launch(String buildFileName, String arguments) throws CoreException { + ILaunchConfiguration config = getLaunchConfiguration(buildFileName); + assertNotNull("Could not locate launch configuration for " + buildFileName, config); + ILaunchConfigurationWorkingCopy copy= config.getWorkingCopy(); + copy.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, arguments); + launchAndTerminate(copy, 20000); + } + + /** + * Launches the Ant build in debug output mode with the build file name (no extension). + * + * @param mainTypeName the program to launch + * @return thread in which the first suspend event occurred + */ + protected void launchWithDebug(String buildFileName) throws CoreException { + ILaunchConfiguration config = getLaunchConfiguration(buildFileName); + assertNotNull("Could not locate launch configuration for " + buildFileName, config); + ILaunchConfigurationWorkingCopy copy= config.getWorkingCopy(); + copy.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, "-debug"); + launchAndTerminate(copy, 10000); + } + + /** + * Returns the launch configuration for the given build file + * + * @param buildFileName build file to launch + * @see ProjectCreationDecorator + */ + protected ILaunchConfiguration getLaunchConfiguration(String buildFileName) { + IFile file = getJavaProject().getProject().getFolder("launchConfigurations").getFile(buildFileName + ".launch"); + ILaunchConfiguration config = getLaunchManager().getLaunchConfiguration(file); + assertTrue("Could not find launch configuration for " + buildFileName, config.exists()); + return config; + } + + /** + * Returns the content of the specified file as <code>String</code>. + */ + protected String getFileContentAsString(File aFile) throws FileNotFoundException { + InputStream stream = new FileInputStream(aFile); + InputStreamReader reader = new InputStreamReader(stream); + BufferedReader bufferedReader = new BufferedReader(reader); + + return getReaderContentAsString(bufferedReader); + } + + /** + * @return a new SAX parser instrance + */ + protected SAXParser getSAXParser() { + SAXParser parser = null; + try { + parser = SAXParserFactory.newInstance().newSAXParser(); + } catch (ParserConfigurationException e) { + AntUIPlugin.log(e); + } catch (SAXException e) { + AntUIPlugin.log(e); + } + return parser; + } + + + /** + * Parses the given input stream with the given parser using the given handler + * @param stream + * @param parser + * @param handler + * @param editedFile + */ + protected void parse(InputStream stream, SAXParser parser, DefaultHandler handler, File editedFile) { + InputSource inputSource= new InputSource(stream); + if (editedFile != null) { + //needed for resolving relative external entities + inputSource.setSystemId(editedFile.getAbsolutePath()); + } + + try { + parser.parse(inputSource, handler); + } catch (SAXException e) { + } catch (IOException e) { + } + } + + /** + * Returns the launch manager + * + * @return launch manager + */ + public static ILaunchManager getLaunchManager() { + return DebugPlugin.getDefault().getLaunchManager(); + } + + /** + * Returns the 'AntUITests' project. + * + * @return the test project + */ + public static IJavaProject getJavaProject() { + return JavaCore.create( getProject()); + } + + /** + * Launches the given configuration and waits for the terminated event or the length of the given timeout, + * whichever comes first + * @param config + * @param timeout + * @throws CoreException + */ + protected void launchAndTerminate(ILaunchConfiguration config, int timeout) throws CoreException { + DebugEventWaiter waiter= new DebugElementKindEventWaiter(DebugEvent.TERMINATE, IProcess.class); + waiter.setTimeout(timeout); + + Object terminatee = launchAndWait(config, waiter); + assertNotNull("Program did not terminate.", terminatee); + assertTrue("terminatee is not an IProcess", terminatee instanceof IProcess); + IProcess process = (IProcess) terminatee; + boolean terminated = process.isTerminated(); + assertTrue("process is not terminated", terminated); + } + + /** + * Launches the given configuration and waits for an event. Returns the + * source of the event. If the event is not received, the launch is + * terminated and an exception is thrown. + * + * @param configuration the configuration to launch + * @param waiter the event waiter to use + * @return Object the source of the event + * @exception Exception if the event is never received. + */ + protected Object launchAndWait(ILaunchConfiguration configuration, DebugEventWaiter waiter) throws CoreException { + ILaunch launch = configuration.launch(ILaunchManager.RUN_MODE, null); + Object suspendee= waiter.waitForEvent(); + if (suspendee == null) { + try { + launch.terminate(); + } catch (CoreException e) { + e.printStackTrace(); + fail("Program did not suspend, and unable to terminate launch."); + } + } + assertNotNull("Program did not suspend, launch terminated.", suspendee); + boolean terminated = launch.isTerminated(); + assertTrue("launch did not terminate", terminated); + if (terminated && !ConsoleLineTracker.isClosed()) { + ConsoleLineTracker.waitForConsole(); + } + assertTrue("Console is not closed", ConsoleLineTracker.isClosed()); + return suspendee; + } + + /** + * Returns the {@link IHyperlink} at the given offset on the given document, + * or <code>null</code> if there is no {@link IHyperlink} at that offset on the document. + * @param offset + * @param doc + * @return the {@link IHyperlink} at the given offset on the given document or <code>null</code> + */ + protected IHyperlink getHyperlink(int offset, IDocument doc) { + if (offset >= 0 && doc != null) { + Position[] positions = null; + try { + positions = doc.getPositions(ConsoleHyperlinkPosition.HYPER_LINK_CATEGORY); + } catch (BadPositionCategoryException ex) { + // no links have been added + return null; + } + for (int i = 0; i < positions.length; i++) { + Position position = positions[i]; + if (offset >= position.getOffset() && offset <= (position.getOffset() + position.getLength())) { + return ((ConsoleHyperlinkPosition)position).getHyperLink(); + } + } + } + return null; + } + + /** + * Returns the {@link Color} at the given offset on the given document, + * or <code>null</code> if there is no {@link Color} at that offset on the document. + * @param offset + * @param doc + * @return the {@link Color} at the given offset on the given document or <code>null</code> + */ + protected Color getColorAtOffset(int offset, IDocument document) throws BadLocationException { + if (document != null) { + IDocumentPartitioner partitioner = document.getDocumentPartitioner(); + if (partitioner != null) { + ITypedRegion[] regions= partitioner.computePartitioning(offset, document.getLineInformationOfOffset(offset).getLength()); + if (regions.length > 0) { + IOConsolePartition partition = (IOConsolePartition)regions[0]; + return partition.getColor(); + } + } + } + return null; + } +}
\ No newline at end of file @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2004, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.testplugin; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.eclipse.ant.tests.ui.editor.performance.OpenAntEditorTest; +import org.eclipse.ant.tests.ui.performance.SeparateVMTests; + +/** + * Performance Test suite for the Ant UI. + * All of the tests in this suite rely on the setup that occurs in the + * ProjectCreationDecorator suite. It must always run before any of the other + * test suites. + */ +public class AntUIPerformanceTests extends TestSuite { + + public static Test suite() { + + TestSuite suite = new AntUIPerformanceTests(); + suite.setName("Ant UI Performance Unit Tests"); + suite.addTest(new TestSuite(OpenAntEditorTest.class)); + suite.addTest(new TestSuite(SeparateVMTests.class)); + //suite.addTest(new TestSuite(NonInitialTypingTest.class)); + //suite.addTest(new TestSuite(OpenLaunchConfigurationDialogTests.class)); + return suite; + } +} @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.testplugin; + + +import java.io.File; +import java.io.IOException; +import java.net.URL; + +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceDescription; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.IPath; +import org.eclipse.ui.plugin.AbstractUIPlugin; +import org.osgi.framework.Bundle; + + +public class AntUITestPlugin extends AbstractUIPlugin { + + private static AntUITestPlugin deflt; + + public AntUITestPlugin() { + super(); + deflt= this; + } + + public static AntUITestPlugin getDefault() { + return deflt; + } + + public static IWorkspace getWorkspace() { + return ResourcesPlugin.getWorkspace(); + } + + public static void enableAutobuild(boolean enable) throws CoreException { + // disable auto build + IWorkspace workspace= AntUITestPlugin.getWorkspace(); + IWorkspaceDescription desc= workspace.getDescription(); + desc.setAutoBuilding(enable); + workspace.setDescription(desc); + } + + public File getFileInPlugin(IPath path) { + try { + Bundle bundle = getDefault().getBundle(); + URL installURL= new URL(bundle.getEntry("/"), path.toString()); + URL localURL= FileLocator.toFileURL(installURL); + return new File(localURL.getFile()); + } catch (IOException e) { + return null; + } + } +} @@ -0,0 +1,117 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.testplugin; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.debug.ui.console.IConsole; +import org.eclipse.debug.ui.console.IConsoleLineTrackerExtension; +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.IRegion; + +/** + * Simple console line tracker extension point that collects the lines + * appended to the console. + */ +public class ConsoleLineTracker implements IConsoleLineTrackerExtension { + + private static IConsole console; + private static List lines= new ArrayList(); + + private static boolean consoleClosed= true; + + /** + * @see org.eclipse.debug.ui.console.IConsoleLineTracker#dispose() + */ + public void dispose() { + } + + /** + * @see org.eclipse.debug.ui.console.IConsoleLineTracker#init(org.eclipse.debug.ui.console.IConsole) + */ + public void init(IConsole c) { + synchronized(lines) { + ConsoleLineTracker.console= c; + lines= new ArrayList(); + consoleClosed= false; + } + } + + /** + * @see org.eclipse.debug.ui.console.IConsoleLineTracker#lineAppended(org.eclipse.jface.text.IRegion) + */ + public void lineAppended(IRegion line) { + lines.add(line); + } + + public static int getNumberOfMessages() { + return lines.size(); + } + + public static String getMessage(int index) { + if (index < lines.size()){ + IRegion lineRegion= (IRegion)lines.get(index); + try { + return console.getDocument().get(lineRegion.getOffset(), lineRegion.getLength()); + } catch (BadLocationException e) { + return null; + } + } + return null; + } + + public static List getAllMessages() { + List all= new ArrayList(lines.size()); + for (int i = 0; i < lines.size(); i++) { + IRegion lineRegion= (IRegion)lines.get(i); + try { + all.add(console.getDocument().get(lineRegion.getOffset(), lineRegion.getLength())); + } catch (BadLocationException e) { + continue; + } + } + return all; + } + + public static IDocument getDocument() { + return console.getDocument(); + } + + public static void waitForConsole() { + synchronized (lines) { + if (consoleClosed) { + return; + } + try { + lines.wait(20000); + } catch (InterruptedException ie) { + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.console.IConsoleLineTrackerExtension#consoleClosed() + */ + public void consoleClosed() { + synchronized (lines) { + consoleClosed= true; + lines.notifyAll(); + } + } + + public static boolean isClosed() { + synchronized (lines) { + return consoleClosed; + } + } +} @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.testplugin; + +import org.eclipse.debug.core.DebugEvent; + +/** + * Waits for a type of event on a kind of element. Compare this to SpecificDebugElementEventWaiter which is + * used to wait for a type of event on a specific debug element object. + */ + +public class DebugElementKindEventWaiter extends DebugEventWaiter { + + protected Class fElementClass; + + public DebugElementKindEventWaiter(int eventKind, Class elementClass) { + super(eventKind); + fElementClass = elementClass; + } + + public boolean accept(DebugEvent event) { + Object o = event.getSource(); + return super.accept(event) && fElementClass.isInstance(o); + } + +} + + @@ -0,0 +1,170 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.testplugin; + +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.IDebugEventSetListener; + +/** + * The <code>DebugEventWaiter</code> is + * to wait for a specific kind of debug event. + * <p> + * When a <code>DebugEventWaiter</code> is created, it + * registers itself with the <code>DebugPlugin</code> as + * an <code>IDebugEventSetListener</code>. + * <p> + * NOTE: <code>DebugEventWaiter</code> objects are intended for + * one time use only! + */ +public class DebugEventWaiter implements IDebugEventSetListener { + /** + * The kind of event the waiter is waiting for + */ + protected int fEventType; + + /** + * The number of milliseconds the waiter will wait before timing out. + */ + protected long fTimeout; + + /** + * The <code>IDebugModelManager</code> this waiter is listening to. + */ + protected DebugPlugin fDebugPlugin; + + /** + * The <code>DebugEvent</code> received. + */ + protected DebugEvent fEvent; + + /** + * The event set that was accepted + */ + protected DebugEvent[] fEventSet; + + /** + * The default timeout value if none is given (5000). + */ + public static final long DEFAULT_TIMEOUT= 5000; + + /** + * Creates a new <code>DebugEventWaiter</code> which + * waits for events of a kind <code>eventType</code>. + * The wait method will wait the default timeout value. + */ + public DebugEventWaiter(int eventType) { + fDebugPlugin= DebugPlugin.getDefault(); + fEventType= eventType; + fTimeout= DEFAULT_TIMEOUT; + + fDebugPlugin.addDebugEventListener(this); + } + + /** + * Answers true if the <code>DebugEvent</code> is acceptable. + */ + public boolean accept(DebugEvent event) { + return event.getKind() == fEventType && event.getDetail() != DebugEvent.EVALUATION_IMPLICIT; + } + /** + * Answers the event name associated with the given flag. + */ + public String getEventName(int flag) { + switch (flag) { + case DebugEvent.CREATE : + return "Create"; + case DebugEvent.TERMINATE : + return "Terminate"; + case DebugEvent.RESUME : + return "Resume"; + case DebugEvent.SUSPEND : + return "Suspend"; + default : + return "UNKNOWN"; + } + } + + /** + * Handles debug events. + * + * @see IDebugEventListener + * @see #accept(DebugEvent) + */ + public synchronized void handleDebugEvents(DebugEvent[] events) { + //printReceived(events); + for (int i = 0; i < events.length; i++) { + if (accept(events[i])) { + fEvent= events[i]; + fEventSet = events; + unregister(); + notifyAll(); + return; + } + } + } + + /** + * Prints a message indicating which event was received. + */ + protected void printReceived(DebugEvent[] events) { + for (int i = 0; i < events.length; i++) { + System.out.println(this +" got " + events[i]); + } + } + + /** + * Sets the number of milliseconds to wait for this callback + */ + public void setTimeout(long milliseconds) { + fTimeout= milliseconds; + } + + /** + * Unregisters this waiter as a listener + */ + public void unregister() { + fDebugPlugin.removeDebugEventListener(this); + } + + /** + * Returns the source of the accepted event, or <code>null</code> + * if no event was accepted. + */ + public synchronized Object waitForEvent() { + if (fEvent == null) { + try { + wait(fTimeout); + } catch (InterruptedException ie) { + System.err.println("Interrupted waiting for event"); + } + } + unregister(); + if (fEvent == null) + return null; + return fEvent.getSource(); + } + + /** + * Returns the accepted event, if any. + */ + public DebugEvent getEvent() { + return fEvent; + } + + /** + * Returns the accepted event set, if any. + */ + public DebugEvent[] getEventSet() { + return fEventSet; + } +} + @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2000, 2008 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.testplugin; + + + +/** + * Utility class + */ +public class ProjectCreationDecorator { + + private static boolean fgIsJ2SE15Compatible = false ; + + static { + String version = System.getProperty("java.specification.version"); + if (version != null) { + String[] nums = version.split("\\."); + if (nums.length == 2) { + try { + int major = Integer.parseInt(nums[0]); + int minor = Integer.parseInt(nums[1]); + if (major >= 1) { + if (minor >= 5) { + fgIsJ2SE15Compatible = true; + } + } + } catch (NumberFormatException e) { + } + } + } + }; + + /** + * @return if the system property "java.specification.version" is 1.5 or greater + */ + public static boolean isJ2SE15Compatible() { + return fgIsJ2SE15Compatible; + } +} @@ -0,0 +1,229 @@ +/******************************************************************************* + * Copyright (c) 2000, 2009 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.testplugin; + + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.ant.internal.ui.IAntUIConstants; +import org.eclipse.ant.launching.IAntLaunchConstants; +import org.eclipse.core.externaltools.internal.IExternalToolConstants; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.Path; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunchConfiguration; +import org.eclipse.debug.core.ILaunchConfigurationType; +import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; +import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; +import org.eclipse.jdt.launching.IVMInstall; +import org.eclipse.jdt.launching.JavaRuntime; +import org.eclipse.ui.dialogs.IOverwriteQuery; +import org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider; +import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider; +import org.eclipse.ui.wizards.datatransfer.ImportOperation; + +/** + * Helper methods to set up an IProject. + */ +public class ProjectHelper { + + public static final IPath TEST_BUILDFILES_DIR= new Path("testbuildfiles"); + public static final IPath TEST_RESOURCES_DIR= new Path("testresources"); + public static final IPath TEST_LIB_DIR= new Path("testlib"); + + public static final String PROJECT_NAME= "Ant UI Tests"; + + /** + * Creates a IProject. + */ + public static IProject createProject(String projectName) throws CoreException { + IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); + IProject project= root.getProject(projectName); + if (!project.exists()) { + project.create(null); + } else { + project.refreshLocal(IResource.DEPTH_INFINITE, null); + } + + if (!project.isOpen()) { + project.open(null); + } + + if (!project.hasNature(JavaCore.NATURE_ID)) { + addNatureToProject(project, JavaCore.NATURE_ID, null); + } + + return project; + } + + private static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException { + IProjectDescription description = proj.getDescription(); + String[] prevNatures= description.getNatureIds(); + String[] newNatures= new String[prevNatures.length + 1]; + System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length); + newNatures[prevNatures.length]= natureId; + description.setNatureIds(newNatures); + proj.setDescription(description, monitor); + } + + /** + * Removes an IProject. + */ + public static void delete(IProject project) throws CoreException { + project.delete(true, true, null); + } + + + /** + * Adds a folder to an IProject. + */ + public static IFolder addFolder(IProject project, String containerName) throws CoreException { + + IFolder folder= project.getFolder(containerName); + if (!folder.exists()) { + folder.create(false, true, null); + } + + return folder; + + } + + public static void importFilesFromDirectory(File rootDir, IPath destPath, IProgressMonitor monitor) throws InvocationTargetException, IOException { + IImportStructureProvider structureProvider = FileSystemStructureProvider.INSTANCE; + List files = new ArrayList(100); + addFiles(rootDir, files); + try { + ImportOperation op= new ImportOperation(destPath, rootDir, structureProvider, new ImportOverwriteQuery(), files); + op.setCreateContainerStructure(false); + op.run(monitor); + } catch (InterruptedException e) { + // should not happen + } + } + + private static void addFiles(File dir, List collection) throws IOException { + File[] files = dir.listFiles(); + List subDirs = new ArrayList(2); + for (int i = 0; i < files.length; i++) { + if (files[i].isFile()) { + collection.add(files[i]); + } else if (files[i].isDirectory()) { + subDirs.add(files[i]); + } + } + Iterator iter = subDirs.iterator(); + while (iter.hasNext()) { + File subDir = (File)iter.next(); + addFiles(subDir, collection); + } + } + + private static class ImportOverwriteQuery implements IOverwriteQuery { + public String queryOverwrite(String file) { + return ALL; + } + } + + /** + * Creates two launch configurations one standard one and one for a separate VM + * @param launchConfigName + * @throws Exception + * + * @since 3.5 + */ + public static void createLaunchConfigurationForBoth(String launchConfigName) throws Exception { + ProjectHelper.createLaunchConfiguration(launchConfigName); + ProjectHelper.createLaunchConfigurationForSeparateVM(launchConfigName + "SepVM", launchConfigName); + } + + /** + * Creates a shared launch configuration for launching Ant in a separate VM with the given + * name. + * + * @since 3.5 + */ + public static void createLaunchConfigurationForSeparateVM(String launchConfigName, String buildFileName) throws Exception { + String bf = buildFileName; + ILaunchConfigurationType type = AbstractAntUITest.getLaunchManager().getLaunchConfigurationType(IAntLaunchConstants.ID_ANT_LAUNCH_CONFIGURATION_TYPE); + ILaunchConfigurationWorkingCopy config = type.newInstance(AbstractAntUITest.getJavaProject().getProject().getFolder("launchConfigurations"), launchConfigName); + + config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "org.eclipse.ant.internal.launching.remote.InternalAntRunner"); //$NON-NLS-1$ + config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_CLASSPATH_PROVIDER, "org.eclipse.ant.ui.AntClasspathProvider"); //$NON-NLS-1$ + config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, AbstractAntUITest.getJavaProject().getElementName()); + if (bf == null) { + bf= launchConfigName; + } + config.setAttribute(IExternalToolConstants.ATTR_LOCATION, "${workspace_loc:/" + PROJECT_NAME + "/buildfiles/" + bf + ".xml}"); + + config.setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, true); + config.setAttribute(DebugPlugin.ATTR_PROCESS_FACTORY_ID, IAntUIConstants.REMOTE_ANT_PROCESS_FACTORY_ID); + + ProjectHelper.setVM(config); + + config.doSave(); + } + + /** + * Sets the workspace default VM on the given working copy + * @param config + * + * @since 3.5 + */ + public static void setVM(ILaunchConfigurationWorkingCopy config) { + IVMInstall vm = JavaRuntime.getDefaultVMInstall(); + String vmName= vm.getName(); + String vmTypeID= vm.getVMInstallType().getId(); + config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_NAME, vmName); + config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_INSTALL_TYPE, vmTypeID); + } + + /** + * Creates a shared launch configuration for launching Ant in a separate VM with the given + * name. + */ + public static void createLaunchConfiguration(String launchConfigName) throws Exception { + ProjectHelper.createLaunchConfiguration(launchConfigName, PROJECT_NAME + "/buildfiles/" + launchConfigName + ".xml"); + } + + /** + * Creates a launch configuration with the given name in the given location + * @param launchConfigName + * @param path + * @return the handle to the new launch configuration + * @throws CoreException + */ + public static ILaunchConfiguration createLaunchConfiguration(String launchConfigName, String path) throws CoreException { + ILaunchConfigurationType type = AbstractAntUITest.getLaunchManager().getLaunchConfigurationType(IAntLaunchConstants.ID_ANT_LAUNCH_CONFIGURATION_TYPE); + ILaunchConfigurationWorkingCopy config = type.newInstance(AbstractAntUITest.getJavaProject().getProject().getFolder("launchConfigurations"), launchConfigName); + + config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, AbstractAntUITest.getJavaProject().getElementName()); + config.setAttribute(IExternalToolConstants.ATTR_LOCATION, "${workspace_loc:/" + path + "}"); + config.setAttribute(IDebugUIConstants.ATTR_LAUNCH_IN_BACKGROUND, true); + + config.doSave(); + return config; + } +} @@ -0,0 +1,25 @@ +/******************************************************************************* + * Copyright (c) 2004, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.support.inputHandlers; + + +public class TestSWTInputHandler {//extends SWTInputHandler { + + +// /* (non-Javadoc) +// * @see org.eclipse.ant.internal.ui.antsupport.inputhandler.SWTInputHandler#open(java.lang.String, java.lang.String, boolean[]) +// */ +// protected void open(String title, String prompt, boolean[] result) { +// fRequest.setInput("TestSWTInputHandler"); +// result[0]= true; +// } +} @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.support.tasks; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Echo; + + +public class AntTestTask extends Task { + + public AntTestTask() { + super(); + } + + /** + * @see org.apache.tools.ant.Task#execute() + */ + public void execute() throws BuildException { + Echo echo= new Echo(); + echo.setProject(getProject()); + echo.setMessage("Testing Ant in Eclipse with a custom task"); + echo.execute(); + } +} @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.support.tasks; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Echo; +import org.apache.tools.ant.types.EnumeratedAttribute; +import org.apache.tools.ant.types.Reference; + + +public class AntTestTask2 extends Task { + + String fMessage= "Default"; + Reference fRef= null; + + public AntTestTask2() { + super(); + } + + /** + * @see org.apache.tools.ant.Task#execute() + */ + public void execute() throws BuildException { + Echo echo= new Echo(); + echo.setProject(getProject()); + echo.setMessage("Testing Ant in Eclipse with a custom task2: " + fMessage); + echo.execute(); + } + + public void setMessage(Cool attr) { + fMessage = attr.getValue(); + } + + public void setReference(Reference ref) { + fRef= ref; + } + + /** + * Enumerated attribute with the values "cool", "chillin" and "awesome". + */ + public static class Cool extends EnumeratedAttribute { + public String[] getValues() { + return new String[] {"cool", "chillin", "awesome"}; + } + } +} @@ -0,0 +1,52 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.ant.tests.ui.support.tasks; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.taskdefs.Echo; + +public class NestElementTask extends Task { + + String message= "bar"; + NestedElement e; + public static class NestedElement{ + Boolean works= Boolean.FALSE; + public NestedElement() { + } + + public void setWorks(Boolean booleanValue) { + works= booleanValue; + } + + public boolean works() { + return works.booleanValue(); + } + } + public void addNestedElement(NestedElement nestedElement) { + e= nestedElement; + } + + /* (non-Javadoc) + * @see org.apache.tools.ant.Task#execute() + */ + public void execute() throws BuildException { + Echo echo= new Echo(); + echo.setProject(getProject()); + if (e.works()) { + echo.setMessage(message); + } else { + echo.setMessage("ack"); + } + echo.execute(); + } +} @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2000, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.ant.tests.ui.support.types; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Path; + +public class AntTestPath extends Path { + + String message; + + public AntTestPath(Project project) { + super(project); + } + + public void setMessage(String message) { + this.message= message; + } + + public String getMessage() { + return message; + } + +} diff --git a/ant/org.eclipse.ant.tests.ui/test.xml b/ant/org.eclipse.ant.tests.ui/test.xml new file mode 100644 index 000000000..c6f156374 --- /dev/null +++ b/ ant/org.eclipse.ant.tests.ui/test.xml@@ -0,0 +1,71 @@ +<?xml version="1.0"?> + +<project name="testsuite" default="run" basedir="."> + <!-- sets the properties eclipse-home, and library-file --> + <!-- The property ${eclipse-home} should be passed into this script --> + <!-- Set a meaningful default value for when it is not. --> + <property name="eclipse-home" value="${basedir}\..\.."/> +<property name="plugin-name" value="org.eclipse.ant.tests.ui"/> + <property name="library-file" + value="${eclipse-home}/plugins/org.eclipse.test/library.xml"/> + + <!-- This target holds all initialization code that needs to be done for --> + <!-- all tests that are to be run. Initialization for individual tests --> + <!-- should be done within the body of the suite target. --> + <target name="init"> + <tstamp/> + <delete> + <fileset dir="${eclipse-home}" includes="org*.xml"/> + </delete> + </target> + + <!-- This target defines the tests that need to be run. --> + <target name="suite"> + <property name="jdt-folder" + value="${eclipse-home}/jdt_folder"/> + <delete dir="${jdt-folder}" quiet="true"/> + <ant target="ui-test" antfile="${library-file}" dir="${eclipse-home}"> + <property name="data-dir" value="${jdt-folder}"/> + <property name="plugin-name" value="${plugin-name}"/> + <property name="classname" + value="org.eclipse.ant.tests.ui.testplugin.AntUITests"/> + </ant> + </target> + + <!-- This target defines the performance tests that need to be run. --> + <target name="perfsuite"> + <property name="jdt-folder" + value="${eclipse-home}/jdt_folder"/> + <delete dir="${jdt-folder}" quiet="true"/> + <ant target="ui-test" antfile="${library-file}" dir="${eclipse-home}"> + <property name="data-dir" value="${jdt-folder}"/> + <property name="plugin-name" value="${plugin-name}"/> + <property name="classname" + value="org.eclipse.ant.tests.ui.testplugin.AntUIPerformanceTests"/> + </ant> + </target> + + <!-- This target holds code to cleanup the testing environment after --> + <!-- after all of the tests have been run. You can use this target to --> + <!-- delete temporary files that have been created. --> + <target name="cleanup"> + </target> + + <!-- This target runs the test suite. Any actions that need to happen --> + <!-- after all the tests have been run should go here. --> + <target name="run" depends="init,suite,cleanup"> + <ant target="collect" antfile="${library-file}" dir="${eclipse-home}"> + <property name="includes" value="org*.xml"/> + <property name="output-file" value="${plugin-name}.xml"/> + </ant> + </target> + + <!--This target runs the performance test suites and collects results.--> + <target name="performance" depends="init, perfsuite, cleanup"> + <ant target="collect" antfile="${library-file}" dir="${eclipse-home}"> + <property name="includes" value="org*.xml"/> + <property name="output-file" value="${plugin-name}.xml"/> + </ant> + </target> + +</project> @@ -0,0 +1,23 @@ +<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> +<project name="project" default="default"> + <target name="default" > + <antcall target="antCalled"></antcall> + </target> + <target name="antCalled"> + <javac srcdir="src" + destdir="dst" + classpath="jarfile" + debug="on" + /> + </target> +</project> + @@ -0,0 +1,5 @@ +<project name="project" default="default"> + <target name="default"> + <echo>${platform.location}</echo> + </target> +</project> @@ -0,0 +1,20 @@ +<?xml version="1.0"?> + +<project name="debugAntCall" + default="default"> + + <target name="default"> + <antcall target="call"> + </antcall> + <echo>default</echo> + </target> + + <target name="call" depends="pre-call"> + <echo>call1</echo> + <sleep milliseconds="1500" /> + </target> + + <target name="pre-call"> + <echo>pre-call1</echo> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,9 @@ +<project name= "default" default="default"> + <target description="depends" name="default" depends="depends"> + + </target> + + <target name="depends"> + </target> + +</project>
\ No newline at end of file @@ -0,0 +1,12 @@ +<project name="project" default="default"> + + <target name="default" depends="test" description="--> description"> + <property name="test" value="yo"/> + </target> + + <target name="test"> + <echo>${test}</echo> + </target> + +</project> + @@ -0,0 +1,31 @@ +<project name="debugAntCall" + default="default"> + + <property name="hey" value="there"/> + + <target name="default"> + <antcall target="1"> + </antcall> + <echo>default</echo> + </target> + + <target name="1" depends="2"> + <echo>1</echo> + <sleep milliseconds="5" /> + </target> + + <target name="2"> + <antcall target="3"> + </antcall> + <echo>2</echo> + </target> + + <target name="3" depends="4"> + <echo>3</echo> + <sleep milliseconds="5" /> + </target> + + <target name="4"> + <echo>4</echo> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,27 @@ +<project name="test" + default="run-macro" + xmlns:xyz="http://xyz"> + + <macrodef name="echo-macro" + uri="http://xyz"> + <attribute name="str" /> + <element name="some-tasks" /> + <sequential> + <echo>@{str}</echo> + <some-tasks/> + </sequential> + </macrodef> + + <target name="run-macro"> + + <xyz:echo-macro str="s"> + + </xyz:echo-macro> + </target> + + <presetdef name="my-javac" uri="http://xyz"> + <javac fork="yes"></javac> + </presetdef> + + +</project>
\ No newline at end of file Binary files differ@@ -0,0 +1,14 @@ +<project name="Echoing" default="echo1" basedir=".."> + + <target name="echo1"> + <echo messge="echo1"/> + </target> + + <target name="echo2"> + <echo message="echo2"/> + </target> + + <target name="echo3" description= "An echo3!"> + <echo message="echo3"/> + </target> +</project> @@ -0,0 +1,4 @@ +<project ndefault="make"> + <target name="make"> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,37 @@ +<?xml version="1.0"?> + +<project name="debugEcho" default="default"> + <target name="default"> + <echo>1</echo> + <echo>2</echo> + <property name="ZZZ" value="ZZZ" /> + <sleep milliseconds="5" /> + <echo>3</echo> + <echo>4</echo> + <echo>5</echo> + <echo>6</echo> + <echo>7</echo> + <echo>8</echo> + <echo>9</echo> + <!--<sleep milliseconds="200" />--> + </target> + + <target name="entry1" depends="default"> + <echo>1</echo> + <echo>2</echo> + </target> + + <target name="entry2" depends="default"> + <echo>1</echo> + <echo>2</echo> + </target> + + <target name="properties"> + <property name="AAA" value="aaa" /> + <property name="BBB" value="bbb" /> + <property name="CCC" value="ccc" /> + <echo>all done</echo> + </target> + + <property name="name" value="value"/> +</project>
\ No newline at end of file @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="windows-1251"?> +<project name="test" default="init" basedir="."> + + <target name="init"> + <!-- displays Hello in Russian --> + <echo message="Çäðàâñòâóéòå"/> + </target> + + +</project> @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="test" default="init" basedir="."> + + <target name="init"> + <!-- displays Hello in Russian --> + <echo message="ЗдравÑ?твуйте"/> + </target> + +</project> @@ -0,0 +1,14 @@ +<project name="Echoing" default="echo1" basedir=".."> + + <target name="echo1"> + <echo message="echo1"/> + </target> + + <target name="echo2"> + <echo message="echo2"/> + </target> + + <target name="echo3" description= "An echo3!"> + <echo message="echo3"/> + </target> +</project> @@ -0,0 +1,13 @@ +############################################################################### +# Copyright (c) 2004, 2005 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +prop1=val1 +prop2 = val2 +importFileName= toBeImported.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="testproject" basedir="." default="main"> + <property name="propD" value="valD" /> + <property file="buildtest1.properties" /> + <property name="propV" value="valV" /> + <target name="main"> + <property name="property_in_target" value="val"/> + <echo>${</echo> + </target> + <target name="pretest"></target> + <target name="test" depends=""> + <echo>depends</echo> + </target> + <target name="test2"></target> + <target name="test3"></target> + <target name="testIf" if=""></target> + <target name="testUnless" unless="prop"></target> + <target name="testMoreDepends" depends="pretest, "> + <echo message="$"></echo> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="testproject" basedir="." default="main"> + <property name="propD" value="valD" /> + <property file="buildtest1.properties" /> + <target name="main" depends="properties">
\ No newline at end of file @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="testproject" basedir="." default="main"> + <target name="main" /> + <target name="pretest" description="description"> + </target> + <target name="test" depends=""> + <echo>depends</echo> + </target> + <target name="test2" /> +</project>
\ No newline at end of file @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project default="task3"> + <target name="task" description=""/> + <target name="task2"> + <antcall target=""></antcall> + </target> + <target name="task3" depends=""/> +</project>
\ No newline at end of file @@ -0,0 +1,5 @@ +<project default="defaultTargetName"> + <target name="defaultTargetName"> + <eclipse.buildScript recursivegeneration=""/> + </target> +</project> @@ -0,0 +1,18 @@ +<project name="debugAntCall" + default="default"> + + <target name="default"> + <antcall target="call"> + </antcall> + <echo>default</echo> + </target> + + <target name="call" depends="pre-call"> + <echo>call1</echo> + <sleep milliseconds="30" /> + </target> + + <target name="pre-call"> + <echo>pre-call1</echo> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,38 @@ +<!-- Ein test case sollte die property proposals in main --> +<!-- Ueberpruefen, und ob die diversen properties entsprechend --> +<!-- der dependencies gesetzt sind --> + +<project default="main"> + + <property name="do_init" value="val"></property> + + <target name="properties"> + <property name="prop_prop" value="val"></property> + <property name="do_not_compile" value="val"></property> + <echo message="executing properties"></echo> + </target> + + <!-- should never be executed since property is not set --> + <target name="additional_properties" if="do_addit_props"> + <property name="adit_prop" value="val" /> + <echo message="executing additional_properties"></echo> + </target> + + <target name="init" if="doinit" depends="properties,additional_properties"> + <property name="init_prop" value="val"></property> + <echo message="executing init"></echo> + </target> + + <!-- should never be executed since property should be set --> + <!-- by properties because of dependencies before --> + <target name="compile" unless="do_not_compile"> + <property name="compile_prop" value="val"></property> + <echo message="executing compile"></echo> + </target> + + <target name="main" depends="init, compile"> + <property name="main_prop" value="val"></property> + <echo message="executing main ${well}"></echo> + </target> + +</project>
\ No newline at end of file @@ -0,0 +1,6 @@ +<project name="Echoing properties" default="echo1" basedir=".."> + <target name="echo1"> + <echo message="about to echo properties"/> + <echoproperties/> + </target> +</project> @@ -0,0 +1,19 @@ +<project name="Echoing" default="echo1" basedir=".."> + + <target name="echo1"> + <echo message="echo1"/> + </target> + + <target name="echo2"> + <echo message="echo2"/> + </target> + + <target name="echo3" description= "An echo3!"> + <echo message="echo3"/> + </target> + + <target name="Bug42984"> + <echo message="user.dir: ${user.dir}"/> + </target> + +</project> @@ -0,0 +1,5 @@ +<project> + <property environment="env"/> + <echo>${env.ANT_HOME}</echo> + <echo>${ant.home}</echo> +</project>
\ No newline at end of file @@ -0,0 +1,14 @@ +<project name="Extension point testing in separate VM" + default="Extension Points" + basedir="." + > + <taskdef name="separateVMTask" classname="org.eclipse.ant.tests.ui.support.tasks.AntTestTask"> + </taskdef> + <target name="Extension Points" + description= "Ensure that an extra classpath entry designated as not requiring the Eclipse runtime shows up in a separate VM build" + > + <separateVMTask/> + <echo>${property.ui.testing}</echo> + <echo>${property.ui.testing2}</echo> + </target> +</project> @@ -0,0 +1,6 @@ +<project name="Extension Point Task" default="Extension Point Task" basedir="."> + <target name="Extension Point Task" description= "Ensure that an extension point defined task is present"> + <coolUITask message="cool" reference=""/> + <my:coolUITask xmlns:my="testing"/> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,12 @@ +<project name="Extension Point Type" default="Extension Point Type" basedir="."> + + <coolUIType id="compile.classpath"> + <fileset dir="lib"> + <include name="**/*.jar"/> + </fileset> + </coolUIType> + + <target name="Extension Point Type" description= "Ensure that an extension point defined type is present"> + <echo message="Ensure that an extension point defined type is present"/> + </target> +</project> @@ -0,0 +1,9 @@ +<project default="all"> + <target name="all" depends="fails, echos"/> + <target name="fails"> + <jar jarfile="jar16.jar" basedir="doesNotExist"/> + </target> + <target name="echos"> + <echo>Still echo on failure</echo> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,24 @@ +<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> +<project default="formatTest"> + +<!-- = = = = = = --><!-- formatTest --><!-- = = = = = = --><target name="formatTest" depends="init" description="--> test target one"><!-- hello world --><greeting /></target> + +<!-- - - - - - - --> +<!-- init --> +<!-- - - - - - - --> +<target name="init"> + <property name="greeting" value="hi" /> + <presetdef name="greeting"><echo>${greeting}</echo> +</presetdef> + </target> + +</project>
\ No newline at end of file @@ -0,0 +1,31 @@ +<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> +<project default="formatTest"> + + <!-- = = = = = = --> + <!-- formatTest --> + <!-- = = = = = = --> + <target name="formatTest" depends="init" description="--> test target one"> + <!-- hello world --> + <greeting /> + </target> + + <!-- - - - - - - --> + <!-- init --> + <!-- - - - - - - --> + <target name="init"> + <property name="greeting" value="hi" /> + <presetdef name="greeting"> + <echo>${greeting}</echo> + </presetdef> + </target> + +</project>
\ No newline at end of file @@ -0,0 +1,31 @@ +<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> +<project default="formatTest"> + + <!-- = = = = = = --> + <!-- formatTest --> + <!-- = = = = = = --> + <target name="formatTest" depends="init" description="--> test target one"> + <!-- hello world --> + <greeting /> + </target> + + <!-- - - - - - - --> + <!-- init --> + <!-- - - - - - - --> + <target name="init"> + <property name="greeting" value="hi" /> + <presetdef name="greeting"> + <echo>${greeting}</echo> + </presetdef> + </target> + +</project>
\ No newline at end of file @@ -0,0 +1,31 @@ +<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> +<project default="formatTest"> + + <!-- = = = = = = --> + <!-- formatTest --> + <!-- = = = = = = --> + <target name="formatTest" depends="init" description="--> test target one"> + <!-- hello world --> + <greeting /> + </target> + + <!-- - - - - - - --> + <!-- init --> + <!-- - - - - - - --> + <target name="init"> + <property name="greeting" value="hi" /> + <presetdef name="greeting"> + <echo>${greeting}</echo> + </presetdef> + </target> + +</project>
\ No newline at end of file @@ -0,0 +1,20 @@ +<?xml version="1.0"?>
<!-- + Copyright (c) 2005, 2006 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<project name="importRequiringUserProperties" default="import-default"> + <description>${importFileName to be defined as an argument, config property or in a config property file</description> + <import file="toBeImported.xml" /> + <target name="one" depends="import-default"> + <echo>one</echo> + </target> + +</project> + @@ -0,0 +1,10 @@ +<?xml version="1.0"?> +<project name="importRequiringUserProperties" default="import-default"> + <description>${importFileName to be defined as an argument, config property or in a config property file</description> + <import file="${importFileName}" /> + <target name="one" depends="import-default"> + <echo>one</echo> + </target> + +</project> + @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- + Copyright (c) 2005, 2008 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<project basedir="." name="dist" default="dist"> + <import file="toBeImportedWithByteOrderMark.xml" /> + + <target name="dist" depends="build"> + <echo message="echo - dist" /> + </target> +</project> @@ -0,0 +1,7 @@ +<project name="input testing" default= "input test"> + <target name="input test"> + <input message="Enter for echo" addproperty= "inputTest"> + </input> + <echo message="${inputTest}"/> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="project" default="-default"> + <target name="internal1"> + <!-- internal because does it does not have description attribute --> + </target> + + <target name="-internal2" description="something"> + <!-- internal because it has name starting with '-' --> + </target> + + <target name="non-internal" description="something"> + <!-- non internal because it has description attribute --> + </target> + + <target name="-default" depends="internal1,-internal2,non-internal"> + <!-- non-internal target because it is default target --> + </target> +</project> @@ -0,0 +1,7 @@ +<project default="javacIt"> + <target name="javacIt"> + <javac includejavaruntime="" + followsymlinks="" + includeantruntime=""/> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,22 @@ +<project default="type"> + + <macrodef name="eclipseMacro"> + <attribute name="v" default="NOT SET" /> + <attribute name="eclipse" default="yes" description="Testing Eclipse"/> + <element name="some-tasks" optional="yes" /> + <sequential> + <echo>Eclipse!: @{v}</echo> + </sequential> + </macrodef> + + <target name="type"> + <eclipseMacro v="This is v"> + + </eclipseMacro> + <eclipseMacro v="This is v2"/> + <eclipseMacro v="This is v3"/> + <eclipseMacro v="This is v4"/> + <eclipseMacro/> + </target> + +</project>
\ No newline at end of file @@ -0,0 +1 @@ +<project><target><sql driver="" password="" url="" userid=""></sql><concat></concat></target></project>
\ No newline at end of file @@ -0,0 +1,8 @@ +<project default="go"> + <taskdef name="nestedTest" classname="org.eclipse.ant.tests.ui.support.tasks.NestElementTask" /> + <target name="go"> + <nestedTest> + <nestedelement works="" /> + </nestedTest> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,49 @@ +<project name="default" default="default"> + <description> + default + </description> + <property name="destBase" location="c:\temp\example" /> + <property name="workspace" location="c:\eclipse3.1\dev" /> + <property name="coreSource" location="${workspace}${destBase} +\example.debug.core" /> + <property name="uiSource" location="${workspace}\example.debug.ui" /> + + <target name="default" description="default"> + + <macrodef name="process"> + <attribute name="destdir"/> + <attribute name="symbols"/> + <sequential> + <delete dir="@{destdir}"/> + <mkdir dir="@{destdir}\example.debug.core"/> + <mkdir dir="@{destdir}\example.debug.ui"/> + <preprocess destdir="@{destdir}\example.debug.core" symbols="@ +{symbols}"> + <fileset dir="${coreSource}"> + <exclude name="**/*.class"/> + </fileset> + </preprocess> + <preprocess destdir="@{destdir}\example.debug.ui" symbols="@ +{symbols}"> + <fileset dir="${uiSource}"> + <exclude name="**/*.class"/> + </fileset> + </preprocess> + </sequential> + </macrodef> + + <process destdir="${destBase}\exercise1.1" symbols="ex1"/> + <process destdir="${destBase}\exercise2.1" symbols="ex2"/> + + <property name="sameNameAsProp" value="hardToDistinguish"/> + +<property name="extendsDestBase" value="${destBase}/extension"/> + <echo>${extendsDestBase}</echo> + + <ant target="default"></ant> + <antcall target="default"></antcall> + </target> + + <target name="sameNameAsProp" unless="extendsDestBase" if="destBase"></target> + <fail unless="destBase" message="Property not set."/> +</project>
\ No newline at end of file @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="org.eclipse.ui.externaltools.internal.ant.editor" default="zip.plugin" basedir="."> + <target name="init" depends="properties"> + <property file="build.properties" /> + <property name="version.suffix" value="_0.4.5" /> + <property name="plugins_dir" value="${eclipse_dir}/plugins" /> + <property name="plugin" value="org.eclipse.ui.externaltools.internal.ant.editor" /> + <property name="full.name" value="${plugin}${version.suffix}" /> + <property name="temp.folder" value="${basedir}/temp.folder" /> + <property name="plugin.destination" value="${basedir}" /> + <property name="build.result.folder" value="${basedir}" /> + <property name="source.antEditor.jar" value="src/" /> + <echo message="Value is ${plugins_dir}" /> + </target> + + <target name="properties" if="eclipse.running"> + <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> + </target> + +</project> @@ -0,0 +1,2360 @@ +<?xml version="1.0"?> +<!-- Copyright (C) 1993-2003 SEAGULL --> +<?xm-well_formed path = ""?> +<!-- =================================================================== + +Build file for the Transidiom Java components: AIS, IDT, IFT, etc. + +Notes: + + - This is a build file for use with the Jakarta Ant build tool. + - naming guidelines: + - For properties, the names are generally moduleName.propertyType, e.g. ais.files. + - For targets, the names are generally action.moduleName, e.g. compile.ais. + +Prerequisites: + + jakarta-ant from http://jakarta.apache.org + A JAXP-compliant XSLT transformer. + - Xalan, from http://xml.apache.org. + A JAXP-compliant DOM parser. + - Xerces, from http://xml.apache.org. + +Main targets: + + clean Removes all the generated files and directories + clean.classes Removes all .class files + compile Compiles all the sources into ${build.classes} + dist Creates the distribution in ${build.dist} + jars Creates the jar files in ${build.lib} + nightly-build Creates a nightly build (does it all) + test Runs the tests. + test.compile Compiles the unit tests without triggering any dependencies. + verify Verifies the build by performing a load tests on jar files (does not trigger the jar dependencies.) + zip Creates the final ${zip-file} (does it all) + +TODO: + Distinguish between compile and runtime classpath: + - component.classpath.compile + - component.classpath.rt + +Authors: + + Lee Breisacher: lbreisacher@seagullsw.com + Gary Gregory: ggregory@seagullsw.com + +==================================================================== --> +<project default="zip" basedir="." name="transidiom"> + <!-- General properties --> + <property file="local-build.properties"/> + <property file="build.properties"/> + <property name="COMPANY.word" value="SEAGULL"/> + <property name="product.name" value="Application Interface Server"/> + <property name="Name" value="Application Interface Server"/> + <property name="src.root.dir" value=".."/> + <property name="binary.root.dir" value="${src.root.dir}/../../BinE"/> + <!-- UGLY!! This creates a dependency to the 'E' tree. Not sure how to solve it, though --> + <property name="src.dir" value="${src.root.dir}/Source"/> + <property name="java.resource.dir" value="${src.root.dir}/Resources"/> + <property name="xslt.resource.dir" value="../../Resources/XSLT"/> + <property name="fdef.dirname" value="config/functions"/> + <property name="root.dir" value="${src.root.dir}/Root"/> + <property name="root.dir.sys" value="${root.dir}/System"/> + <property name="root.dir.sysdef" value="${root.dir.sys}/Defaults"/> + <property name="root.dir.server" value="${root.dir}/server"/> + <property name="root.dir.server-config" value="${root.dir.server}/config"/> + <property name="root.dir.tools-config" value="${root.dir}/tools/config"/> + <property name="root.dir.mq" value="${root.dir}/mq"/> + <property name="root.dir.server-log" value="${root.dir.server-config}/log"/> + <property name="root.dir.server-transform" value="${root.dir.server-config}/transform"/> + <property name="root.dir.tools-log" value="${root.dir.tools-config}/log"/> + <property name="doc.dir" value="${src.root.dir}/Doc/Deliver"/> + <property name="test.dir" value="${src.root.dir}/Test"/> + <property name="src.test.dir" value="${test.dir}/Source"/> + <property name="build.dir" location="${basedir}/../buildoutput"/> + <property name="build.classes" value="${build.dir}/classes"/> + <property name="build.etc" value="${build.dir}/etc"/> + <property name="build.lib" value="${build.dir}/lib"/> + <property name="build.checksum" location="${build.lib}/checksum"/> + <property name="all-jars.xml" location="${build.checksum}/all-jars.xml"/> + <property name="build.dist" value="${build.dir}/dist"/> + <property name="zipFileBaseName" value="AppInterface"/> + <property name="thirdparty.dir" value="../../../../ThirdParty"/> + <property name="modifiedthirdparty.dir" value="../../ModifiedThirdParty"/> + <property name="sourcesafemirror.dir" value="../../SourceSafeMirror"/> + <property name="src.sourcesafemirror.dir" value="${sourcesafemirror.dir}/Java/Source"/> + <!-- 3rd party jar references --> + <property name="apache.dir" value="${thirdparty.dir}/apache.org"/> + <property name="xalan.dir" value="${apache.dir}/xalan-j/2.5.1/bin"/> + <property name="ant.jarname" value="ant.jar"/> + <property name="ant.jar" value="${apache.dir}/jakarta-ant/1.5.2/${ant.jarname}"/> + <property name="xerces.jarname" value="xercesImpl.jar"/> + <property name="xerces.jar" value="${xalan.dir}/${xerces.jarname}"/> + <property name="xalan.jarname" value="xalan.jar"/> + <property name="xalan.jar" value="${xalan.dir}/${xalan.jarname}"/> + <property name="xsltc.jarname" value="xsltc.jar"/> + <property name="xsltc.jar" value="${xalan.dir}/${xsltc.jarname}"/> + <property name="xml-apis.jarname" value="xml-apis.jar"/> + <property name="xml-apis.jar" value="${xalan.dir}/${xml-apis.jarname}"/> + <property name="soap.jarname" value="soap.jar"/> + <property name="soap.jar" value="${modifiedthirdparty.dir}/Soap/2.2/java/build/lib/${soap.jarname}"/> + <property name="mail.jarname" value="mailapi.jar"/> + <property name="mail.jar" value="${thirdparty.dir}/sun/JavaMail/1.3/lib/${mail.jarname}"/> + <property name="activation.jarname" value="activation.jar"/> + <property name="activation.jar" value="${thirdparty.dir}/sun/jaf/1.0.2/${activation.jarname}"/> + <property name="servlet.jarname" value="servlet.jar"/> + <property name="servlet.dir" value="${apache.dir}/jakarta-tomcat/3.2.1/ServletAPI/lib"/> + <property name="servlet.jar" value="${servlet.dir}/${servlet.jarname}"/> + <property name="commons-httpclient.jarname" value="commons-httpclient-2.0-rc2.jar"/> + <property name="commons-httpclient.dir" value="${apache.dir}/commons-httpclient/2.0-rc2"/> + <property name="commons-httpclient.jar" value="${commons-httpclient.dir}/${commons-httpclient.jarname}"/> + <property name="commons-logging.jarname" value="commons-logging.jar"/> + <property name="commons-logging.dir" value="${apache.dir}/commons-logging/1.0.3"/> + <property name="commons-logging.jar" value="${commons-logging.dir}/${commons-logging.jarname}"/> + <property name="ibm.mq.jarname" value="com.ibm.mq.jar"/> + <property name="ibm.mq.jar" value="${thirdparty.dir}/IBM/MQSeries/5.2.2/${ibm.mq.jarname}"/> + <property name="ibm.mqbind.jar" value="${thirdparty.dir}/IBM/MQSeries/5.2.2/com.ibm.mqbind.jar"/> + <property name="ibm.mqjms.jar" value="${thirdparty.dir}/IBM/MQSeries/5.2.2/com.ibm.mqjms.jar"/> + <property name="ibm.mq.connector.jar" value="${thirdparty.dir}/IBM/MQSeries/5.2.2/connector.jar"/> + <property name="ibm.mq.jta.jar" value="${thirdparty.dir}/IBM/MQSeries/5.2.2/jta.jar"/> + <property name="microsoftsecurityclasses.zip" value="${thirdparty.dir}/Microsoft/security/5.00.2922.0/MicrosoftSecurityClasses.zip"/> + <property name="commons-codec.jarname" value="commons-codec-1.1.1-dev.jar"/> + <property name="commons-codec.jar" value="${apache.dir}/commons-codec/20030516/${commons-codec.jarname}"/> + <property name="commons-collections.jarname" value="commons-collections-2_1.jar"/> + <property name="commons-collections.jar" value="${apache.dir}/commons-collections/2.1/${commons-collections.jarname}"/> + <property name="commons-cli.jarname" value="commons-cli-1_0.jar"/> + <property name="commons-cli.jar" value="${apache.dir}/commons-cli/1.0/${commons-cli.jarname}"/> + <property name="commons-lang.jarname" value="commons-lang-2.0.jar"/> + <property name="commons-lang.jar" value="${apache.dir}/commons-lang/2.0/${commons-lang.jarname}"/> + <property name="commons-pool.jarname" value="commons-pool.jar"/> + <property name="commons-pool.jar" value="${apache.dir}/commons-pool/20030429/${commons-pool.jarname}"/> + <property name="ctgclient.jarname" value="ctgclient.jar"/> + <property name="ctgclient.dir" value="${thirdparty.dir}/IBM/CICS Transaction Gateway/5.0"/> + <property name="ctgclient.jar" value="${ctgclient.dir}/${ctgclient.jarname}"/> + <property name="jakarta-oro.jarname" value="jakarta-oro-2.0.7.jar"/> + <property name="jakarta-oro.jar" value="${apache.dir}/jakarta-oro/2.0.7/${jakarta-oro.jarname}"/> + <property name="log4j.jarname" value="log4j-1_2_7.jar"/> + <property name="log4j.jar" value="${apache.dir}/jakarta-log4j/1.2.7/${log4j.jarname}"/> + <property name="goXMLEngine.jar" value="${thirdparty.dir}/XMLGlobal/GoXMLTransform/3_0_0/lib/engine.jar"/> + <property name="goXMLResource.zip" value="${thirdparty.dir}/XMLGlobal/GoXMLTransform/3_0_0/lib/resource.zip"/> + <property name="goXMLconfig.dir" value="${thirdparty.dir}/XMLGlobal/GoXMLTransform/3_0_0/config"/> + <!-- JDom beta 8 is not compatible with GoXMLTransform 3.0.0, use beta 7 from GoXMLTransform 3.0.0 --> + <property name="jdom.jarname" value="jdom.jar"/> + <property name="jdom.jar" value="${thirdparty.dir}/XMLGlobal/GoXMLTransform/3_0_0/lib/${jdom.jarname}"/> + <property name="jaxb1.jarname" value="jaxb-api.jar"/> + <property name="jaxb2.jarname" value="jaxb-impl.jar"/> + <property name="jaxb3.jarname" value="jaxb-libs.jar"/> + <property name="jaxb4.jarname" value="jax-qname.jar"/> + <property name="jaxb5.jarname" value="namespace.jar"/> + <property name="jaxb6.jarname" value="xsdlib.jar"/> + <property name="jaxb7.jarname" value="relaxngDatatype.jar"/> + <property name="jaxb.jarnames" value="${jaxb1.jarname} ${jaxb2.jarname} ${jaxb3.jarname} ${jaxb4.jarname} ${jaxb5.jarname} ${jaxb6.jarname} ${jaxb7.jarname} "/> + <property name="jwsdp.dir" value="${thirdparty.dir}/sun/jwsdp/1.2"/> + <property name="jaxb.dir" value="${jwsdp.dir}/jaxb/lib"/> + <property name="jaxb.shared.dir" value="${jwsdp.dir}/jwsdp-shared/lib"/> + <property name="jaxb1.jar" value="${jaxb.dir}/${jaxb1.jarname}"/> + <property name="jaxb2.jar" value="${jaxb.dir}/${jaxb2.jarname}"/> + <property name="jaxb3.jar" value="${jaxb.dir}/${jaxb3.jarname}"/> + <property name="jaxb4.jar" value="${jaxb.shared.dir}/${jaxb4.jarname}"/> + <property name="jaxb5.jar" value="${jaxb.shared.dir}/${jaxb5.jarname}"/> + <property name="jaxb6.jar" value="${jaxb.shared.dir}/${jaxb6.jarname}"/> + <property name="jaxb7.jar" value="${jaxb.shared.dir}/${jaxb7.jarname}"/> + <property name="jms.jarname" value="jms-1_0_2_b.jar"/> + <property name="jms.jar" value="${thirdparty.dir}/sun/jms/1.0.2b/${jms.jarname}"/> + <property name="jce.jarname" value="jce1_2_2.jar"/> + <property name="jce.jar" value="${thirdparty.dir}/sun/jce/1.2.2/lib/${jce.jarname}"/> + <property name="jce_provider.jarname" value="sunjce_provider.jar"/> + <property name="jce_provider.jar" value="${thirdparty.dir}/sun/jce/1.2.2/lib/${jce_provider.jarname}"/> + <property name="jcert.jarname" value="jcert.jar"/> + <property name="jnet.jarname" value="jnet.jar"/> + <property name="jsse.jarname" value="jsse.jar"/> + <property name="jsse.dir" value="${thirdparty.dir}/sun/jsse/1.0.3_02-gl/lib"/> + <property name="jcert.jar" value="${jsse.dir}/${jcert.jarname}"/> + <property name="jnet.jar" value="${jsse.dir}/${jnet.jarname}"/> + <property name="jsse.jar" value="${jsse.dir}/${jsse.jarname}"/> + <property name="jaas.jarname" value="jaas-1_0.jar"/> + <property name="jaas.jar" value="${thirdparty.dir}/sun/jaas/1.0/lib/${jaas.jarname}"/> + <property name="jta.jarname" value="jta-1_0_1B-classes.zip"/> + <property name="jta.jar" value="${thirdparty.dir}/sun/jta/jta-1_0_1b/${jta.jarname}"/> + <property name="concurrent.jarname" value="concurrent-1_3_2.jar"/> + <property name="concurrent.jar" value="${thirdparty.dir}/oswego.edu/util.concurrent/1.3.2/${concurrent.jarname}"/> + <property name="xmlsec.jar" value="${apache.dir}/xml-security/xml-security-1_0_4/build/xmlsec-1_0_4.jar"/> + <property name="imsico.jarname" value="imsico-1_2_5.jar"/> + <property name="imsico.jar" value="${thirdparty.dir}/IBM/IMSICO/1.2.5/${imsico.jarname}"/> + <property name="imsico-connector.jarname" value="imsico-connector-1_2_5.jar"/> + <property name="imsico-connector.jar" value="${thirdparty.dir}/IBM/IMSICO/1.2.5/${imsico-connector.jarname}"/> + <property name="junit.jar" value="${thirdparty.dir}/junit/3.8.1/junit.jar"/> + <property name="mtjunit.jar" value="${thirdparty.dir}/MTJUnit/1.0/MTJUnit-1.jar"/> + <property name="retroguard.jar" value="${thirdparty.dir}/Retroguard/1.1.13/retroguard.jar"/> + <property name="j2se.tools.jarname" value="tools.jar"/> + <property name="j2se.tools.jar" value="${thirdparty.dir}/sun/j2se/1.3.1_08/lib/${j2se.tools.jarname}"/> + <property name="obfuscate.script" value="${src.root.dir}/Build/obfuscate_hsc.rgs"/> + <property name="obfuscate.log" value="${build.lib}/obfuscate_hsc.log"/> + <property name="extension.dir.name" value="ext"/> + <property name="compile.debug" value="on"/> + <property name="compile.optimize" value="off"/> + <!-- These two will normally be set outside this file in the build.properties file. --> + <property name="version" value="2.3.X.WIP"/> + <property name="build.id" value="0"/> + <!-- Jar Manifest standard properties --> + <property name="manifest.key.main-class" value="Main-Class"/> + <property name="manifest.key.class-path" value="Class-Path"/> + <!-- Jar Manifest Seagull properties --> + <property name="manifest.key.product" value="${COMPANY.word}-Product"/> + <property name="manifest.key.component" value="${COMPANY.word}-Component"/> + <property name="manifest.key.version" value="${COMPANY.word}-Version"/> + <property name="manifest.key.build" value="${COMPANY.word}-Build"/> + <property name="manifest.key.build-ts" value="${COMPANY.word}-Build-Timestamp"/> + <!-- Javadoc --> + <property name="javadoc.j2se.link" value="http://java.sun.com/j2se/1.3/docs/api/"/> + <!-- Checksum --> + <property name="checksum.algorithm.md5" value="MD5"/> + <property name="checksum.algorithm.sha" value="SHA"/> + <!-- =================================================================== --> + <!-- Source files and class paths --> + <!-- =================================================================== --> + <!-- AIS --> + <patternset id="ais.files"> + <include name="com/seagullsw/appinterface/server/**"/> + <include name="com/seagullsw/perftest/"/> + <exclude name="com/seagullsw/appinterface/server/backend/cics/"/> + <exclude name="com/seagullsw/appinterface/server/backend/cobol/"/> + <exclude name="com/seagullsw/appinterface/server/backend/ims/"/> + <exclude name="com/seagullsw/appinterface/server/backend/hostconnector/"/> + <exclude name="com/seagullsw/appinterface/server/backend/hostconnector2/"/> + <exclude name="com/seagullsw/appinterface/server/backend/hc5250/"/> + <exclude name="com/seagullsw/appinterface/server/backend/hc3270/"/> + <exclude name="com/seagullsw/appinterface/server/admin/"/> + <exclude name="com/seagullsw/appinterface/server/InvocationUnitTests.*"/> + </patternset> + <property name="ais-core.jarname" value="ais-core.jar"/> + <property name="ais-core.jar" value="${build.lib}/${ais-core.jarname}"/> + <path id="jaxb.classpath"> + <pathelement location="${jaxb1.jar}"/> + <pathelement location="${jaxb2.jar}"/> + <pathelement location="${jaxb3.jar}"/> + <pathelement location="${jaxb4.jar}"/> + <pathelement location="${jaxb5.jar}"/> + <pathelement location="${jaxb6.jar}"/> + <pathelement location="${jaxb7.jar}"/> + </path> + <path id="jsse.classpath"> + <pathelement location="${jcert.jar}"/> + <pathelement location="${jnet.jar}"/> + <pathelement location="${jsse.jar}"/> + </path> + <path id="jce.classpath.rt"> + <pathelement location="${jce.jar}"/> + <pathelement location="${jce_provider.jar}"/> + </path> + <path id="ais.classpath"> + <pathelement location="${ibm.mq.jar}"/> + <pathelement location="${ibm.mqbind.jar}"/> + <pathelement location="${ibm.mqjms.jar}"/> + <pathelement location="${xerces.jar}"/> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${xalan.jar}"/> + <pathelement location="${soap.jar}"/> + <pathelement location="${mail.jar}"/> + <pathelement location="${commons-codec.jar}"/> + <pathelement location="${commons-collections.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${commons-pool.jar}"/> + <pathelement location="${commons-cli.jar}"/> + <path refid="jaxb.classpath"/> + <pathelement location="${jms.jar}"/> + <pathelement location="${concurrent.jar}"/> + <pathelement location="${jce.jar}"/> + </path> + <path id="xml.classpath.compile"> + <pathelement location="${xml-apis.jar}"/> + </path> + <path id="xml.classpath.rt"> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${xerces.jar}"/> + <pathelement location="${xalan.jar}"/> + </path> + <path id="transforms.classpath"> + <pathelement location="${jakarta-oro.jar}"/> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${xerces.jar}"/> + <pathelement location="${xalan.jar}"/> + <pathelement location="${goXMLEngine.jar}"/> + <path refid="jaxb.classpath"/> + <pathelement location="${commons-lang.jar}"/> + </path> + <path id="ais.client.classpath"> + <pathelement location="${ibm.mq.jar}"/> + <pathelement location="${ibm.mqbind.jar}"/> + <pathelement location="${ibm.mqjms.jar}"/> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${commons-collections.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${commons-pool.jar}"/> + <path refid="jaxb.classpath"/> + <pathelement location="${jms.jar}"/> + </path> + <!-- AppInterface Communications --> + <patternset id="appinterfacecomm.files"> + <include name="com/seagullsw/appinterface/comm/"/> + <exclude name="com/seagullsw/appinterface/comm/servlet/*"/> + </patternset> + <!-- MTalk Communications --> + <patternset id="mtalkcomm.files"> + <include name="com/seagullsw/net/client/mtalk/"/> + </patternset> + <!-- AppInterface Setting --> + <patternset id="appinterfacesettings.files"> + <include name="com/seagullsw/appinterface/settings/*"/> + </patternset> + <path id="appinterfacesettings.classpath"> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${commons-lang.jar}"/> + </path> + <!-- AppInterface Server Settings --> + <patternset id="appinterfaceserversettings.files"> + <include name="com/seagullsw/appinterface/server/settings/"/> + </patternset> + <!-- AppInterface Client --> + <patternset id="ais.client.files"> + <include name="com/seagullsw/appinterface/client/"/> + <include name="com/seagullsw/toolbox/config/"/> + <include name="com/seagullsw/toolbox/xml/"/> + <include name="com/seagullsw/toolbox/log/"/> + </patternset> + <property name="ais.client.jarname" value="ais-client.jar"/> + <property name="ais.client.jar" value="${build.lib}/${ais.client.jarname}"/> + <!-- AppInterface Admin Client--> + <patternset id="ais.adminclient.files"> + <include name="com/seagullsw/appinterface/server/admin/*"/> + </patternset> + <path id="ais.adminclient.classpath"> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${commons-cli.jar}"/> + </path> + <property name="ais-adminclient.jarname" value="ais-admin-client.jar"/> + <property name="ais-adminclient.jar" value="${build.lib}/${ais-adminclient.jarname}"/> + <!-- AppInterface Models --> + <patternset id="appinterfacemodels.files"> + <include name="com/seagullsw/appinterface/model/"/> + <exclude name="com/seagullsw/appinterface/model/cics/"/> + <exclude name="com/seagullsw/appinterface/model/cobol/"/> + <exclude name="com/seagullsw/appinterface/model/ims/"/> + </patternset> + <!-- Java Extensions --> + <patternset id="javaextensions.files"> + <include name="com/seagullsw/debug/*"/> + <include name="com/seagullsw/javax/"/> + <exclude name="com/seagullsw/javax/swing/"/> + </patternset> + <path id="javaextensions.classpath"> + <pathelement location="${commons-lang.jar}"/> + </path> + <!-- UIFacilities --> + <patternset id="uifacilities.files"> + <include name="com/parcplace/pjava/Framer/"/> + <include name="com/seagullsw/javax/swing/SwingUtilitiesX.*"/> + <include name="com/seagullsw/javax/swing/JTextPaneX.*"/> + <include name="com/seagullsw/javax/swing/border/"/> + <include name="com/seagullsw/ui/"/> + <include name="com/seagullsw/debug/ui/"/> + </patternset> + <path id="uifacilities.classpath"> + <pathelement location="${commons-lang.jar}"/> + </path> + <!-- XML Services --> + <patternset id="xmlservices.files"> + <include name="com/seagullsw/io/xml/"/> + </patternset> + <path id="xmlservices.classpath"> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${xerces.jar}"/> + </path> + <!-- Transforms --> + <patternset id="transforms.files"> + <include name="com/seagullsw/appinterface/transforms/"/> + </patternset> + <!-- Seagull Toolbox --> + <patternset id="seagulltoolbox.files"> + <include name="com/seagullsw/toolbox/"/> + </patternset> + <path id="seagulltoolbox.classpath"> + <path refid="xml.classpath.rt"/> + <path refid="jaxb.classpath"/> + <path refid="jsse.classpath"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${commons-cli.jar}"/> + </path> + <!-- Win32 Interface --> + <patternset id="win32interface.files"> + <include name="com/seagullsw/appinterface/win32/"/> + </patternset> + <!-- Proxy Servlet --> + <patternset id="proxyservlet.files"> + <include name="com/seagullsw/appinterface/comm/servlet/"/> + </patternset> + <property name="proxyservlet.jarname" value="ais-servlet-proxy.jar"/> + <property name="proxyservlet.jar" value="${build.lib}/${proxyservlet.jarname}"/> + <path id="proxyservlet.classpath"> + <pathelement location="${servlet.jar}"/> + <pathelement location="${xerces.jar}"/> + </path> + <!-- Admin Console --> + <patternset id="adminconsole.files"> + <include name="com/seagullsw/appinterface/server/admin/client/"/> + </patternset> + <property name="adminconsole.jarname" value="ais-admin.jar"/> + <property name="adminconsole.jar" value="${build.lib}/${adminconsole.jarname}"/> + <!-- Java Connector Generator --> + <patternset id="javaconnectorgenerator.files"> + <include name="com/seagullsw/appinterface/tools/javaconnectorgenerator/"/> + </patternset> + <property name="javaconnectorgenerator.jarname" value="JavaConnectorGenerator.jar"/> + <property name="javaconnectorgenerator.jar" value="${build.lib}/${javaconnectorgenerator.jarname}"/> + <!-- Security Toolkit --> + <patternset id="securitytoolkit.files"> + <include name="com/seagullsw/appinterface/tools/security/"/> + </patternset> + <property name="securitytoolkit.jarname" value="SecurityToolkit.jar"/> + <property name="securitytoolkit.jar" value="${build.lib}/${securitytoolkit.jarname}"/> + <!-- Tools Framework --> + <patternset id="devtools.framework.files"> + <include name="com/seagullsw/appinterface/tools/framework/"/> + </patternset> + <path id="devtools.framework.classpath"> + <pathelement location="${commons-lang.jar}"/> + </path> + <!-- Dev Tools --> + <patternset id="devtools.files"> + <include name="com/seagullsw/appinterface/tools/"/> + <exclude name="com/seagullsw/appinterface/tools/security/"/> + </patternset> + <path id="devtools.classpath"> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${soap.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${jce.jar}"/> + </path> + <property name="ais-tools.jarname" value="ais-tools.jar"/> + <property name="ais-tools.jar" value="${build.lib}/${ais-tools.jarname}"/> + <!-- JavaTools (e.g. invoking the Java compiler) --> + <patternset id="javatools.files"> + <include name="com/seagullsw/javatools/"/> + </patternset> + <path id="javatools.classpath"> + <pathelement location="${j2se.tools.jar}"/> + <pathelement location="${jce.jar}"/> + <path refid="jaxb.classpath"/> + <pathelement location="${commons-lang.jar}"/> + </path> + <!-- Backends --> + <patternset id="hcbackend.files"> + <include name="com/seagullsw/appinterface/**/*hostconnector*/"/> + <include name="com/seagullsw/appinterface/server/backend/hsc/**"/> + </patternset> + <patternset id="cobol.files"> + <include name="com/seagullsw/appinterface/server/backend/cobol/"/> + <include name="com/seagullsw/appinterface/model/cobol/"/> + </patternset> + <path id="cobol.classpath"> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + </path> + <patternset id="cics.files"> + <include name="com/seagullsw/appinterface/server/backend/cics/"/> + <include name="com/seagullsw/appinterface/model/cics/"/> + </patternset> + <patternset id="ims.backend.files"> + <include name="com/seagullsw/appinterface/server/backend/ims/"/> + <include name="com/seagullsw/appinterface/model/ims/"/> + </patternset> + <path id="cics.backend.classpath"> + <pathelement location="${ctgclient.jar}"/> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${xerces.jar}"/> + <path refid="jaxb.classpath"/> + <pathelement location="${jce.jar}"/> + <pathelement location="${commons-codec.jar}"/> + <pathelement location="${commons-lang.jar}"/> + </path> + <path id="ims.backend.classpath"> + <pathelement location="${xml-apis.jar}"/> + <pathelement location="${jaas.jar}"/> + <pathelement location="${imsico.jar}"/> + <pathelement location="${imsico-connector.jar}"/> + <pathelement location="${jce.jar}"/> + <pathelement location="${jta.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <path refid="jaxb.classpath"/> + </path> + <property name="ais-5250.jarname" value="ais-5250.jar"/> + <property name="ais-5250.jar" value="${build.lib}/${ais-5250.jarname}"/> + <property name="ais-3270.jarname" value="ais-3270.jar"/> + <property name="ais-3270.jar" value="${build.lib}/${ais-3270.jarname}"/> + <property name="ais-cobol.jarname" value="ais-cobol.jar"/> + <property name="ais-cobol.jar" value="${build.lib}/${ais-cobol.jarname}"/> + <property name="ais-cics.jarname" value="ais-cics.jar"/> + <property name="ais-cics.jar" value="${build.lib}/${ais-cics.jarname}"/> + <property name="ais-ims.jarname" value="ais-ims.jar"/> + <property name="ais-ims.jar" value="${build.lib}/${ais-ims.jarname}"/> + <property name="hsc.jarname" value="gwhsc.jar"/> + <property name="hsc.jar" value="${build.lib}/${hsc.jarname}"/> + <property name="hscu.jarname" value="gwhscu.jar"/> + <property name="hscu.jar" value="${build.lib}/${hscu.jarname}"/> + <!-- HSC --> + <patternset id="hsc.files"> + <include name="com/seagullsw/gateway/"/> + <include name="com/seagullsw/net/"/> + <include name="com/seagullsw/security/"/> + <include name="com/seagullsw/system/"/> + <exclude name="com/seagullsw/net/client/mtalk/"/> + </patternset> + <!-- All the XSLT files --> + <fileset id="xslt.files" dir="${xslt.resource.dir}"> + <include name="*.xsl"/> + </fileset> + <!-- All the AppInterface "base" classes --> + <fileset id="appinterface.base.files" dir="${build.classes}"> + <patternset refid="appinterfacecomm.files"/> + <patternset refid="appinterfacemodels.files"/> + <patternset refid="javaextensions.files"/> + <patternset refid="xmlservices.files"/> + <patternset refid="mtalkcomm.files"/> + </fileset> + <!-- All the AppInterface "base" classes --> + <fileset id="appinterface.baseplus.files" dir="${build.classes}"> + <!-- What I really want to do here is refer to the .base.files + fileset, but ant doesn't allow nested filesets. Sigh. + <fileset refid="appinterface.base.files"/> --> + <patternset refid="appinterfacecomm.files"/> + <patternset refid="appinterfacemodels.files"/> + <patternset refid="javaextensions.files"/> + <patternset refid="xmlservices.files"/> + <patternset refid="appinterfacesettings.files"/> + <patternset refid="uifacilities.files"/> + <patternset refid="seagulltoolbox.files"/> + <patternset refid="mtalkcomm.files"/> + <patternset refid="transforms.files"/> + </fileset> + <!-- =================================================================== --> + <!-- Set file copy filters --> + <!-- =================================================================== --> + <property name="text.copyright.1" value="(c) 1993 - 2003 Seagull Business Software Ireland Ltd."/> + <property name="text.copyright.2" value="All Rights Reserved."/> + <target name="init.filters"> + <filter token="PRODUCT" value="${product.name}"/> + <filter token="VERSION" value="${version}"/> + <filter token="BUILDID" value="${build.id}"/> + <filter token="BUILDTIMESTAMP" value="${BuildTimeStamp}"/> + <filter token="COPYRIGHT-1" value="${text.copyright.1}"/> + <filter token="COPYRIGHT-2" value="${text.copyright.2}"/> + </target> + <!-- =================================================================== --> + <!-- Compiles --> + <!-- =================================================================== --> + <target name="compile" depends="compile.ais, compile.ais.client, compile.ais.adminclient, compile.devtools, compile.proxyservlet, compile.adminconsole, compile.javaconnectorgenerator, compile.securitytoolkit, compile.hcbackend, compile.cobol, compile.cics, compile.IMSbackend" description="Compiles all the sources into ${build.classes}"/> + <!-- doACompile - a compile "subroutine" --> + <target name="doACompile"> + <javac srcdir="${src.dir}" destdir="${build.classes}" debug="${compile.debug}" optimize="${compile.optimize}" failonerror="true" includeAntRuntime="false"> + <patternset refid="${doACompile.files}"/> + </javac> + </target> + <!-- doACompileWithClasspath - a compile "subroutine" --> + <target name="doACompileWithClasspath"> + <javac srcdir="${src.dir}" destdir="${build.classes}" debug="${compile.debug}" optimize="${compile.optimize}" failonerror="true" includeAntRuntime="false"> + <patternset refid="${doACompile.files}"/> + <classpath refid="${doACompile.classpath}"/> + </javac> + </target> + <!-- AIS --> + <target name="compile.ais" depends="compile.toolbox, compile.xmlservices, compile.transforms, compile.uifacilities, compile.appinterfacesettings, compile.appinterfacemodels, compile.appinterfacecomm, compile.hsc, compile.mtalkcomm"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="ais.files"/> + <param name="doACompile.classpath" value="ais.classpath"/> + </antcall> + </target> + <!-- AppInterface Models --> + <target name="compile.appinterfacemodels" depends="prepare, compile.xmlservices"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="appinterfacemodels.files"/> + <param name="doACompile.classpath" value="ais.classpath"/> + </antcall> + </target> + <!-- AppInterface Communications --> + <target name="compile.appinterfacecomm" depends="prepare"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="appinterfacecomm.files"/> + <param name="doACompile.classpath" value="ais.classpath"/> + </antcall> + </target> + <!-- MTalk Communication --> + <target name="compile.mtalkcomm" depends="prepare"> + <antcall target="doACompile"> + <param name="doACompile.files" value="mtalkcomm.files"/> + </antcall> + </target> + <!-- AppInterface Setting --> + <target name="compile.appinterfacesettings" depends="prepare"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="appinterfacesettings.files"/> + <param name="doACompile.classpath" value="appinterfacesettings.classpath"/> + </antcall> + </target> + <!-- UI Facilities --> + <target name="compile.uifacilities" depends="prepare"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="uifacilities.files"/> + <param name="doACompile.classpath" value="uifacilities.classpath"/> + </antcall> + </target> + <!-- Java Extensions --> + <target name="compile.javaextensions" depends="prepare"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="javaextensions.files"/> + <param name="doACompile.classpath" value="javaextensions.classpath"/> + </antcall> + </target> + <!-- XML Services --> + <target name="compile.xmlservices" depends="compile.javaextensions"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="xmlservices.files"/> + <param name="doACompile.classpath" value="xmlservices.classpath"/> + </antcall> + </target> + <!-- Transforms --> + <target name="compile.transforms" depends="compile.javaextensions"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="transforms.files"/> + <param name="doACompile.classpath" value="transforms.classpath"/> + </antcall> + </target> + <!-- Seagull Toolbox --> + <target name="compile.toolbox" depends="compile.javaextensions"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="seagulltoolbox.files"/> + <param name="doACompile.classpath" value="seagulltoolbox.classpath"/> + </antcall> + </target> + <!-- Win32 Interface --> + <target name="compile.win32interface" depends="prepare"> + <antcall target="doACompile"> + <param name="doACompile.files" value="win32interface.files"/> + </antcall> + </target> + <!-- AppInterface Client --> + <target name="compile.ais.client" depends="prepare, compile.xmlservices, compile.appinterfacecomm, compile.appinterfacemodels"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="ais.client.files"/> + <param name="doACompile.classpath" value="ais.client.classpath"/> + </antcall> + </target> + <!-- AppInterface Admin Client --> + <target name="compile.ais.adminclient" depends="prepare, compile.xmlservices, compile.appinterfacecomm, compile.appinterfacemodels, compile.ais.client"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="ais.adminclient.files"/> + <param name="doACompile.classpath" value="ais.classpath"/> + </antcall> + </target> + <!-- Proxy Servlet --> + <target name="compile.proxyservlet" depends="prepare"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="proxyservlet.files"/> + <param name="doACompile.classpath" value="proxyservlet.classpath"/> + </antcall> + </target> + <!-- Admin Console --> + <target name="compile.adminconsole" depends="prepare, compile.devtools.framework"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="adminconsole.files"/> + <param name="doACompile.classpath" value="ais.adminclient.classpath"/> + </antcall> + </target> + <!-- Java Connector Generator --> + <target name="compile.javaconnectorgenerator" depends="prepare, compile.devtools.framework, compile.appinterfacemodels, compile.javatools"> + <antcall target="doACompile"> + <param name="doACompile.files" value="javaconnectorgenerator.files"/> + </antcall> + </target> + <!-- Security Toolkit --> + <target name="compile.securitytoolkit" depends="prepare, compile.devtools.framework, compile.appinterfacemodels, compile.javatools"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="securitytoolkit.files"/> + <param name="doACompile.classpath" value="devtools.classpath"/> + </antcall> + </target> + <!-- Tools Framework --> + <target name="compile.devtools.framework" depends="prepare, compile.toolbox, compile.xmlservices, compile.uifacilities, compile.appinterfacesettings"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="devtools.framework.files"/> + <param name="doACompile.classpath" value="devtools.framework.classpath"/> + </antcall> + </target> + <!-- DevTools --> + <target name="compile.devtools" depends="prepare, compile.devtools.framework, compile.ais.client, compile.appinterfacemodels, compile.javatools"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="devtools.files"/> + <param name="doACompile.classpath" value="devtools.classpath"/> + </antcall> + </target> + <!-- JavaTools (e.g. invoking the Java compiler) --> + <target name="compile.javatools" depends="prepare"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="javatools.files"/> + <param name="doACompile.classpath" value="javatools.classpath"/> + </antcall> + </target> + <!-- Backends --> + <target name="compile.hcbackend" depends="prepare, compile.ais"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="hcbackend.files"/> + <param name="doACompile.classpath" value="ais.classpath"/> + </antcall> + </target> + <target name="compile.cobol" depends="prepare, compile.ais"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="cobol.files"/> + <param name="doACompile.classpath" value="cobol.classpath"/> + </antcall> + </target> + <target name="compile.cics" depends="prepare, compile.ais"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="cics.files"/> + <param name="doACompile.classpath" value="cics.backend.classpath"/> + </antcall> + </target> + <target name="compile.IMSbackend" depends="prepare, compile.ais"> + <antcall target="doACompileWithClasspath"> + <param name="doACompile.files" value="ims.backend.files"/> + <param name="doACompile.classpath" value="ims.backend.classpath"/> + </antcall> + </target> + <!-- HSC --> + <target name="compile.hsc" depends="prepare"> + <javac srcdir="${src.sourcesafemirror.dir}" classpath="${microsoftsecurityclasses.zip}" destdir="${build.classes}" debug="${compile.debug}" includeAntRuntime="false"> + <include name="com/seagullsw/"/> + </javac> + </target> + <!-- JavaDoc doclet --> + <target name="compile.doclet"> + <javac srcdir="${src.dir}" destdir="${build.classes}" debug="${compile.debug}" includeAntRuntime="true"> + <include name="com/seagullsw/internaldev/tools/apidoclet//"/> + </javac> + </target> + <!-- =================================================================== --> + <!-- Create jar files --> + <!-- =================================================================== --> + <target name="compute-checksum"> + <checksum file="${file}" algorithm="${checksum.algorithm.md5}" property="cs_value"/> + <echo level="info" message="${checksum.algorithm.md5} -> ${cs_value}"/> + <mkdir dir="${build.checksum}"/> + <!-- Create a text file with the checksum value. --> + <concat destfile="${build.checksum}/${filename}.${checksum.algorithm.md5}.txt">${cs_value}</concat> + <!-- Create an XML file with the checksum value. --> + <concat destfile="${build.checksum}/${filename}.${checksum.algorithm.md5}.xml"><?xml version="1.0"?> +<!-- Build auto-generated --> +<checksum file="${filename}" algorithm="${checksum.algorithm.md5}">${cs_value}</checksum></concat> + <xmlvalidate file="${build.checksum}/${filename}.${checksum.algorithm.md5}.xml" lenient="true"/> + </target> + <!-- Create all-jars.xml --> + <target name="create-all-jars.xml"> + <!-- Create an XML file with the jar file names created. --> + <concat destfile="${all-jars.xml}"><?xml version="1.0"?> +<!-- Build auto-generated --> +<jars> + <jar>${ais-core.jarname}</jar> + <jar>${ais.client.jarname}</jar> + <jar>${ais-adminclient.jarname}</jar> + <jar>${proxyservlet.jarname}</jar> + <jar>${adminconsole.jarname}</jar> + <jar>${javaconnectorgenerator.jarname}</jar> + <jar>${securitytoolkit.jarname}</jar> + <jar>${ais-tools.jarname}</jar> + <jar>${ais-5250.jarname}</jar> + <jar>${ais-3270.jarname}</jar> + <jar>${ais-cobol.jarname}</jar> + <jar>${ais-cics.jarname}</jar> + <jar>${ais-ims.jarname}</jar> + <jar>${hsc.jarname}</jar> + <jar>${hscu.jarname}</jar> +</jars> + </concat> + <echo level="info" message="Created ${all-jars.xml}"/> + <xmlvalidate file="${all-jars.xml}" lenient="true"/> + </target> + <!-- Copy checksum files to report dir --> + <target name="copy-checksums"> + <antcall target="create-all-jars.xml"/> + <copy todir="${reports.checksum}"> + <fileset dir="${build.checksum}"/> + </copy> + </target> + <target name="jars" depends="jar.ais-core, jar.ais.client, jar.ais.adminclient, jar.proxyservlet, jar.adminconsole, jar.javaconnectorgenerator, jar.securitytoolkit, jar.ais-tools, jar.ais-5250, jar.ais-3270, jar.ais-cobol, jar.ais-cics, jar.ais-ims, jar.hsc" description="Creates the jar files in ${build.lib}"> + <antcall target="copy-checksums"/> + </target> + <target name="jar.ais-core" depends="init, compile.ais, createSplash.ais.splashscreens"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${ais-core.jar}" basedir="${build.classes}"> + <patternset refid="ais.files"/> + <fileset refid="appinterface.baseplus.files"/> + <patternset> + <include name="com/seagullsw/javax/swing/"/> + <!-- Not sure why this isn't getting included as part of uifacilities.files via appinterface.baseplus.files. --> + </patternset> + <fileset refid="xslt.files"/> + <fileset dir="${java.resource.dir}"> + <include name="com/seagullsw/appinterface/server/**"/> + <include name="com/seagullsw/appinterface/comm/**"/> + <exclude name="com/seagullsw/appinterface/server/admin/**"/> + </fileset> + <fileset dir="${src.dir}"> + <include name="com/seagullsw/**/jaxb.properties"/> + <include name="com/seagullsw/**/bgm.ser"/> + </fileset> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.main-class}" value="com.seagullsw.appinterface.server.AppInterfaceServer"/> + <attribute name="${manifest.key.class-path}" value="${ais-5250.jarname} ${ais-3270.jarname} ${ais-cobol.jarname} ${ais-cics.jarname} ${ais-ims.jarname} ${xalan.jarname} ${soap.jarname} ${activation.jarname} ${mail.jarname} ${commons-collections.jarname} ${commons-pool.jarname} ${xerces.jarname} ${xml-apis.jarname} ${commons-lang.jarname} ${commons-cli.jarname} ${jaxb.jarnames} ${jakarta-oro.jarname} ${concurrent.jarname} ${commons-httpclient.jarname} ${jms.jarname} ${extension.dir.name}/engine.jar ${extension.dir.name}/resource.zip ${extension.dir.name}/jdom.jar ../${fdef.dirname}/ ../JavaConnectors/Classes/"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="AIS Core"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais-core.jar}"/> + <param name="filename" value="${ais-core.jarname}"/> + </antcall> + </target> + <target name="jar.ais.client" depends="init, compile.ais.client"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${ais.client.jar}" basedir="${build.classes}"> + <patternset refid="ais.client.files"/> + <fileset refid="appinterface.base.files"/> + <fileset dir="${src.dir}"> + <include name="com/seagullsw/toolbox/config/**/jaxb.properties"/> + <include name="com/seagullsw/toolbox/config/**/bgm.ser"/> + </fileset> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.class-path}" value="${xerces.jarname} ${xml-apis.jarname} ${commons-lang.jarname} ${jaxb.jarnames} ${ibm.mq.jarname} ${jms.jarname} ${mail.jarname} ${soap.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Java Client"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais.client.jar}"/> + <param name="filename" value="${ais.client.jarname}"/> + </antcall> + </target> + <target name="jar.ais.adminclient" depends="init, compile.ais.adminclient"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${ais-adminclient.jar}" basedir="${build.classes}"> + <patternset refid="ais.adminclient.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.class-path}" value="${ais.client.jarname} ${xerces.jarname} ${xml-apis.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Java Admin Client"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais-adminclient.jar}"/> + <param name="filename" value="${ais-adminclient.jarname}"/> + </antcall> + </target> + <target name="jar.proxyservlet" depends="init, compile.proxyservlet"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${proxyservlet.jar}" basedir="${build.classes}"> + <patternset refid="proxyservlet.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.class-path}" value="${ais.client.jarname} ${servlet.jarname} ${xerces.jarname} ${xml-apis.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Servlet Proxy"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${proxyservlet.jar}"/> + <param name="filename" value="${proxyservlet.jarname}"/> + </antcall> + </target> + <target name="jar.adminconsole" depends="init, compile.adminconsole, createSplash.ais.splashscreens"> + <mkdir dir="${build.lib}"/> + <!-- Copy "resource" files that go in the jar file. --> + <copy toDir="${build.classes}" preservelastmodified="true"> + <fileset dir="${java.resource.dir}"> + <include name="com/seagullsw/appinterface/server/admin/client/"/> + <include name="com/seagullsw/appinterface/server/*.jpg"/> + </fileset> + </copy> + <jar jarfile="${adminconsole.jar}" basedir="${build.classes}"> + <patternset refid="adminconsole.files"/> + <patternset refid="devtools.framework.files"/> + <patternset refid="ais.client.files"/> + <patternset refid="appinterfaceserversettings.files"/> + <fileset refid="appinterface.baseplus.files"/> + <include name="com/seagullsw/appinterface/server/*.jpg"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.main-class}" value="com.seagullsw.appinterface.server.admin.client.AppInterfaceServerAdminUIClient"/> + <attribute name="${manifest.key.class-path}" value="${ais-core.jarname} ${xerces.jarname} ${xml-apis.jarname} ${xalan.jarname} ${soap.jarname} ${activation.jarname} ${mail.jarname} ${commons-cli.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Administrative Console"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${adminconsole.jar}"/> + <param name="filename" value="${adminconsole.jarname}"/> + </antcall> + </target> + <target name="jar.javaconnectorgenerator" depends="init, compile.javaconnectorgenerator"> + <mkdir dir="${build.lib}"/> + <!-- Copy "resource" files that go in the jar file. --> + <copy toDir="${build.classes}" preservelastmodified="true" filtering="true"> + <fileset dir="${java.resource.dir}"> + <include name="com/seagullsw/appinterface/tools/javaconnectorgenerator/"/> + </fileset> + </copy> + <jar jarfile="${javaconnectorgenerator.jar}" basedir="${build.classes}"> + <patternset refid="javaconnectorgenerator.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.main-class}" value="com.seagullsw.appinterface.tools.javaconnectorgenerator.JavaConnectorGenerator"/> + <attribute name="${manifest.key.class-path}" value="${ais-tools.jarname} ${xml-apis.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Java Connector Generator"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${javaconnectorgenerator.jar}"/> + <param name="filename" value="${javaconnectorgenerator.jarname}"/> + </antcall> + </target> + <target name="jar.securitytoolkit" depends="init, compile.securitytoolkit"> + <mkdir dir="${build.lib}"/> + <!-- Copy "resource" files that go in the jar file. --> + <copy toDir="${build.classes}" preservelastmodified="true" filtering="true"> + <fileset dir="${java.resource.dir}"> + <include name="com/seagullsw/appinterface/tools/security/"/> + </fileset> + </copy> + <jar jarfile="${securitytoolkit.jar}" basedir="${build.classes}"> + <patternset refid="securitytoolkit.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.main-class}" value="com.seagullsw.appinterface.tools.security.SecurityToolkit"/> + <attribute name="${manifest.key.class-path}" value="${ais-core.jarname} ${ais-tools.jarname} ${xml-apis.jarname} ${commons-lang.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Security Toolkit"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${securitytoolkit.jar}"/> + <param name="filename" value="${securitytoolkit.jarname}"/> + </antcall> + </target> + <target name="jar.ais-tools" depends="init, compile.devtools, createSplash.tools.splashscreens, compile.win32interface, compile.javatools"> + <mkdir dir="${build.lib}"/> + <!-- Copy "resource" files that go in the jar file. --> + <copy toDir="${build.classes}" preservelastmodified="true"> + <fileset dir="${java.resource.dir}"> + <include name="com/seagullsw/appinterface/**/*.gif"/> + </fileset> + </copy> + <jar jarfile="${ais-tools.jar}" basedir="${build.classes}"> + <patternset refid="devtools.files"/> + <patternset refid="adminconsole.files"/> + <fileset refid="appinterface.baseplus.files"/> + <patternset> + <include name="com/seagullsw/appinterface/**/*settings*/"/> + <include name="com/seagullsw/javax/swing/"/> + <!-- Not sure why this isn't getting included as part of uifacilities.files via appinterface.baseplus.files. --> + </patternset> + <include name="com/seagullsw/appinterface/tools/images/*.jpg"/> + <include name="com/seagullsw/appinterface/**/*.gif"/> + <patternset refid="javatools.files"/> + <patternset refid="win32interface.files"/> + <patternset refid="ais.client.files"/> + <fileset refid="xslt.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.main-class}" value="com.seagullsw.appinterface.tools.serverdef.DefinitionTool"/> + <attribute name="${manifest.key.class-path}" value="${ais-cobol.jarname} ${ais-cics.jarname} ${ais-ims.jarname} ${xerces.jarname} ${xml-apis.jarname} ${xalan.jarname} ${soap.jarname} ${activation.jarname} ${mail.jarname} ${jaxb.jarnames} ${commons-lang.jarname} ${extension.dir.name}/${j2se.tools.jarname} ${ais-tools.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Tools"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais-tools.jar}"/> + <param name="filename" value="${ais-tools.jarname}"/> + </antcall> + </target> + <target name="jar.ais-5250" depends="init, compile.hcbackend"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${ais-5250.jar}" basedir="${build.classes}"> + <patternset refid="hcbackend.files"/> + <exclude name="com/seagullsw/appinterface/tools/"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.class-path}" value="${ais-core.jarname} ${hsc.jarname} ${hscu.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="5250 Connector"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais-5250.jar}"/> + <param name="filename" value="${ais-5250.jarname}"/> + </antcall> + </target> + <target name="jar.ais-3270" depends="init, compile.hcbackend"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${ais-3270.jar}" basedir="${build.classes}"> + <patternset refid="hcbackend.files"/> + <exclude name="com/seagullsw/appinterface/tools/"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.class-path}" value="${ais-core.jarname} ${hsc.jarname} ${hscu.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="3270 Connector"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais-3270.jar}"/> + <param name="filename" value="${ais-3270.jarname}"/> + </antcall> + </target> + <target name="jar.ais-cobol" depends="init, compile.cobol"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${ais-cobol.jar}" basedir="${build.classes}"> + <patternset refid="cobol.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.class-path}" value="${ais-core.jarname} ${ais-cics.jarname} ${ais-ims.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Cobol Connector"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais-cobol.jar}"/> + <param name="filename" value="${ais-cobol.jarname}"/> + </antcall> + </target> + <target name="jar.ais-cics" depends="init, compile.cics"> + <mkdir dir="${build.lib}"/> + <copy toDir="${build.classes}" preservelastmodified="true"> + <fileset dir="${src.dir}"> + <include name="com/seagullsw/**/jaxb.properties"/> + <include name="com/seagullsw/**/bgm.ser"/> + </fileset> + </copy> + <jar jarfile="${ais-cics.jar}" basedir="${build.classes}"> + <patternset refid="cics.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.class-path}" value="${ais-core.jarname} ${ais-cobol.jarname} ${extension.dir.name}/${ctgclient.jarname} ${commons-codec.jarname} ${commons-logging.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="CICS Connector"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais-cics.jar}"/> + <param name="filename" value="${ais-cics.jarname}"/> + </antcall> + </target> + <target name="jar.ais-ims" depends="init, compile.IMSbackend"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${ais-ims.jar}" basedir="${build.classes}"> + <patternset refid="ims.backend.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.class-path}" value="${ais-core.jarname} ${ais-cobol.jarname} ${imsico.jarname} ${imsico-connector.jarname} ${jaas.jarname} ${jta.jarname}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="IMS Connector"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${ais-ims.jar}"/> + <param name="filename" value="${ais-ims.jarname}"/> + </antcall> + </target> + <target name="jar.hsc" depends="init, compile.hsc"> + <mkdir dir="${build.lib}"/> + <jar jarfile="${hscu.jar}" basedir="${build.classes}"> + <patternset refid="hsc.files"/> + <manifest> + <attribute name="Built-By" value="${user.name}"/> + <attribute name="${manifest.key.product}" value="${product.name}"/> + <attribute name="${manifest.key.component}" value="Host Session Connector"/> + <attribute name="${manifest.key.version}" value="${version}"/> + <attribute name="${manifest.key.build}" value="${build.id}"/> + <attribute name="${manifest.key.build-ts}" value="${BuildTimeStamp}"/> + </manifest> + </jar> + <antcall target="compute-checksum"> + <param name="file" value="${hscu.jar}"/> + <param name="filename" value="${hscu.jarname}"/> + </antcall> + <echo level="info" message="Running RetroGuard..."/> + <java classname="RetroGuard" fork="yes"> + <arg value="${hscu.jar}"/> + <arg value="${hsc.jar}"/> + <arg value="${obfuscate.script}"/> + <arg value="${obfuscate.log}"/> + <classpath> + <pathelement path="${retroguard.jar}"/> + </classpath> + </java> + <antcall target="compute-checksum"> + <param name="file" value="${hsc.jar}"/> + <param name="filename" value="${hsc.jarname}"/> + </antcall> + </target> + <target name="jar.testbackend" depends="test.compile"> + <jar jarfile="${build.lib}/ais-testbackend.jar" basedir="${test.bin}"> + <include name="com/seagullsw/appinterface/server/backend/aistest/**"/> + <fileset dir="${src.test.dir}"> + <include name="com/seagullsw/appinterface/server/backend/aistest/**/jaxb.properties"/> + <include name="com/seagullsw/appinterface/server/backend/aistest/**/bgm.ser"/> + </fileset> + </jar> + </target> + <!-- =================================================================== --> + <!-- Prepares the build directory --> + <!-- =================================================================== --> + <target name="prepare" depends="init"> + <mkdir dir="${build.dir}"/> + <mkdir dir="${build.classes}"/> + </target> + <!-- =================================================================== --> + <!-- Cleans --> + <!-- =================================================================== --> + <target name="clean" description="Removes all the generated files and directories"> + <delete dir="${build.dir}"/> + </target> + <target name="clean.jars"> + <delete dir="${build.lib}"/> + </target> + <target name="clean.classes" description="Removes all .class files"> + <delete dir="${build.classes}"/> + </target> + <!-- =================================================================== --> + <!-- Init --> + <!-- =================================================================== --> + <target name="init" depends="banner"> + <tstamp> + <!-- The date/time patterns are as defined in the Java SimpleDateFormat class. --> + <format property="BuildTimeStamp" pattern="yyyy-MMMMM-dd HH:mm z"/> + </tstamp> + <filter token="PRODUCT" value="${product.name}"/> + <filter token="VERSION" value="${version}"/> + <filter token="BUILDID" value="${build.id}"/> + <filter token="BUILDTIMESTAMP" value="${BuildTimeStamp}"/> + <filter token="COPYRIGHT-1" value="${text.copyright.1}"/> + <filter token="COPYRIGHT-2" value="${text.copyright.2}"/> + </target> + <target name="banner" unless="banner-set"> + <property name="logxsl-prop-sep" value="->"/> + <echo level="info" message="ant.file ${logxsl-prop-sep} ${ant.file}"/> + <echo level="info" message="ant.version ${logxsl-prop-sep} ${ant.version}"/> + <echo level="info" message="java.vm.version ${logxsl-prop-sep} ${ant.java.version}"/> + <echo level="info" message="java.version ${logxsl-prop-sep} ${java.version}"/> + <echo level="info" message="os.name ${logxsl-prop-sep} ${os.name}"/> + <echo level="info" message="Build ID: ${build.id}"/> + <property name="banner-set" value="true"/> + </target> + <!-- =================================================================== --> + <!-- Splash Screens --> + <!-- =================================================================== --> + <property name="internaldev.classes" value="${build.dir}/internaldev"/> + <property name="splash.src" value="${src.root.dir}/Build/splashscreen"/> + <property name="splash.dest" value="${build.dir}/splashscreens"/> + <property name="server.splashscreen.line-1" value="Application Interface Server"/> + <property name="tools.splashscreen.line-1" value="Transidiom Developer"/> + <!-- Task compile.splashScreenCreator --> + <target name="compile.splashScreenCreator"> + <mkdir dir="${internaldev.classes}"/> + <javac srcdir="${src.test.dir}" destdir="${internaldev.classes}" debug="${compile.debug}"> + <include name="com/seagullsw/internaldev/build/SplashscreenCreator.java"/> + </javac> + </target> + <!-- + Run SplashscreenCreator program which takes a "vanilla" jpg plus + some text and creates a new "merged" jpg. + This is used by the createSplash.xxx.splashscreen targets. + --> + <target name="createSplash" depends="compile.splashScreenCreator"> + <!-- java task: failonerror works only if fork is true --> + <java classname="com.seagullsw.internaldev.build.SplashscreenCreator" failonerror="true" fork="true"> + <!-- <sysproperty key="com.seagullsw.debug" value="true"/> --> + <sysproperty key="com.seagullsw.quiet" value="false"/> + <sysproperty key="com.seagullsw.x" value="8"/> + <sysproperty key="com.seagullsw.y" value="196"/> + <sysproperty key="com.seagullsw.fontsize" value="11"/> + <sysproperty key="com.seagullsw.sourceScreenFile" value="${createSplash.sourceScreenFile}"/> + <sysproperty key="com.seagullsw.targetScreenFile" value="${createSplash.targetScreenFile}"/> + <sysproperty key="com.seagullsw.screenTextFile" value="${createSplash.screenTextFile}"/> + <classpath> + <pathelement location="${internaldev.classes}"/> + </classpath> + </java> + </target> + <!-- Create AIS splashscreens --> + <target name="createSplash.ais.splashscreens" depends="init"> + <filter token="SERVER.SPLASHSCREEN.LINE-1" value="${server.splashscreen.line-1}"/> + <!-- Line 2 is in the template and uses the Version, Build and Build date tokens. --> + <filter token="SERVER.SPLASHSCREEN.LINE-3" value="${text.copyright.1}"/> + <filter token="SERVER.SPLASHSCREEN.LINE-4" value="${text.copyright.2}"/> + <mkdir dir="${splash.dest}"/> + <copy file="${splash.src}/splashscreen-template-server.txt" tofile="${splash.dest}/splashscreen-server.txt" overwrite="true" filtering="true"/> + <antcall target="createSplash"> + <param name="createSplash.sourceScreenFile" value="${splash.src}/BasicSplashScreen.jpg"/> + <param name="createSplash.screenTextFile" value="${splash.dest}/splashscreen-server.txt"/> + <param name="createSplash.targetScreenFile" value="${splash.dest}/ServerSplashScreen.jpg"/> + </antcall> + <!-- Copy the splash to the AIS and SAC class path --> + <copy file="${splash.dest}/ServerSplashScreen.jpg" tofile="${build.classes}/com/seagullsw/appinterface/server/ServerSessionSplashScreen.jpg" overwrite="yes"/> + </target> + <!-- Create Tools splashscreens --> + <target name="createSplash.tools.splashscreens" depends="init"> + <filter token="TOOLS.SPLASHSCREEN.LINE-1" value="${tools.splashscreen.line-1}"/> + <!-- Line 2 is in the template and uses the Version, Build and Build date tokens. --> + <filter token="TOOLS.SPLASHSCREEN.LINE-3" value="${text.copyright.1}"/> + <filter token="TOOLS.SPLASHSCREEN.LINE-4" value="${text.copyright.2}"/> + <mkdir dir="${splash.dest}"/> + <copy file="${splash.src}/splashscreen-template-developer.txt" tofile="${splash.dest}/splashscreen-developer.txt" overwrite="true" filtering="true"/> + <antcall target="createSplash"> + <param name="createSplash.sourceScreenFile" value="${splash.src}/BasicSplashScreen.jpg"/> + <param name="createSplash.screenTextFile" value="${splash.dest}/splashscreen-developer.txt"/> + <param name="createSplash.targetScreenFile" value="${splash.dest}/ToolSessionSplashScreen.jpg"/> + </antcall> + <!-- Copy the splash to the Tools class path --> + <copy file="${splash.dest}/ToolSessionSplashScreen.jpg" tofile="${build.classes}/com/seagullsw/appinterface/tools/images/ToolSessionSplashScreen.jpg" overwrite="yes"/> + </target> + <!-- =================================================================== --> + <!-- Javadoc for client API --> + <!-- =================================================================== --> + <target name="javadoc_check.ais.client"> + <uptodate property="ais.client.javadoc.notrequired" targetfile="${ais.client.dist.javadoc}/packages.html"> + <srcfiles dir="${src.dir}"> + <patternset refid="ais.client.files"/> + </srcfiles> + </uptodate> + </target> + <target name="javadoc.ais.client" depends="prepare, javadoc_check.ais.client" unless="ais.client.javadoc.notrequired"> + <delete dir="${ais.client.dist.javadoc}" includeEmptyDirs="true" quiet="true"/> + <mkdir dir="${ais.client.dist.javadoc}"/> + <property name="basic-header" value="${Name}™, AIS Client"/> + <property name="header+version" value="${basic-header}, v${version}"/> + <property name="win-title" value="${header+version} API Specification"/> + <property name="doc-title" value="${header+version}<br/>API Specification"/> + <javadoc packagenames="com.seagullsw.appinterface.client, com.seagullsw.appinterface.client.java, com.seagullsw.appinterface.client.ibmmq, com.seagullsw.appinterface.comm.ibmmq" sourcepath="${src.dir}" destdir="${ais.client.dist.javadoc}" windowtitle="${win-title}" doctitle="${doc-title}" header="${basic-header}" bottom="<font size="-1">${Name} is a trademark or registered trademarks of Seagull Holding NV in the US and other countries.<br/>Copyright © 1993 - 2003 Seagull Business Software Ireland Ltd. All Rights Reserved.</font>" author="false" version="true" use="true"> + <classpath> + <path refid="ais.classpath"/> + </classpath> + <!-- The following group elements do not seem to work. --> + <group title="Client" packages="com.seagullsw.appinterface.client, com.seagullsw.appinterface.client.java"/> + <group title="IBM MQ Series Client" packages="com.seagullsw.appinterface.client.ibmmq, com.seagullsw.appinterface.comm.ibmmq"/> + <link href="${javadoc.j2se.link}"/> + </javadoc> + </target> + <target name="javadoc_check.ais.adminclient"> + <uptodate property="ais.adminclient.javadoc.notrequired" targetfile="${ais.adminclient.dist.javadoc}/packages.html"> + <srcfiles dir="${src.dir}"> + <patternset refid="ais.adminclient.files"/> + </srcfiles> + </uptodate> + </target> + <target name="javadoc.ais.adminclient" depends="prepare, javadoc_check.ais.adminclient" unless="ais.adminclient.javadoc.notrequired"> + <delete dir="${ais.adminclient.dist.javadoc}" includeEmptyDirs="true" quiet="true"/> + <mkdir dir="${ais.adminclient.dist.javadoc}"/> + <property name="basic-header" value="${Name}™, AIS Admin Client"/> + <property name="header+version" value="${basic-header}, v${version}"/> + <property name="win-title" value="${header+version} API Specification"/> + <property name="doc-title" value="${header+version}<br/>API Specification"/> + <javadoc packagenames="com.seagullsw.appinterface.server.admin" sourcepath="${src.dir}" destdir="${ais.adminclient.dist.javadoc}" windowtitle="${win-title}" doctitle="${doc-title}" header="${basic-header}" bottom="<font size="-1">${Name} is a trademark or registered trademarks of Seagull Holding NV in the US and other countries.<br/>Copyright © 1993 - 2003 Seagull Business Software Ireland Ltd. All Rights Reserved.</font>" author="false" version="true" use="true"> + <classpath> + <path refid="ais.classpath"/> + </classpath> + <!-- The following group elements do not seem to work. --> + <group title="Client" packages="com.seagullsw.appinterface.server.admin"/> + <link href="${javadoc.j2se.link}"/> + </javadoc> + </target> + <!-- =================================================================== --> + <!-- Distribution targets --> + <!-- =================================================================== --> + <target name="dist" depends="dist.ais.core, dist.ais.client, dist.aisUNIX, dist.proxyservlet, dist.transidiomcentral, dist.devtools, dist.docs" description="Creates the distribution in ${build.dist}"/> + <property name="ais.dist" value="${build.dist}/server"/> + <property name="aisUNIX.dist" value="${build.dist}/server-UNIX"/> + <property name="ais.client.dist" value="${build.dist}/client/java"/> + <property name="proxyservlet.dist" value="${build.dist}/server/servlet"/> + <property name="devtools.dist" value="${build.dist}/tools"/> + <property name="transidiomcentral.dist" value="${build.dist}/TransidiomCentral"/> + <!-- copy 3rd party jar files - a dist "subroutine". --> + <!-- Common files to the AIS and Tools? GaryG 2003-04-03 --> + <target name="copy3rdPartyJars"> + <copy file="${xerces.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${xml-apis.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${xalan.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${soap.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${activation.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${mail.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-collections.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-lang.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-codec.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-logging.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-httpclient.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-pool.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-cli.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jakarta-oro.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb1.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb2.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb3.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb4.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb5.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb6.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb7.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jms.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${concurrent.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jaas.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${imsico.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${imsico-connector.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + <copy file="${jta.jar}" todir="${copy3rdPartyJars.dist.lib}" preservelastmodified="true"/> + </target> + <!-- Java Client --> + <property name="ais.client.dist.javadoc" value="${ais.client.dist}/docs/api"/> + <property name="ais.client.dist.lib" value="${ais.client.dist}/lib"/> + <property name="ais.client.dist.mq" value="${ais.client.dist}/mq"/> + <property name="ais.adminclient.dist.javadoc" value="${ais.client.dist}/admin/docs/api"/> + <property name="ais.adminclient.dist.sfd" value="${ais.client.dist}/admin/sfd"/> + <!-- dist.ais.client --> + <target name="dist.ais.client" depends="jar.ais.client, jar.ais.adminclient, javadoc.ais.client, javadoc.ais.adminclient"> + <mkdir dir="${ais.client.dist}"/> + <mkdir dir="${ais.client.dist.javadoc}"/> + <mkdir dir="${ais.client.dist.lib}"/> + <mkdir dir="${ais.client.dist.mq}"/> + <mkdir dir="${ais.adminclient.dist.javadoc}"/> + <mkdir dir="${ais.adminclient.dist.sfd}"/> + <copy file="${ais.client.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-adminclient.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${xerces.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${xml-apis.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-lang.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb1.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb2.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb3.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb4.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb5.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb6.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb7.jar}" todir="${ais.client.dist.lib}" preservelastmodified="true"/> + <copy file="${root.dir}/mq/MQClientConnection.properties" todir="${ais.client.dist.mq}" preservelastmodified="true"/> + <copy todir="${ais.adminclient.dist.sfd}" preservelastmodified="true"> + <fileset dir="${src.root.dir}/ServerAdminFunctions/InterfaceSchemas"/> + </copy> + </target> + <!-- AIS --> + <property name="ais.dist.config" value="${ais.dist}/config"/> + <property name="ais.dist.config.copy" value="${ais.dist}/config-default"/> + <property name="ais.dist.log" value="${ais.dist.config}/log"/> + <property name="ais.dist.transform" value="${ais.dist.config}/transform"/> + <property name="ais.dist.lib" value="${ais.dist}/lib"/> + <property name="ais.dist.lib.ext" value="${ais.dist.lib}/${extension.dir.name}"/> + <property name="ais.dist.mq" value="${ais.dist}/mq"/> + <property name="ais.dist.sys" value="${ais.dist}/system"/> + <property name="ais.dist.sysdef" value="${ais.dist.sys}/defaults"/> + <property name="root.serverSettings" value="${root.dir}/AlternativeServerSettings"/> + <property name="root.toolSettings" value="${root.dir}/AlternativeToolSettings"/> + <!-- dist.ais.core --> + <target name="dist.ais.core" depends="init, jar.ais-core, jar.ais-tools, jar.ais-5250, jar.ais-3270, jar.ais-cobol, jar.ais-cics, jar.ais-ims, jar.hsc, jar.adminconsole, javadoc.openbackend"> + <mkdir dir="${ais.dist}"/> + <mkdir dir="${ais.dist.lib}"/> + <mkdir dir="${ais.dist.lib.ext}"/> + <mkdir dir="${ais.dist.sys}"/> + <mkdir dir="${ais.dist.mq}"/> + <copy file="${ais-core.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-5250.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-3270.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-cobol.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-cics.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-ims.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <copy file="${hsc.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <copy file="${adminconsole.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <antcall target="copy3rdPartyJars"> + <param name="copy3rdPartyJars.dist.lib" value="${ais.dist.lib}"/> + </antcall> + <!-- For SCT --> + <copy file="${ais-tools.jar}" todir="${ais.dist.lib}" preservelastmodified="true"/> + <copy file="${root.dir}/ToolUserSettings.cfg" todir="${ais.dist}" filtering="true"/> + <copy file="${root.dir}/start-ais.bat" todir="${ais.dist}" preservelastmodified="true"/> + <copy file="${root.dir}/start-ais-mq.bat" todir="${ais.dist}" preservelastmodified="true"/> + <copy file="${root.dir}/stop-ais.bat" todir="${ais.dist}" preservelastmodified="true"/> + <copy file="${root.dir.server}/ServerSettings.cfg" todir="${ais.dist}" preservelastmodified="true"/> + <copy file="${root.dir}/ServerBackEndSettings.cfg" todir="${ais.dist}" preservelastmodified="true"/> + <copy file="${root.serverSettings}/ServerDebugSettings.cfg" todir="${ais.dist.sys}" filtering="true"/> + <copy file="${root.serverSettings}/ServerDeveloperSettings.cfg" todir="${ais.dist.sys}" filtering="true"/> + <copy file="${root.serverSettings}/ServerInstallationSettings.cfg" todir="${ais.dist.sys}" filtering="true"/> + <copy file="${root.dir.sys}/ToolDebugSettings.cfg" todir="${ais.dist.sys}" filtering="true"/> + <copy todir="${ais.dist.sys}/AdminFunctionDefinitions" preservelastmodified="true"> + <fileset dir="${src.root.dir}/ServerAdminFunctions/MappingSchemas"/> + </copy> + <copy todir="${ais.dist.transform}" preservelastmodified="true"> + <fileset dir="${root.dir.server-transform}"/> + </copy> + <copy todir="${ais.dist.config}/comm" preservelastmodified="true"> + <fileset dir="${root.dir.server-config}/comm"/> + </copy> + <copy todir="${ais.dist.config.copy}" preservelastmodified="true"> + <fileset dir="${ais.dist.config}"/> + </copy> + <copy file="${root.dir.server-log}/log-category.properties" todir="${ais.dist.log}" preservelastmodified="true"/> + <copy file="${root.dir.server-log}/log-style.properties" todir="${ais.dist.log}" preservelastmodified="true"/> + <!-- Tools files --> + <copy file="${root.toolSettings}/ToolInstallationSettings-All.cfg" tofile="${ais.dist.sys}/ToolInstallationSettings.cfg" filtering="true"/> + <copy file="${root.toolSettings}/SCTToolInstallationSettings-HC.cfg" todir="${ais.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/SCTToolInstallationSettings-HC3270Only.cfg" todir="${ais.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/SCTToolInstallationSettings-HC5250Only.cfg" todir="${ais.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/SCTToolInstallationSettings-CICSOnly.cfg" todir="${ais.dist.sys}" filtering="true"/> + <copy file="${root.dir.sysdef}/AppInterfaceTester-DefaultSettings.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ClientControlled3270ServerSettings-DefaultSettings.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ClientControlled5250ServerSettings-DefaultSettings.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/DefinitionTool-DefaultSettings.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/SEAGULLProject.dir" todir="${ais.dist.sysdef}"/> + <copy file="${root.dir.sysdef}/ServerControlled3270ServerSettings-DefaultSettings.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ServerControlled5250ServerSettings-DefaultSettings.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ServerOptions-DefaultSettings.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ServerSettings-Skeleton.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/WorkingSetSettings.cfg" todir="${ais.dist.sysdef}" filtering="true"/> + <!-- Java Connectors --> + <mkdir dir="${ais.dist}/JavaConnectors/Classes"/> + </target> + <!-- AIS UNIX-specific --> + <property name="aisUNIX.dist.config" value="${aisUNIX.dist}/config"/> + <property name="aisUNIX.dist.log" value="${aisUNIX.dist.config}/log"/> + <property name="aisUNIX.dist.lib" value="${aisUNIX.dist}/lib"/> + <property name="aisUNIX.dist.mq" value="${aisUNIX.dist}/mq"/> + <property name="aisUNIX.dist.sys" value="${aisUNIX.dist}/system"/> + <target name="dist.aisUNIX" depends="init, dist.ais.core, jar.adminconsole"> + <mkdir dir="${aisUNIX.dist}"/> + <mkdir dir="${aisUNIX.dist.lib}"/> + <mkdir dir="${aisUNIX.dist.sys}"/> + <mkdir dir="${aisUNIX.dist.mq}"/> + <copy file="${ais-core.jar}" todir="${aisUNIX.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-5250.jar}" todir="${aisUNIX.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-3270.jar}" todir="${aisUNIX.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-cobol.jar}" todir="${aisUNIX.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-cics.jar}" todir="${aisUNIX.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-ims.jar}" todir="${aisUNIX.dist.lib}" preservelastmodified="true"/> + <copy file="${adminconsole.jar}" todir="${aisUNIX.dist.lib}" preservelastmodified="true"/> + <copy file="${hsc.jar}" todir="${aisUNIX.dist.lib}" preservelastmodified="true"/> + <antcall target="copy3rdPartyJars"> + <param name="copy3rdPartyJars.dist.lib" value="${aisUNIX.dist.lib}"/> + </antcall> + <copy file="${root.dir}/UNIXServerFiles/start-ais.sh" todir="${aisUNIX.dist}" preservelastmodified="true"/> + <copy file="${root.dir}/UNIXServerFiles/start-ais-mq.sh" todir="${aisUNIX.dist}" preservelastmodified="true"/> + <copy file="${root.dir}/UNIXServerFiles/stop-ais.sh" todir="${aisUNIX.dist}" preservelastmodified="true"/> + <copy file="${root.dir.server}/ServerSettings.cfg" todir="${aisUNIX.dist}" preservelastmodified="true"/> + <copy file="${root.dir}/ServerBackEndSettings.cfg" todir="${aisUNIX.dist}" preservelastmodified="true"/> + <copy file="${root.serverSettings}/ServerDebugSettings.cfg" todir="${aisUNIX.dist.sys}" filtering="true"/> + <copy file="${root.dir}/UNIXServerFiles/ServerInstallationSettings.cfg" todir="${aisUNIX.dist.sys}" filtering="true"/> + <copy todir="${aisUNIX.dist.sys}/AdminFunctionDefinitions" preservelastmodified="true"> + <fileset dir="${src.root.dir}/ServerAdminFunctions/MappingSchemas"/> + </copy> + <copy todir="${aisUNIX.dist}/config/transform" preservelastmodified="true"> + <fileset dir="${root.dir}/server/config/transform"/> + </copy> + <copy file="${root.dir.server-log}/log-category.properties" todir="${aisUNIX.dist.log}"/> + <copy file="${root.dir.server-log}/log-style.properties" todir="${aisUNIX.dist.log}"/> + </target> + <!-- Proxy Servlet --> + <property name="proxyservlet.dist.lib" value="${proxyservlet.dist}/lib"/> + <target name="dist.proxyservlet" depends="jar.proxyservlet, jar.ais.client"> + <copy file="${proxyservlet.jar}" todir="${proxyservlet.dist.lib}" preservelastmodified="true"/> + <copy file="${ais.client.jar}" todir="${proxyservlet.dist.lib}" preservelastmodified="true"/> + <copy file="${xerces.jar}" todir="${proxyservlet.dist.lib}" preservelastmodified="true"/> + <copy file="${xml-apis.jar}" todir="${proxyservlet.dist.lib}" preservelastmodified="true"/> + <copy file="${root.dir}/ServletConfigFiles/AISProxyServletReadme.txt" todir="${proxyservlet.dist}" preservelastmodified="true"/> + <copy file="${root.dir}/ServletConfigFiles/web.xml" todir="${proxyservlet.dist}" preservelastmodified="true"/> + <copy file="${doc.dir}/Transidiom HTTPS Support.doc" todir="${proxyservlet.dist}" preservelastmodified="true"/> + <copy file="${doc.dir}/Transidiom HTTP Requests Redirection on IIS.doc" todir="${proxyservlet.dist}" preservelastmodified="true"/> + </target> + <!-- DevTools --> + <property name="devtools.dist.config" value="${devtools.dist}/config"/> + <property name="devtools.dist.log" value="${devtools.dist.config}/log"/> + <property name="devtools.dist.lib" value="${devtools.dist}/lib"/> + <property name="devtools.dist.sys" value="${devtools.dist}/system"/> + <property name="devtools.dist.sysdef" value="${devtools.dist.sys}/defaults"/> + <target name="dist.devtools" depends="init, jar.ais-core, jar.ais-tools"> + <mkdir dir="${devtools.dist}"/> + <mkdir dir="${devtools.dist.lib}"/> + <mkdir dir="${devtools.dist.sys}"/> + <mkdir dir="${devtools.dist.sysdef}"/> + <mkdir dir="${devtools.dist.log}"/> + <copy file="${ais-tools.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-core.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-5250.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-3270.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-cobol.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-cics.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-ims.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <copy file="${ais.client.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-adminclient.jar}" todir="${devtools.dist.lib}" preservelastmodified="true"/> + <antcall target="copy3rdPartyJars"> + <param name="copy3rdPartyJars.dist.lib" value="${devtools.dist.lib}"/> + </antcall> + <!-- Root --> + <copy file="${root.dir}/Direct Publish.bat" todir="${devtools.dist}"/> + <copy file="${root.dir}/DirectPublish.args" todir="${devtools.dist}"/> + <copy file="${root.dir}/Interface Definition Tool.bat" todir="${devtools.dist}"/> + <copy file="${root.dir}/CICS Connector Builder.bat" todir="${devtools.dist}"/> + <copy file="${root.dir}/IMS Connector Builder.bat" todir="${devtools.dist}"/> + <copy file="${root.dir}/Interface Function Tester.bat" todir="${devtools.dist}"/> + <copy file="${root.dir}/ToolUserSettings.cfg" todir="${devtools.dist}" filtering="true"/> + <copy file="${binary.root.dir}/Java/Win32/Bin/Win32RegistryInterface.dll" todir="${devtools.dist}" preservelastmodified="true"/> + <!-- system (files are in alpha order here) --> + <copy file="${root.toolSettings}/DFPToolInstallationSettings-HC.cfg" tofile="${devtools.dist.sys}/DFPToolInstallationSettings.cfg" filtering="true"/> + <copy file="${root.toolSettings}/SCTToolInstallationSettings-HC.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/SCTToolInstallationSettings-HC3270Only.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/SCTToolInstallationSettings-HC5250Only.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/SCTToolInstallationSettings-CICSOnly.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.dir.sys}/ToolDebugSettings.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/ToolInstallationSettings-All.cfg" tofile="${devtools.dist.sys}/ToolInstallationSettings.cfg" filtering="true"/> + <copy file="${root.toolSettings}/ToolInstallationSettings-DefToolHC.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/ToolInstallationSettings-DefToolHC3270Only.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/ToolInstallationSettings-DefToolHC5250Only.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/ToolInstallationSettings-DefToolCICSOnly.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <copy file="${root.toolSettings}/ToolInstallationSettings-DefToolIMSOnly.cfg" todir="${devtools.dist.sys}" filtering="true"/> + <!-- system defaults --> + <copy file="${root.dir.sysdef}/AppInterfaceTester-DefaultSettings.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ClientControlled3270ServerSettings-DefaultSettings.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ClientControlled5250ServerSettings-DefaultSettings.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/DefinitionTool-DefaultSettings.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/SEAGULLProject.dir" todir="${devtools.dist.sysdef}"/> + <copy file="${root.dir.sysdef}/ServerControlled3270ServerSettings-DefaultSettings.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ServerControlled5250ServerSettings-DefaultSettings.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ServerOptions-DefaultSettings.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/ServerSettings-Skeleton.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.sysdef}/WorkingSetSettings.cfg" todir="${devtools.dist.sysdef}" filtering="true"/> + <copy file="${root.dir.tools-log}/log-category.properties" todir="${devtools.dist.log}" preservelastmodified="true"/> + <copy file="${root.dir.tools-log}/log-style.properties" todir="${devtools.dist.log}" preservelastmodified="true"/> + </target> + <!-- AIS Central --> + <property name="transidiomcentral.dist.lib" value="${transidiomcentral.dist}/lib"/> + <target name="dist.transidiomcentral" depends="init, jar.ais-core, jar.ais-tools, jar.javaconnectorgenerator, jar.securitytoolkit"> + <mkdir dir="${transidiomcentral.dist}"/> + <mkdir dir="${transidiomcentral.dist.lib}"/> + <copy file="${ais-core.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-5250.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-3270.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-cobol.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-cics.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-ims.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${ais-tools.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${ais.client.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${securitytoolkit.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${javaconnectorgenerator.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-codec.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${commons-lang.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${xerces.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${xalan.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${xml-apis.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb1.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb2.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb3.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb4.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb5.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb6.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + <copy file="${jaxb7.jar}" todir="${transidiomcentral.dist.lib}" preservelastmodified="true"/> + </target> + <!-- User Docs --> + <target name="dist.docs"> + <mkdir dir="${build.dist}/docs"/> + <copy todir="${build.dist}/docs"> + <fileset dir="${doc.dir}"> + <exclude name="Transidiom HTTP*.doc"/> + </fileset> + </copy> + </target> + <!-- =================================================================== --> + <!-- Javadoc for open back-end API --> + <!-- =================================================================== --> + <property name="ais.dist.javadoc" value="${ais.dist}/JavaConnectors/Documentation/JavaDoc"/> + <target name="javadoc.openbackend" depends="compile.doclet"> + <delete dir="${ais.dist.javadoc}" includeEmptyDirs="true" quiet="true"/> + <mkdir dir="${ais.dist.javadoc}"/> + <property name="basic-header" value="${Name}™, AIS Java Connector"/> + <property name="header+version" value="${basic-header}, v${version}"/> + <property name="win-title" value="${header+version} API Specification"/> + <property name="doc-title" value="${header+version}<br/>API Specification"/> + <javadoc sourcepath="${src.dir}" destdir="${ais.dist.javadoc}" windowtitle="${win-title}" doctitle="${doc-title}" header="${basic-header}" bottom="<font size="-1">${Name} is a trademark or registered trademarks of Seagull Holding NV in the US and other countries.<br/>Copyright © 1993 - 2003 Seagull Business Software Ireland Ltd. All Rights Reserved.</font>" author="false" version="true" use="true" doclet="com.seagullsw.internaldev.tools.apidoclet.standard.Standard" docletpath="${build.classes};${java.resource.dir}"> + <!-- I don't understand it, but if I leave off the ${src.dir} below, it doesn't work. --> + <source file="${src.dir}/com/seagullsw/appinterface/server/backend/BackEnd.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/server/backend/BackEndInfo.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/server/backend/BackEndHandler.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/server/backend/BackEndSettings.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/server/backend/Callback.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/server/backend/ClientSession.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/server/backend/InvocationContext.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/AggregateModel.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/AppInterfaceRuntimeException.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/DataElementModel.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/FieldModel.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/IllegalElementException.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/IllegalPathException.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/ModelElement.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/SequenceModel.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/StructureModel.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/data/Aggregate.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/data/DataElement.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/data/DataElementList.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/data/Field.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/data/Sequence.java"/> + <source file="${src.dir}/com/seagullsw/appinterface/model/data/Structure.java"/> + <classpath> + <path refid="ais.classpath"/> + </classpath> + <link href="http://java.sun.com/products/jdk/1.3.1/docs/api/"/> + </javadoc> + </target> + <!-- VERIFY --> + <path id="path.AntTasks"> + <pathelement location="${junit.jar}"/> + <pathelement location="${commons-cli.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${build.classes}"/> + <pathelement location="${internaldev.classes}"/> + </path> + <target name="build.AntTasks"> + <mkdir dir="${internaldev.classes}"/> + <javac srcdir="${src.test.dir}" destdir="${internaldev.classes}" debug="${compile.debug}" classpathref="path.AntTasks"> + <include name="com/seagullsw/internaldev/build/JarFileVerifier.java"/> + <include name="com/seagullsw/internaldev/build/JarFileVerifierTask.java"/> + <include name="com/seagullsw/internaldev/build/IsUrlOpen.java"/> + <include name="com/seagullsw/internaldev/build/IsUrlOpenTask.java"/> + </javac> + </target> + <target name="declare.AntTasks" depends="build.AntTasks"> + <taskdef name="verifyjar" classname="com.seagullsw.internaldev.build.JarFileVerifierTask" classpathref="path.AntTasks"/> + <taskdef name="isUrlOpen" classname="com.seagullsw.internaldev.build.IsUrlOpenTask" classpathref="path.AntTasks"/> + </target> + <target name="prepare.test.ext"> + <mkdir dir="${test.lib}"/> + <delete dir="${test.lib.ext}"/> + <mkdir dir="${test.lib.ext}"/> + </target> + <target name="verify.ais.jar" depends="declare.AntTasks, prepare.test.ext"> + <mkdir dir="${test.fdef}"/> + <copy file="${goXMLEngine.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <copy file="${goXMLResource.zip}" todir="${test.lib.ext}" preservelastmodified="true"/> + <copy file="${jdom.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <copy file="${ibm.mq.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <copy file="${ibm.mq.connector.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <copy file="${ibm.mq.jta.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <verifyjar file="${ais-core.jar}" verbose="false" debug="false"> + <classpath> + <pathelement location="${ais.dist.lib}"/> + <pathelement location="${ais.dist.lib.ext}"/> + <pathelement location="${test.lib}"/> + </classpath> + </verifyjar> + <delete dir="${test.lib.ext}"/> + <delete dir="${test.fdef}"/> + </target> + <target name="verify.client.jar" depends="declare.AntTasks, prepare.test.ext"> + <copy file="${ibm.mq.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <copy file="${jms.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <copy file="${mail.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <copy file="${soap.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <verifyjar file="${ais.client.jar}" verbose="false" debug="false"> + <classpath> + <pathelement location="${ais.client.dist.lib}"/> + <pathelement location="${test.lib.ext}"/> + </classpath> + </verifyjar> + <delete dir="${test.lib.ext}"/> + </target> + <target name="verify.5250.jar" depends="declare.AntTasks"> + <verifyjar file="${ais-5250.jar}" ignoreUnresolved="true" verbose="false" debug="false"> + <classpath location="${ais.dist.lib}"/> + </verifyjar> + </target> + <target name="verify.3270.jar" depends="declare.AntTasks"> + <verifyjar file="${ais-3270.jar}" ignoreUnresolved="true" verbose="false" debug="false"> + <classpath location="${ais.dist.lib}"/> + </verifyjar> + </target> + <target name="verify.cobol.jar" depends="declare.AntTasks"> + <verifyjar file="${ais-cobol.jar}" verbose="false" debug="false"> + <classpath location="${ais.dist.lib}"/> + </verifyjar> + </target> + <target name="verify.cics.jar" depends="declare.AntTasks, prepare.test.ext"> + <copy file="${ctgclient.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <verifyjar file="${ais-cics.jar}" verbose="false" debug="false"> + <classpath location="${ais.dist.lib}"/> + <classpath location="${test.lib}"/> + </verifyjar> + <delete dir="${test.lib.ext}"/> + </target> + <target name="verify.ims.jar" depends="declare.AntTasks"> + <verifyjar file="${ais-ims.jar}" verbose="false" debug="false"> + <classpath location="${ais.dist.lib}"/> + </verifyjar> + </target> + <target name="verify.adminclient.jar" depends="declare.AntTasks"> + <verifyjar file="${ais-adminclient.jar}" verbose="false" debug="false"> + <classpath location="${devtools.dist.lib}"/> + </verifyjar> + </target> + <target name="verify.proxyservlet.jar" depends="declare.AntTasks"> + <verifyjar file="${proxyservlet.jar}" verbose="false" debug="false"> + <classpath> + <pathelement location="${proxyservlet.dist.lib}"/> + <pathelement location="${servlet.dir}"/> + </classpath> + </verifyjar> + </target> + <target name="verify.adminconsole.jar" depends="declare.AntTasks"> + <verifyjar file="${adminconsole.jar}" verbose="false" debug="false"> + <classpath location="${ais.dist.lib}"/> + </verifyjar> + </target> + <target name="verify.javaconnectorgenerator.jar" depends="declare.AntTasks"> + <verifyjar file="${javaconnectorgenerator.jar}" verbose="false" debug="false"> + <classpath location="${devtools.dist.lib}"/> + </verifyjar> + </target> + <target name="verify.securitytoolkit.jar" depends="declare.AntTasks"> + <verifyjar file="${securitytoolkit.jar}" verbose="false" debug="false"> + <classpath location="${devtools.dist.lib}"/> + </verifyjar> + </target> + <target name="verify.tools.jar" depends="declare.AntTasks, prepare.test.ext"> + <copy file="${j2se.tools.jar}" todir="${test.lib.ext}" preservelastmodified="true"/> + <verifyjar file="${ais-tools.jar}" verbose="false" debug="false"> + <classpath location="${devtools.dist.lib}"/> + <classpath location="${test.lib}"/> + </verifyjar> + <delete dir="${test.lib.ext}"/> + </target> + <target name="verify.gwhsc.jar" depends="declare.AntTasks"> + <verifyjar file="${hsc.jar}" verbose="false" debug="false"/> + </target> + <target name="verify.gwhscu.jar" depends="declare.AntTasks"> + <verifyjar file="${hscu.jar}" verbose="false" debug="false"/> + </target> + <target name="verify.xml" depends="banner"> + <!-- Only check for well-formed XML here. --> + <xmlvalidate lenient="yes" warn="yes"> + <fileset dir="${build.dist}" includes="**/*.xml"/> + <fileset dir="${build.dist}" includes="**/*.cfg"/> + <fileset dir="${build.dist}" includes="**/*.sfd"/> + <fileset dir="${build.dist}" includes="**/*.sjcd"/> + <fileset dir="${build.dist}" includes="**/*.sfmd"/> + <fileset dir="${build.dist}" includes="**/*.xsd"/> + <fileset dir="${build.dist}" includes="**/*.xsl"/> + </xmlvalidate> + </target> + <target name="verify" description="Verifies the build by performing a load tests on jar files (does not trigger the jar dependencies.)" depends="banner, verify.ais.jar, verify.client.jar, verify.5250.jar, verify.3270.jar, verify.cobol.jar, verify.cics.jar, verify.ims.jar, verify.adminclient.jar, verify.proxyservlet.jar, verify.adminconsole.jar, verify.javaconnectorgenerator.jar, verify.securitytoolkit.jar, verify.tools.jar, verify.gwhsc.jar, verify.gwhscu.jar, verify.xml"/> + <!-- End VERIFY targets --> + <!-- TEST TARGETS --> + <target name="junit_check"> + <available classname="junit.framework.Test" property="junit.present"/> + <fail message="JUnit cannot be found." unless="junit.present"/> + </target> + <property name="test" value="${build.dir}/test"/> + <property name="test.bin" value="${test}/bin"/> + <property name="test.resources" value="${test.dir}/resources"/> + <property name="test.fdef" value="${test}/${fdef.dirname}"/> + <property name="test.lib" value="${test}/lib"/> + <property name="test.lib.ext" value="${test.lib}/ext"/> + <property name="reports.dir" value="${build.dir}/reports"/> + <property name="reports.checksum" value="${reports.dir}/checksum"/> + <property name="junit.reports.srcdir" location="reports"/> + <property name="junit.reports" location="${reports.dir}/junit"/> + <property name="junit.formatter" value="xml"/> + <property name="junit.fork" value="true"/> + <property name="junit.printsummary" value="true"/> + <property name="junit.includeantruntime" value="false"/> + <property name="junit.dir" value="../.."/> + <property name="junit.reports.xml" location="${junit.reports}/${junit.formatter}"/> + <property name="junit.report.ext" value="-junit.xml"/> + <target name="test.compile" description="Compiles the unit tests without triggering any dependencies."> + <mkdir dir="${test.bin}"/> + <javac destdir="${test.bin}" debug="${compile.debug}" includeAntRuntime="false"> + <src path="${src.test.dir}"/> + <src path="${src.dir}/com/seagullsw/internaldev/appinterface/model"/> + <!-- Testing framework --> + <classpath location="${junit.jar}"/> + <classpath location="${mtjunit.jar}"/> + <classpath location="${xmlsec.jar}"/> + <!-- Jars to test, which the test cases refer to. --> + <classpath location="${ais-core.jar}"/> + <classpath location="${proxyservlet.jar}"/> + <classpath location="${ais.client.jar}"/> + <classpath location="${javaconnectorgenerator.jar}"/> + <classpath location="${securitytoolkit.jar}"/> + <classpath location="${ais-tools.jar}"/> + <classpath location="${ais-5250.jar}"/> + <classpath location="${ais-3270.jar}"/> + <classpath location="${ais-cobol.jar}"/> + <classpath location="${ais-cics.jar}"/> + <classpath location="${ais-ims.jar}"/> + <classpath location="${ais-adminclient.jar}"/> + <classpath location="${hsc.jar}"/> + <!-- dependencies --> + <classpath location="${ant.jar}"/> + <classpath location="${commons-cli.jar}"/> + <classpath location="${commons-httpclient.jar}"/> + <classpath refid="ais.classpath"/> + <classpath refid="proxyservlet.classpath"/> + <classpath refid="cobol.classpath"/> + <classpath refid="cics.backend.classpath"/> + <classpath refid="ims.backend.classpath"/> + <classpath refid="transforms.classpath"/> + <classpath refid="jsse.classpath"/> + </javac> + </target> + <target name="test.mkdir" depends="init"> + <mkdir dir="${build.dir}"/> + <mkdir dir="${test}"/> + <mkdir dir="${test.bin}"/> + </target> + <target name="echo.xalan.version"> + <echo level="info" message="Testing with ${TransformerFactory}"/> + <java classname="org.apache.xalan.Version"/> + </target> + <target name="report.init" depends="init, test.compile"> + <mkdir dir="${junit.reports.xml}"/> + <echo level="info" message="Reporting to ${junit.reports.xml}"/> + </target> + <path id="junit.classpath"> + <pathelement location="${ant.home}/lib/ant.jar"/> + <pathelement location="${ant.home}/lib/optional.jar"/> + <pathelement location="${ant.home}/lib/junit.jar"/> + </path> + <!-- Unit Tests: from low-level to high-level --> + <!-- Unit Tests: javax.lang --> + <target name="junit.javax.lang" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <pathelement location="${ais-tools.jar}"/> + <pathelement location="${j2se.tools.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${test.bin}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.unittest.javax.lang.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: javax.io --> + <target name="junit.javax.io" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.javax.io.AllTests" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.unittest.javax.io.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: javax.util --> + <target name="junit.javax.util" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <pathelement location="${test.bin}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.unittest.javax.util.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: Toolbox XML --> + <target name="junit.toolbox.xml" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement path="${sun.boot.class.path}"/> + <pathelement location="${ais-core.jar}"/> + <path refid="xml.classpath.rt"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${xmlsec.jar}"/> + <pathelement location="${jce.jar}"/> + <pathelement location="${log4j.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.unittest.toolbox.xml.StringProxyTestSuite" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.unittest.toolbox.xml.DocumentProxyTestSuite" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.unittest.toolbox.xml.ReadDocumentWithEncodingTestSuite" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: Toolbox config --> + <target name="junit.toolbox.config" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <pathelement path="${sun.boot.class.path}"/> + <pathelement location="${ais-core.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <pathelement location="${commons-cli.jar}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.toolbox.config.ConfigurationDirectoryTestCase" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.toolbox.config.ConfigValidatorTest" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: Toolbox logging --> + <target name="junit.toolbox.log" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${test.bin}"/> + <pathelement location="${ais-core.jar}"/> + <pathelement location="${commons-lang.jar}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.toolbox.log.LogUnitTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: config/log --> + <target name="junit.server.config.log" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.config.bind.log.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: config/bind/threadpool --> + <target name="junit.server.config.threadpool" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.config.bind.threadpool.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: config/bind/transform --> + <target name="junit.server.config.transform" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="transforms.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.config.bind.transform.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: config/bind/core --> + <target name="junit.server.config.core" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.config.bind.core.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: config/bind/management --> + <target name="junit.server.config.management" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.config.bind.management.JaxbUnmarshalTestCase" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.appinterface.server.config.bind.management.ConfigurationDirectoryUnmarshalTestCase" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: Chameleon --> + <target name="junit.ais-core.transforms" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement path="${sun.boot.class.path}"/> + <pathelement location="${ais-core.jar}"/> + <path refid="transforms.classpath"/> + <pathelement location="${xmlsec.jar}"/> + <pathelement location="${jce.jar}"/> + <pathelement location="${log4j.jar}"/> + <pathelement location="${goXMLResource.zip}"/> + <pathelement location="${goXMLconfig.dir}"/> + <pathelement location="${jdom.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.unittest.appinterface.transforms.ApacheXPathNamespaceTestSuite" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.unittest.appinterface.transforms.SimpleAwkTestSuite" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.unittest.appinterface.transforms.TransformationManagerBindingTestSuite" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.unittest.appinterface.transforms.TransformationManagerTestSuite" todir="${junit.reports.xml}"/> + <test name="com.seagullsw.unittest.appinterface.transforms.GoXMLTransformationManagerTestSuite" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: com.seagullsw.appinterface.server.security.auth --> + <target name="junit.security.auth" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="jce.classpath.rt"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.security.auth.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: com.seagullsw.appinterface.server.crypto --> + <target name="junit.crypto" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="jce.classpath.rt"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.crypto.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: com.seagullsw.toolbox.net --> + <target name="junit.toolbox.net" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <pathelement location="${commons-codec.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${commons-logging.jar}"/> + <path refid="jce.classpath.rt"/> + <path refid="jsse.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.toolbox.net.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: com.seagullsw.unittest.appinterface.model --> + <target name="junit.model" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="transforms.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.unittest.appinterface.model.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <target name="junit.server" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="ims.backend.classpath"/> + <path refid="cics.backend.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.LoadFunctionsTest" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: com.seagullsw.unittest.appinterface.server.backend.hostconnector2 --> + <target name="junit.hostconnector2" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <pathelement location="${test.bin}"/> + <pathelement location="${ais-5250.jar}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.unittest.appinterface.server.backend.hostconnector2.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <target name="junit.backend.hsc" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <!-- The timeout is expressed in milliseconds. --> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="jce.classpath.rt"/> + <pathelement location="${ais-5250.jar}"/> + <pathelement location="${ais-3270.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.config.bind.connectors.hsc.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: IMS back-end --> + <target name="junit.backend.ims" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <!-- The timeout is expressed in milliseconds. --> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="ims.backend.classpath"/> + <path refid="jce.classpath.rt"/> + <pathelement location="${ais-ims.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.config.bind.connectors.ims.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <target name="junit.backend.ims.live" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <!-- The timeout is expressed in milliseconds. --> + <junit printsummary="${junit.printsummary}" fork="true" timeout="45000" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="ims.backend.classpath"/> + <path refid="jce.classpath.rt"/> + <pathelement location="${ais-ims.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.backend.ims.AllLiveImsIcoTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Unit Tests: CICS back-end --> + <target name="junit.backend.cics" depends="junit.backend.cics.common, junit.backend.cics.ctg.live, junit.backend.cics.hb, junit.backend.cics.hb.live"/> + <target name="junit.backend.cics.common" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <path refid="jce.classpath.rt"/> + <pathelement location="${ais-cics.jar}"/> + <pathelement location="${ctgclient.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${commons-logging.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.config.bind.connectors.cics.AllTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <target name="junit.backend.cics.ctg.live" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <!-- The timeout is expressed in milliseconds. --> + <junit printsummary="${junit.printsummary}" fork="true" timeout="600000" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <pathelement location="${ais-cics.jar}"/> + <pathelement location="${ctgclient.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.backend.cics.AllLiveIbmCtgTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <target name="junit.backend.cics.hb" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="${junit.fork}" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <pathelement location="${ais-cics.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${commons-logging.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.backend.cics.HostBridgeByteBufferStrategyTest" todir="${junit.reports.xml}"/> + </junit> + </target> + <target name="junit.backend.cics.hb.live" depends="report.init"> + <mkdir dir="${junit.reports.xml}"/> + <junit printsummary="${junit.printsummary}" fork="true" timeout="600000" dir="${junit.dir}" includeantruntime="${junit.includeantruntime}"> + <formatter type="${junit.formatter}" extension="${junit.report.ext}"/> + <classpath> + <pathelement location="${ais-core.jar}"/> + <path refid="ais.classpath"/> + <pathelement location="${ais-cics.jar}"/> + <pathelement location="${commons-httpclient.jar}"/> + <pathelement location="${commons-logging.jar}"/> + <pathelement location="${test.bin}"/> + <pathelement location="${test.resources}"/> + <path refid="junit.classpath"/> + </classpath> + <test name="com.seagullsw.appinterface.server.backend.cics.AllLiveHostBridgeTests" todir="${junit.reports.xml}"/> + </junit> + </target> + <!-- Clean reports --> + <target name="junit.report.clean"> + <delete dir="${junit.reports}"/> + </target> + <!-- Create the unit tests report --> + <target name="junit.report" depends="init"> + <mkdir dir="${junit.reports}"/> + <property name="junit.reports.frames" location="${junit.reports}/frames"/> + <property name="junit.reports.noframes" location="${junit.reports}/noframes"/> + <mkdir dir="${junit.reports.xml}"/> + <mkdir dir="${junit.reports.frames}"/> + <mkdir dir="${junit.reports.noframes}"/> + <echo level="info" message="Compiling all reports to ${junit.reports}..."/> + <junitreport todir="${junit.reports.xml}"> + <fileset dir="${junit.reports.xml}"> + <include name="**/*${junit.report.ext}"/> + </fileset> + <report format="noframes" todir="${junit.reports.noframes}"/> + <report format="frames" todir="${junit.reports.frames}"/> + </junitreport> + <echo level="info" message="The XML report is in: ${junit.reports.xml}"/> + <echo level="info" message="The HTML report (with frames) is in: ${junit.reports.frames}"/> + <echo level="info" message="The HTML report (no frames) is in: ${junit.reports.noframes}"/> + <!-- Rename file to index.html --> + <move file="${junit.reports.noframes}/junit-noframes.html" tofile="${junit.reports.noframes}/index.html"/> + <!-- Copy test reports home page --> + <copy file="${junit.reports.srcdir}/index.html" todir="${reports.dir}" overwrite="true" filtering="true"/> + <copy todir="${reports.dir}/images" overwrite="true"> + <fileset dir="${junit.reports.srcdir}/images"/> + </copy> + <antcall target="report.checksums"/> + </target> + <target name="report.checksums"> + <antcall target="copy-checksums"/> + <property name="temp.index" value="${reports.dir}/index-temp.html"/> + <xslt in="${reports.dir}/index.html" out="${temp.index}" force="true" style="${junit.reports.srcdir}/apply-data.xslt"> + <param name="reportDir" expression="${reports.dir}"/> + </xslt> + <delete file="${reports.dir}/index.html"/> + <move file="${temp.index}" tofile="${reports.dir}/index.html"/> + </target> + <target name="junit.javax" depends="junit.javax.io, junit.javax.util, junit.javax.lang"/> + <target name="junit.server.config" depends="junit.server.config.log, junit.server.config.threadpool, junit.server.config.transform, junit.server.config.core, junit.server.config.management"/> + <target name="junit.toolbox" depends="junit.toolbox.config, junit.toolbox.xml, junit.toolbox.net, junit.toolbox.log"/> + <target name="junit.ais-core" depends="junit.javax, junit.toolbox, junit.server.config, junit.ais-core.transforms, junit.security.auth, junit.crypto, junit.model, junit.server"/> + <target name="junit.backend" depends="junit.backend.hsc, junit.backend.ims, junit.backend.ims.live, junit.backend.cics, junit.hostconnector2"/> + <target name="test" description="Runs the tests." depends="init, test.compile, junit.report.clean, junit.ais-core, junit.backend, junit.report"/> + <!-- Build and Zip --> + <target name="zip" depends="dist" description="Creates the final ${zip-file} (does it all)"> + <property name="zip-file" location="${build.dir}/${zipFileBaseName}-build${build.id}.zip"/> + <delete file="${zip-file}" quiet="true"/> + <zip zipfile="${zip-file}" basedir="${build.dist}"/> + </target> + <target name="nightly-build" depends="init, clean, dist, verify, test" description="Creates a nightly build (does it all)"> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,4 @@ + + + +<project ></project>
\ No newline at end of file @@ -0,0 +1,49 @@ +<project default="1"> + <path id="project.class.path"> + <pathelement location="lib/" /> + <pathelement path="${java.class.path}/" /> + <pathelement path="${additional.path}" /> + </path> + + <target name="1"> + <path id="project.class.path2"> + <path refid="project.class.path" /> + </path> + </target> + + <target name="compile"> + <javac srcdir="src" + destdir="dst" + classpathref="" + sourcepathref="" + bootclasspathref="" + debug="on" /> + </target> + + <target name= "depends" depends=" compile , 1 "> + </target> + + <property name="name with spaces" value="value with spaces"/> + + + <fileset dir="dir" id="filesetTest"> + <include name="include"/> + <exclude name="exclude"/> + </fileset> + + <patternset id="patternSetTest"> + <include name="*.xml"/> + <exclude name="**/*Test*"/> + </patternset> + + <patternset id="patternSetTestBad"> + <includesfile name="nothere"/> + </patternset> + + <echo>${name with spaces}</echo> + + <fileset refid="filesetTest"> + <patternset refid="patternSetTest"></patternset> + <patternset refid="patternSetTestBad"></patternset> + </fileset> +</project>
\ No newline at end of file @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="windows-1251"?> +<project name="test" default="init" basedir="."> + + <target name="init"> + <!-- displays Hello in Russian --> + <echo message="Çäðà âñòâóéòå"/> + </target> +</project>
\ No newline at end of file @@ -0,0 +1,11 @@ +<project default="type"> + + <taskdef name="mine" classname="org.eclipse.ant.tests.ui.support.tasks.AntTestTask" classpath="antUITestsSupport.jar"> + </taskdef> + + <target name="type"> + + </target> + + <mine></mine> +</project>
\ No newline at end of file @@ -0,0 +1,10 @@ + +<bla> + <blub></blub> + <klick> + <gurgel></gurgel> + <hal + <klack/> + <humpf/> + </klick> +</bla>
\ No newline at end of file @@ -0,0 +1,9 @@ +<bla> + <blub></blub> + <klick> + <gurgel></gurgel> + <hal></hal> + <klack/> + <humpf/> + </klick> +</bla>
\ No newline at end of file @@ -0,0 +1,4 @@ +<bla> + <blub> + </blub> +</ @@ -0,0 +1 @@ +<target name="main"><mk
\ No newline at end of file @@ -0,0 +1,6 @@ +<project name="main"> + <target name="bla" /> + <property name="prop1" value="val1"/> + <property name="prop2" value="val2"/> + <property name="prop3" value="val3"/> +<g
\ No newline at end of file @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<project name="toBeImported" default="import-default"> + + <target name="import-default" depends="depends"> + <echo>import-default</echo> + </target> + + <target name="depends"> + <echo>depends</echo> + </target> +</project> + @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- + Copyright (c) 2005, 2008 IBM Corporation and others. + All rights reserved. This program and the accompanying materials + are made available under the terms of the Eclipse Public License v1.0 + which accompanies this distribution, and is available at + http://www.eclipse.org/legal/epl-v10.html + + Contributors: + IBM Corporation - initial API and implementation + --> + +<!-- + bug 195840 Import a XML file with BOM character in ant editor fails + this file starts with Byte Order Mark EF BB BF - utf8 +--> +<project basedir="." default="build" name="Test"> + <target name="build" /> +</project> @@ -0,0 +1,30 @@ +/******************************************************************************* + * Copyright (c) 2004, 2005 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +/* + * Created on Sep 21, 2004 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ + +/** + * @author Administrator + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +public class Test2 { + + public static void main(String[] args) { + + System.out.println("preRuntest"); + } +} diff --git a/ant/org.eclipse.ant.ui/.classpath b/ant/org.eclipse.ant.ui/.classpath new file mode 100644 index 000000000..bb1af3b61 --- /dev/null +++ b/ ant/org.eclipse.ant.ui/.classpath@@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="Ant Tools Support"/> + <classpathentry kind="src" output="ant_runner_support_bin" path="Ant Runner Support"/> + <classpathentry kind="src" path="Ant Editor"/> + <classpathentry kind="src" output="remote_support_bin" path="Remote Ant Support"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="output" path="bin"/> +</classpath> @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean"/> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.debug.ui.target_run_perspective" value="perspective_none"/> +<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS" value="clean,"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" name="workingSet" editPageId="org.eclipse.ui.resourceWorkingSetPage"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.ui/Common Ant Support" type="2"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.ui/Ant Runner Support" type="2"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.ui/buildfiles/buildExtraJAR.xml" type="1"/> </launchConfigurationWorkingSet> }"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.ant.ui/buildfiles/buildExtraJAR.xml}"/> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_RUN_IN_BACKGROUND" value="false"/> +</launchConfiguration> @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean"/> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" name="workingSet" editPageId="org.eclipse.ui.resourceWorkingSetPage"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.ui/buildfiles/buildRemoteExtraJAR.xml" type="1"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.ui/Common Ant Support" type="2"/> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.ant.ui/Remote Ant Support" type="2"/> </launchConfigurationWorkingSet> }"/> +<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS" value="clean,"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.eclipse.ant.ui/buildfiles/buildRemoteExtraJAR.xml}"/> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_RUN_IN_BACKGROUND" value="false"/> +</launchConfiguration> diff --git a/ant/org.eclipse.ant.ui/.project b/ant/org.eclipse.ant.ui/.project new file mode 100644 index 000000000..b8a58f642 --- /dev/null +++ b/ ant/org.eclipse.ant.ui/.project@@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.ant.ui</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/Build Ant Runner Support JAR.launch</value> + </dictionary> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/Build Remote Ant JAR.launch</value> + </dictionary> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.team.cvs.core.cvsnature</nature> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> + </natures> +</projectDescription> @@ -0,0 +1,3 @@ +#Fri Jan 21 19:40:52 GMT-08:00 2005
+eclipse.preferences.version=1
+selfhosting.binExcludes=/org.eclipse.ant.ui/ant_runner_support_bin,/org.eclipse.ant.ui/common_ant_support_bin,/org.eclipse.ant.ui/remote_support_bin
@@ -0,0 +1,18688 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tasks> +<task name="ant" category="control" + classname="org.apache.tools.ant.taskdefs.Ant" + > + + <short-description><![CDATA[Build a sub-project.]]></short-description> + <description> + <![CDATA[Build a sub-project. + + <pre> + <target name="foo" depends="init"> + <ant antfile="build.xml" target="bar" > + <property name="property1" value="aaaaa" /> + <property name="foo" value="baz" /> + </ant></SPAN> + </target></SPAN> + + <target name="bar" depends="init"> + <echo message="prop is ${property1} ${foo}" /> + </target> + </pre>]]> + </description> + + <structure> + + <attributes> + <attribute name="antfile" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The buildfile to use.]]></short-description> + <description><![CDATA[ + The buildfile to use. + Defaults to "build.xml". This file is expected to be a filename relative + to the dir attribute given. + ]]></description> + </attribute> + <attribute name="dir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The directory to use as a base directory for the new Ant project.]]></short-description> + <description><![CDATA[ + The directory to use as a base directory for the new Ant project. + Defaults to the current project's basedir, unless inheritall + has been set to false, in which case it doesn't have a default + value. This will override the basedir setting of the called project. + ]]></description> + </attribute> + <attribute name="inheritall" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, pass all properties to the new Ant project.]]></short-description> + <description><![CDATA[ + If true, pass all properties to the new Ant project. + Defaults to true. + ]]></description> + </attribute> + <attribute name="inheritrefs" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, pass all references to the new Ant project.]]></short-description> + <description><![CDATA[ + If true, pass all references to the new Ant project. + Defaults to false. + ]]></description> + </attribute> + <attribute name="output" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Filename to write the output to.]]></short-description> + <description><![CDATA[ + Filename to write the output to. + This is relative to the value of the dir attribute + if it has been set or to the base directory of the + current project otherwise. + ]]></description> + </attribute> + <attribute name="target" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The target of the new Ant project to execute.]]></short-description> + <description><![CDATA[ + The target of the new Ant project to execute. + Defaults to the new project's default target. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="reference" type="org.apache.tools.ant.taskdefs.Ant.Reference" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Reference element identifying a data type to carry + over to the new project.]]></short-description> + <description> + <![CDATA[Reference element identifying a data type to carry + over to the new project.]]> + </description> + </element> + + <element name="property" type="org.apache.tools.ant.taskdefs.Property" + briefType="see <property>" + required="NOTDEFINED"> + <short-description><![CDATA[Property to pass to the new project.]]></short-description> + <description> + <![CDATA[Property to pass to the new project. + The property is passed as a 'user property']]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="antcall" category="control" + classname="org.apache.tools.ant.taskdefs.CallTarget" + > + + <short-description><![CDATA[Call another target in the same project.]]></short-description> + <description> + <![CDATA[Call another target in the same project. + + <pre> + <target name="foo"> + <antcall target="bar"> + <param name="property1" value="aaaaa" /> + <param name="foo" value="baz" /> + </antcall> + </target> + + <target name="bar" depends="init"> + <echo message="prop is ${property1} ${foo}" /> + </target> + </pre> + + <p>This only works as expected if neither property1 nor foo are + defined in the project itself.]]> + </description> + + <structure> + + <attributes> + <attribute name="inheritall" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, pass all properties to the new Ant project.]]></short-description> + <description><![CDATA[ + If true, pass all properties to the new Ant project. + Defaults to true. + ]]></description> + </attribute> + <attribute name="inheritrefs" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, pass all references to the new Ant project.]]></short-description> + <description><![CDATA[ + If true, pass all references to the new Ant project. + Defaults to false + ]]></description> + </attribute> + <attribute name="target" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Target to execute, required.]]></short-description> + <description><![CDATA[ + Target to execute, required. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="reference" type="org.apache.tools.ant.taskdefs.Ant.Reference" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Reference element identifying a data type to carry + over to the invoked target.]]></short-description> + <description> + <![CDATA[Reference element identifying a data type to carry + over to the invoked target.]]> + </description> + </element> + + <element name="param" type="org.apache.tools.ant.taskdefs.Property" + briefType="see <property>" + required="NOTDEFINED"> + <short-description><![CDATA[Property to pass to the invoked target.]]></short-description> + <description> + <![CDATA[Property to pass to the invoked target.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="antlr" category="other" + classname="org.apache.tools.ant.taskdefs.optional.ANTLR" + > + + <short-description><![CDATA[Invokes the ANTLR Translator generator on a grammar file.]]></short-description> + <description> + <![CDATA[Invokes the ANTLR Translator generator on a grammar file.]]> + </description> + + <structure> + + <attributes> + <attribute name="debug" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Flag to enable ParseView debugging.]]></short-description> + <description><![CDATA[ + Sets a flag to enable ParseView debugging + ]]></description> + </attribute> + <attribute name="diagnostic" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Flag to emit diagnostic text.]]></short-description> + <description><![CDATA[ + Sets a flag to emit diagnostic text + ]]></description> + </attribute> + <attribute name="dir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The working directory of the process.]]></short-description> + <description><![CDATA[ + The working directory of the process + ]]></description> + </attribute> + <attribute name="glib" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Sets an optional super grammar file.]]></short-description> + <description><![CDATA[ + Sets an optional super grammar file. + ]]></description> + </attribute> + <attribute name="html" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, emit html.]]></short-description> + <description><![CDATA[ + If true, emit html + ]]></description> + </attribute> + <attribute name="outputdirectory" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The directory to write the generated files to.]]></short-description> + <description><![CDATA[ + The directory to write the generated files to. + ]]></description> + </attribute> + <attribute name="target" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The grammar file to process.]]></short-description> + <description><![CDATA[ + The grammar file to process. + ]]></description> + </attribute> + <attribute name="trace" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, enables all tracing.]]></short-description> + <description><![CDATA[ + If true, enables all tracing. + ]]></description> + </attribute> + <attribute name="tracelexer" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, enables lexer tracing.]]></short-description> + <description><![CDATA[ + If true, enables lexer tracing. + ]]></description> + </attribute> + <attribute name="traceparser" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, enables parser tracing.]]></short-description> + <description><![CDATA[ + If true, enables parser tracing. + ]]></description> + </attribute> + <attribute name="tracetreewalker" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Flag to allow the user to enable tree walker tracing.]]></short-description> + <description><![CDATA[ + Sets a flag to allow the user to enable tree walker tracing + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="classpath" type="org.apache.tools.ant.types.Path" + briefType="Path" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a classpath to be set + because a directory might be given for Antlr debug.]]></short-description> + <description> + <![CDATA[Adds a classpath to be set + because a directory might be given for Antlr debug.]]> + </description> + </element> + + <element name="jvmarg" type="org.apache.tools.ant.types.Commandline.Argument" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a new JVM argument.]]></short-description> + <description> + <![CDATA[Adds a new JVM argument.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="antstructure" category="xml" + classname="org.apache.tools.ant.taskdefs.AntStructure" + > + + <short-description><![CDATA[Creates a partial DTD for Ant from the currently known tasks.]]></short-description> + <description> + <![CDATA[Creates a partial DTD for Ant from the currently known tasks.]]> + </description> + + <structure> + + <attributes> + <attribute name="output" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The output file.]]></short-description> + <description><![CDATA[ + The output file. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="apply" category="control" + classname="org.apache.tools.ant.taskdefs.ExecuteOn" + > + + <short-description><![CDATA[Executes a given command, supplying a set of files as arguments.]]></short-description> + <description> + <![CDATA[Executes a given command, supplying a set of files as arguments.]]> + </description> + + <structure> + + <attributes> + <attribute name="append" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Whether output should be appended to or overwrite an existing file.]]></short-description> + <description><![CDATA[ + Whether output should be appended to or overwrite an existing file. + Defaults to false. + ]]></description> + </attribute> + <attribute name="dest" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The directory where target files are to be placed.]]></short-description> + <description><![CDATA[ + The directory where target files are to be placed. + ]]></description> + </attribute> + <attribute name="dir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The working directory of the process.]]></short-description> + <description><![CDATA[ + The working directory of the process. + ]]></description> + </attribute> + <attribute name="executable" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The command to execute.]]></short-description> + <description><![CDATA[ + The command to execute. + ]]></description> + </attribute> + <attribute name="failifexecutionfails" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Stop the build if program cannot be started.]]></short-description> + <description><![CDATA[ + Stop the build if program cannot be started. Defaults to true. + ]]></description> + </attribute> + <attribute name="failonerror" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Fail if the command exits with a non-zero return code.]]></short-description> + <description><![CDATA[ + Fail if the command exits with a non-zero return code. + ]]></description> + </attribute> + <attribute name="newenvironment" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Do not propagate old environment when new environment variables are specified.]]></short-description> + <description><![CDATA[ + Do not propagate old environment when new environment variables are specified. + ]]></description> + </attribute> + <attribute name="os" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[List of operating systems on which the command may be executed.]]></short-description> + <description><![CDATA[ + List of operating systems on which the command may be executed. + ]]></description> + </attribute> + <attribute name="output" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[File the output of the process is redirected to.]]></short-description> + <description><![CDATA[ + File the output of the process is redirected to. + ]]></description> + </attribute> + <attribute name="outputproperty" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Property name whose value should be set to the output of + the process.]]></short-description> + <description><![CDATA[ + Property name whose value should be set to the output of + the process. + ]]></description> + </attribute> + <attribute name="parallel" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, run the command only once, appending all files as arguments.]]></short-description> + <description><![CDATA[ + If true, run the command only once, appending all files as arguments. + If false, command will be executed once for every file. Defaults to false. + ]]></description> + </attribute> + <attribute name="relative" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Whether the filenames should be passed on the command line as + absolute or relative pathnames.]]></short-description> + <description><![CDATA[ + Whether the filenames should be passed on the command line as + absolute or relative pathnames. Paths are relative to the base + directory of the corresponding fileset for source files or the + dest attribute for target files. + ]]></description> + </attribute> + <attribute name="resultproperty" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The name of a property in which the return code of the + command should be stored.]]></short-description> + <description><![CDATA[ + The name of a property in which the return code of the + command should be stored. Only of interest if failonerror=false. + ]]></description> + </attribute> + <attribute name="skipemptyfilesets" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If no source files have been found or are newer than their + corresponding target files, do not run the command.]]></short-description> + <description><![CDATA[ + If no source files have been found or are newer than their + corresponding target files, do not run the command. + ]]></description> + </attribute> + <attribute name="type" type="org.apache.tools.ant.taskdefs.ExecuteOn.FileDirBoth" + briefType=""file", "dir", "both"" required="NOTDEFINED"> + <short-description><![CDATA[Whether the command works only on files, directories or both?.]]></short-description> + <description><![CDATA[ + Whether the command works only on files, directories or both? + ]]></description> + </attribute> + <attribute name="vmlauncher" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, launch new process with VM, otherwise use the OS's shell.]]></short-description> + <description><![CDATA[ + If true, launch new process with VM, otherwise use the OS's shell. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="env" type="org.apache.tools.ant.types.Environment.Variable" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an environment variable to the launched process.]]></short-description> + <description> + <![CDATA[Add an environment variable to the launched process.]]> + </description> + </element> + + <element name="fileset" type="org.apache.tools.ant.types.FileSet" + briefType="Fileset" + required="NOTDEFINED"> + <short-description><![CDATA[Source files to operate upon.]]></short-description> + <description> + <![CDATA[Source files to operate upon.]]> + </description> + </element> + + <element name="arg" type="org.apache.tools.ant.types.Commandline.Argument" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a command-line argument.]]></short-description> + <description> + <![CDATA[Adds a command-line argument.]]> + </description> + </element> + + <element name="mapper" type="org.apache.tools.ant.types.Mapper" + briefType="Mapper" + required="NOTDEFINED"> + <short-description><![CDATA[Mapper to use for mapping source files to target files.]]></short-description> + <description> + <![CDATA[Mapper to use for mapping source files to target files.]]> + </description> + </element> + + <element name="srcfile" type="org.apache.tools.ant.types.Commandline.Marker" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Marker that indicates where the name of the source file should + be put on the command line.]]></short-description> + <description> + <![CDATA[Marker that indicates where the name of the source file should + be put on the command line.]]> + </description> + </element> + + <element name="targetfile" type="org.apache.tools.ant.types.Commandline.Marker" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Marker that indicates where the name of the target file should + be put on the command line.]]></short-description> + <description> + <![CDATA[Marker that indicates where the name of the target file should + be put on the command line.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="available" category="control" + classname="org.apache.tools.ant.taskdefs.Available" + > + + <short-description><![CDATA[Will set the given property if the requested resource is available at runtime.]]></short-description> + <description> + <![CDATA[Will set the given property if the requested resource is available at + runtime. This task may also be used as a condition by the condition task.]]> + </description> + + <structure> + + <attributes> + <attribute name="classname" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Classname of a class which must be available to set the given + property.]]></short-description> + <description><![CDATA[ + Set a classname of a class which must be available to set the given + property. + ]]></description> + </attribute> + <attribute name="classpath" type="org.apache.tools.ant.types.Path" + briefType="Path" required="NOTDEFINED"> + <short-description><![CDATA[Classpath to be used when searching for classes and resources.]]></short-description> + <description><![CDATA[ + Set the classpath to be used when searching for classes and resources. + ]]></description> + </attribute> + <attribute name="classpathref" type="org.apache.tools.ant.types.Reference" + briefType="Reference" required="NOTDEFINED"> + <short-description><![CDATA[Classpath by reference.]]></short-description> + <description><![CDATA[ + Set the classpath by reference. + ]]></description> + </attribute> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[File which must be present in the file system to set the given + property.]]></short-description> + <description><![CDATA[ + Set the file which must be present in the file system to set the given + property. + ]]></description> + </attribute> + <attribute name="filepath" type="org.apache.tools.ant.types.Path" + briefType="Path" required="NOTDEFINED"> + <short-description><![CDATA[Path to use when looking for a file.]]></short-description> + <description><![CDATA[ + Set the path to use when looking for a file. + ]]></description> + </attribute> + <attribute name="ignoresystemclasses" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Set whether the search for classes should ignore the runtime classes and + just use the given classpath.]]></short-description> + <description><![CDATA[ + Set whether the search for classes should ignore the runtime classes and + just use the given classpath. + ]]></description> + </attribute> + <attribute name="property" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Name of the property which will be set if the particular resource + is available.]]></short-description> + <description><![CDATA[ + Set the name of the property which will be set if the particular resource + is available. + ]]></description> + </attribute> + <attribute name="resource" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Name of a Java resource which is required to set the property.]]></short-description> + <description><![CDATA[ + Set the name of a Java resource which is required to set the property. + ]]></description> + </attribute> + <attribute name="type" type="org.apache.tools.ant.taskdefs.Available.FileDir" + briefType=""file", "dir"" required="NOTDEFINED"> + <short-description><![CDATA[Set what type of file is required - either directory or file.]]></short-description> + <description><![CDATA[ + Set what type of file is required - either directory or file. + ]]></description> + </attribute> + <attribute name="value" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Value to be given to the property if the desired resource is + available.]]></short-description> + <description><![CDATA[ + Set the value to be given to the property if the desired resource is + available. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="classpath" type="org.apache.tools.ant.types.Path" + briefType="Path" + required="NOTDEFINED"> + <short-description><![CDATA[Classpath to be used when searching for classes and resources.]]></short-description> + <description> + <![CDATA[Classpath to be used when searching for classes and resources.]]> + </description> + </element> + + <element name="filepath" type="org.apache.tools.ant.types.Path" + briefType="Path" + required="NOTDEFINED"> + <short-description><![CDATA[Path to search for file resources.]]></short-description> + <description> + <![CDATA[Path to search for file resources.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="basename" category="property" + classname="org.apache.tools.ant.taskdefs.Basename" + > + + <short-description><![CDATA[Sets a property to the base name of a specified file, optionally minus a suffix.]]></short-description> + <description> + <![CDATA[Sets a property to the base name of a specified file, optionally minus a + suffix. + + This task can accept the following attributes: + <ul> + <li>file + <li>property + <li>suffix + </ul> + The <b>file</b> and <b>property</b> attributes are required. The + <b>suffix</b> attribute can be specified either with or without + the ".", and the result will be the same (ie., the + returned file name will be minus the .suffix). + <p> + When this task executes, it will set the specified property to the + value of the last element in the specified file. If file is a + directory, the basename will be the last directory element. If file + is a full-path filename, the basename will be the simple file name. + If a suffix is specified, and the specified file ends in that suffix, + the basename will be the simple file name without the suffix.]]> + </description> + + <structure> + + <attributes> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[File or directory to get base name from.]]></short-description> + <description><![CDATA[ + File or directory to get base name from. + ]]></description> + </attribute> + <attribute name="property" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Property to set base name to.]]></short-description> + <description><![CDATA[ + Property to set base name to. + ]]></description> + </attribute> + <attribute name="suffix" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Optional suffix to remove from base name.]]></short-description> + <description><![CDATA[ + Optional suffix to remove from base name. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="blgenclient" category="ejb" + classname="org.apache.tools.ant.taskdefs.optional.ejb.BorlandGenerateClient" + > + + <short-description><![CDATA[Generates a Borland Application Server 4.5 client JAR using as input the EJB JAR file.]]></short-description> + <description> + <![CDATA[Generates a Borland Application Server 4.5 client JAR using as + input the EJB JAR file. + + Two mode are available: java mode (default) and fork mode. With the fork mode, + it is impossible to add classpath to the commmand line.]]> + </description> + + <structure> + + <attributes> + <attribute name="classpath" type="org.apache.tools.ant.types.Path" + briefType="Path" required="NOTDEFINED"> + <short-description><![CDATA[Path to use for classpath.]]></short-description> + <description><![CDATA[ + Path to use for classpath. + ]]></description> + </attribute> + <attribute name="classpathref" type="org.apache.tools.ant.types.Reference" + briefType="Reference" required="NOTDEFINED"> + <short-description><![CDATA[Reference to existing path, to use as a classpath.]]></short-description> + <description><![CDATA[ + Reference to existing path, to use as a classpath. + ]]></description> + </attribute> + <attribute name="clientjar" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Client JAR file name.]]></short-description> + <description><![CDATA[ + Client JAR file name. + ]]></description> + </attribute> + <attribute name="debug" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, turn on the debug mode for each of the Borland tools launched.]]></short-description> + <description><![CDATA[ + If true, turn on the debug mode for each of the Borland tools launched. + ]]></description> + </attribute> + <attribute name="ejbjar" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[EJB JAR file.]]></short-description> + <description><![CDATA[ + EJB JAR file. + ]]></description> + </attribute> + <attribute name="mode" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Command launching mode: java or fork.]]></short-description> + <description><![CDATA[ + Command launching mode: java or fork. + ]]></description> + </attribute> + <attribute name="version" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="classpath" type="org.apache.tools.ant.types.Path" + briefType="Path" + required="NOTDEFINED"> + <short-description><![CDATA[Adds path to the classpath.]]></short-description> + <description> + <![CDATA[Adds path to the classpath.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="buildnumber" category="other" + classname="org.apache.tools.ant.taskdefs.BuildNumber" + > + + <short-description><![CDATA[Read, increment, and write a build number in a file It will first attempt to read a build number from a file, then set the property "build.number" to the value that was read in (or 0 if no such value).]]></short-description> + <description> + <![CDATA[Read, increment, and write a build number in a file + It will first + attempt to read a build number from a file, then set the property + "build.number" to the value that was read in (or 0 if no such value). Then + it will increment the build number by one and write it back out into the + file.]]> + </description> + + <structure> + + <attributes> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The file in which the build number is stored.]]></short-description> + <description><![CDATA[ + The file in which the build number is stored. Defaults to + "build.number" if not specified. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="bunzip2" category="packaging" + classname="org.apache.tools.ant.taskdefs.BUnzip2" + > + + <short-description><![CDATA[Expands a file that has been compressed with the BZIP2 algorithm.]]></short-description> + <description> + <![CDATA[Expands a file that has been compressed with the BZIP2 + algorithm. Normally used to compress non-compressed archives such + as TAR files.]]> + </description> + + <structure> + + <attributes> + <attribute name="dest" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The destination file or directory; optional.]]></short-description> + <description><![CDATA[ + The destination file or directory; optional. + ]]></description> + </attribute> + <attribute name="src" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The file to expand; required.]]></short-description> + <description><![CDATA[ + The file to expand; required. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="bzip2" category="packaging" + classname="org.apache.tools.ant.taskdefs.BZip2" + > + + <short-description><![CDATA[Compresses a file with the BZIP2 algorithm.]]></short-description> + <description> + <![CDATA[Compresses a file with the BZIP2 algorithm. Normally used to compress + non-compressed archives such as TAR files.]]> + </description> + + <structure> + + <attributes> + <attribute name="src" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The file to compress; required.]]></short-description> + <description><![CDATA[ + the file to compress; required. + ]]></description> + </attribute> + <attribute name="zipfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The required destination file.]]></short-description> + <description><![CDATA[ + the required destination file. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="cab" category="other" + classname="org.apache.tools.ant.taskdefs.optional.Cab" + matchingTask="true"> + + <short-description><![CDATA[Create a CAB archive.]]></short-description> + <description> + <![CDATA[Create a CAB archive.]]> + </description> + + <structure> + + <attributes> + <attribute name="basedir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Base directory to look in for files to CAB.]]></short-description> + <description><![CDATA[ + Base directory to look in for files to CAB. + ]]></description> + </attribute> + <attribute name="cabfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The name/location of where to create the .cab file.]]></short-description> + <description><![CDATA[ + The name/location of where to create the .cab file. + ]]></description> + </attribute> + <attribute name="compress" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, compress the files otherwise only store them.]]></short-description> + <description><![CDATA[ + If true, compress the files otherwise only store them. + ]]></description> + </attribute> + <attribute name="options" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Sets additional cabarc options that are not supported directly.]]></short-description> + <description><![CDATA[ + Sets additional cabarc options that are not supported directly. + ]]></description> + </attribute> + <attribute name="verbose" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, display cabarc output.]]></short-description> + <description><![CDATA[ + If true, display cabarc output. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="fileset" type="org.apache.tools.ant.types.FileSet" + briefType="Fileset" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a set of files to archive.]]></short-description> + <description> + <![CDATA[Adds a set of files to archive.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="cccheckin" category="other" + classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckin" + > + + <short-description><![CDATA[Performs ClearCase checkin.]]></short-description> + <description> + <![CDATA[Performs ClearCase checkin. + + <p> + The following attributes are interpreted: + <table border="1"> + <tr> + <th>Attribute</th> + <th>Values</th> + <th>Required</th> + </tr> + <tr> + <td>viewpath</td> + <td>Path to the ClearCase view file or directory that the command will operate on</td> + <td>No</td> + <tr> + <tr> + <td>comment</td> + <td>Specify a comment. Only one of comment or cfile may be used.</td> + <td>No</td> + <tr> + <tr> + <td>commentfile</td> + <td>Specify a file containing a comment. Only one of comment or cfile may be used.</td> + <td>No</td> + <tr> + <tr> + <td>nowarn</td> + <td>Suppress warning messages</td> + <td>No</td> + <tr> + <tr> + <td>preservetime</td> + <td>Preserve the modification time</td> + <td>No</td> + <tr> + <tr> + <td>keepcopy</td> + <td>Keeps a copy of the file with a .keep extension</td> + <td>No</td> + <tr> + <tr> + <td>identical</td> + <td>Allows the file to be checked in even if it is identical to the original</td> + <td>No</td> + <tr> + </table>]]> + </description> + + <structure> + + <attributes> + <attribute name="cleartooldir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the cleartool executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the cleartool executable is located. + ]]></description> + </attribute> + <attribute name="comment" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Comment string.]]></short-description> + <description><![CDATA[ + Sets the comment string. + ]]></description> + </attribute> + <attribute name="commentfile" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies a file containing a comment.]]></short-description> + <description><![CDATA[ + Specifies a file containing a comment. + ]]></description> + </attribute> + <attribute name="identical" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, allows the file to be checked in even + if it is identical to the original.]]></short-description> + <description><![CDATA[ + If true, allows the file to be checked in even + if it is identical to the original. + ]]></description> + </attribute> + <attribute name="keepcopy" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, keeps a copy of the file with a .keep extension.]]></short-description> + <description><![CDATA[ + If true, keeps a copy of the file with a .keep extension. + ]]></description> + </attribute> + <attribute name="nowarn" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, suppress warning messages.]]></short-description> + <description><![CDATA[ + If true, suppress warning messages. + ]]></description> + </attribute> + <attribute name="preservetime" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, preserve the modification time.]]></short-description> + <description><![CDATA[ + If true, preserve the modification time. + ]]></description> + </attribute> + <attribute name="viewpath" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Path to the item in a ClearCase view to operate on.]]></short-description> + <description><![CDATA[ + Set the path to the item in a ClearCase view to operate on. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="cccheckout" category="other" + classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout" + > + + <short-description><![CDATA[Performs ClearCase checkout.]]></short-description> + <description> + <![CDATA[Performs ClearCase checkout. + + <p> + The following attributes are interpretted: + <table border="1"> + <tr> + <th>Attribute</th> + <th>Values</th> + <th>Required</th> + </tr> + <tr> + <td>viewpath</td> + <td>Path to the ClearCase view file or directory that the command will operate on</td> + <td>No</td> + <tr> + <tr> + <td>reserved</td> + <td>Specifies whether to check out the file as reserved or not</td> + <td>Yes</td> + <tr> + <tr> + <td>out</td> + <td>Creates a writable file under a different filename</td> + <td>No</td> + <tr> + <tr> + <td>nodata</td> + <td>Checks out the file but does not create an editable file containing its data</td> + <td>No</td> + <tr> + <tr> + <td>branch</td> + <td>Specify a branch to check out the file to</td> + <td>No</td> + <tr> + <tr> + <td>version</td> + <td>Allows checkout of a version other than main latest</td> + <td>No</td> + <tr> + <tr> + <td>nowarn</td> + <td>Suppress warning messages</td> + <td>No</td> + <tr> + <tr> + <td>comment</td> + <td>Specify a comment. Only one of comment or cfile may be used.</td> + <td>No</td> + <tr> + <tr> + <td>commentfile</td> + <td>Specify a file containing a comment. Only one of comment or cfile may be used.</td> + <td>No</td> + <tr> + </table>]]> + </description> + + <structure> + + <attributes> + <attribute name="branch" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specify a branch to check out the file to.]]></short-description> + <description><![CDATA[ + Specify a branch to check out the file to. + ]]></description> + </attribute> + <attribute name="cleartooldir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the cleartool executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the cleartool executable is located. + ]]></description> + </attribute> + <attribute name="comment" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Comment string.]]></short-description> + <description><![CDATA[ + Sets the comment string. + ]]></description> + </attribute> + <attribute name="commentfile" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies a file containing a comment.]]></short-description> + <description><![CDATA[ + Specifies a file containing a comment. + ]]></description> + </attribute> + <attribute name="nodata" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, checks out the file but does not create an + editable file containing its data.]]></short-description> + <description><![CDATA[ + If true, checks out the file but does not create an + editable file containing its data. + ]]></description> + </attribute> + <attribute name="nowarn" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, warning messages are suppressed.]]></short-description> + <description><![CDATA[ + If true, warning messages are suppressed. + ]]></description> + </attribute> + <attribute name="out" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Creates a writable file under a different filename.]]></short-description> + <description><![CDATA[ + Creates a writable file under a different filename. + ]]></description> + </attribute> + <attribute name="reserved" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, checks out the file as reserved.]]></short-description> + <description><![CDATA[ + If true, checks out the file as reserved. + ]]></description> + </attribute> + <attribute name="version" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, allows checkout of a version other than main latest.]]></short-description> + <description><![CDATA[ + If true, allows checkout of a version other than main latest. + ]]></description> + </attribute> + <attribute name="viewpath" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Path to the item in a ClearCase view to operate on.]]></short-description> + <description><![CDATA[ + Set the path to the item in a ClearCase view to operate on. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="ccmcheckin" category="other" + classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckin" + > + + <short-description><![CDATA[Performs Continuus checkin command.]]></short-description> + <description> + <![CDATA[Performs Continuus checkin command.]]> + </description> + + <structure> + + <attributes> + <attribute name="ccmdir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the ccm executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the ccm executable is located. + ]]></description> + </attribute> + <attribute name="comment" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies a comment.]]></short-description> + <description><![CDATA[ + Specifies a comment. + ]]></description> + </attribute> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Path to the file that the command will operate on.]]></short-description> + <description><![CDATA[ + Sets the path to the file that the command will operate on. + ]]></description> + </attribute> + <attribute name="task" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies the task number used to check + in the file (may use 'default').]]></short-description> + <description><![CDATA[ + Specifies the task number used to check + in the file (may use 'default'). + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="ccmcheckintask" category="scm" + classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckinDefault" + > + + <short-description><![CDATA[Performs Continuus Checkin Default task command.]]></short-description> + <description> + <![CDATA[Performs Continuus Checkin Default task command.]]> + </description> + + <structure> + + <attributes> + <attribute name="ccmdir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the ccm executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the ccm executable is located. + ]]></description> + </attribute> + <attribute name="comment" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies a comment.]]></short-description> + <description><![CDATA[ + Specifies a comment. + ]]></description> + </attribute> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Path to the file that the command will operate on.]]></short-description> + <description><![CDATA[ + Sets the path to the file that the command will operate on. + ]]></description> + </attribute> + <attribute name="task" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies the task number used to check + in the file (may use 'default').]]></short-description> + <description><![CDATA[ + Specifies the task number used to check + in the file (may use 'default'). + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="ccmcheckout" category="other" + classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMCheckout" + > + + <short-description><![CDATA[Performs Continuus checkout command.]]></short-description> + <description> + <![CDATA[Performs Continuus checkout command.]]> + </description> + + <structure> + + <attributes> + <attribute name="ccmdir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the ccm executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the ccm executable is located. + ]]></description> + </attribute> + <attribute name="comment" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies a comment.]]></short-description> + <description><![CDATA[ + Specifies a comment. + ]]></description> + </attribute> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Path to the file that the command will operate on.]]></short-description> + <description><![CDATA[ + Sets the path to the file that the command will operate on. + ]]></description> + </attribute> + <attribute name="task" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies the task number used to check + in the file (may use 'default').]]></short-description> + <description><![CDATA[ + Specifies the task number used to check + in the file (may use 'default'). + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="ccmcreatetask" category="scm" + classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMCreateTask" + > + + <short-description><![CDATA[Creates new Continuus ccm task and sets it as the default.]]></short-description> + <description> + <![CDATA[Creates new Continuus ccm task and sets it as the default.]]> + </description> + + <structure> + + <attributes> + <attribute name="ccmdir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the ccm executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the ccm executable is located. + ]]></description> + </attribute> + <attribute name="comment" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies a comment.]]></short-description> + <description><![CDATA[ + Specifies a comment. + ]]></description> + </attribute> + <attribute name="platform" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies the target platform.]]></short-description> + <description><![CDATA[ + Specifies the target platform. + ]]></description> + </attribute> + <attribute name="release" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specify the CCM release.]]></short-description> + <description><![CDATA[ + Specify the CCM release. + ]]></description> + </attribute> + <attribute name="resolver" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies the resolver.]]></short-description> + <description><![CDATA[ + Specifies the resolver. + ]]></description> + </attribute> + <attribute name="subsystem" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies the subsystem.]]></short-description> + <description><![CDATA[ + Specifies the subsystem. + ]]></description> + </attribute> + <attribute name="task" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies the task number used to checkin + the file (may use 'default').]]></short-description> + <description><![CDATA[ + Specifies the task number used to checkin + the file (may use 'default'). + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="ccmreconfigure" category="other" + classname="org.apache.tools.ant.taskdefs.optional.ccm.CCMReconfigure" + > + + <short-description><![CDATA[Task allows to reconfigure a project, recurcively or not]]></short-description> + <description> + <![CDATA[Task allows to reconfigure a project, recurcively or not]]> + </description> + + <structure> + + <attributes> + <attribute name="ccmdir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the ccm executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the ccm executable is located. + ]]></description> + </attribute> + <attribute name="ccmproject" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Ccm project on which the operation is applied.]]></short-description> + <description><![CDATA[ + Sets the ccm project on which the operation is applied. + ]]></description> + </attribute> + <attribute name="recurse" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, recurse on subproject (default false).]]></short-description> + <description><![CDATA[ + If true, recurse on subproject (default false). + ]]></description> + </attribute> + <attribute name="verbose" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, do a verbose reconfigure operation (default false).]]></short-description> + <description><![CDATA[ + If true, do a verbose reconfigure operation (default false). + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="ccuncheckout" category="other" + classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCUnCheckout" + > + + <short-description><![CDATA[Performs ClearCase UnCheckout command.]]></short-description> + <description> + <![CDATA[Performs ClearCase UnCheckout command. + + <p> + The following attributes are interpretted: + <table border="1"> + <tr> + <th>Attribute</th> + <th>Values</th> + <th>Required</th> + </tr> + <tr> + <td>viewpath</td> + <td>Path to the ClearCase view file or directory that the command will operate on</td> + <td>No</td> + <tr> + <tr> + <td>keepcopy</td> + <td>Specifies whether to keep a copy of the file with a .keep extension or not</td> + <td>No</td> + <tr> + </table>]]> + </description> + + <structure> + + <attributes> + <attribute name="cleartooldir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the cleartool executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the cleartool executable is located. + ]]></description> + </attribute> + <attribute name="keepcopy" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, keep a copy of the file with a .keep extension.]]></short-description> + <description><![CDATA[ + If true, keep a copy of the file with a .keep extension. + ]]></description> + </attribute> + <attribute name="viewpath" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Path to the item in a ClearCase view to operate on.]]></short-description> + <description><![CDATA[ + Set the path to the item in a ClearCase view to operate on. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="ccupdate" category="other" + classname="org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate" + > + + <short-description><![CDATA[Performs a ClearCase Update command.]]></short-description> + <description> + <![CDATA[Performs a ClearCase Update command. + + <p> + The following attributes are interpretted: + <table border="1"> + <tr> + <th>Attribute</th> + <th>Values</th> + <th>Required</th> + </tr> + <tr> + <td>viewpath</td> + <td>Path to the ClearCase view file or directory that the command will operate on</td> + <td>No</td> + <tr> + <tr> + <td>graphical</td> + <td>Displays a graphical dialog during the update</td> + <td>No</td> + <tr> + <tr> + <td>log</td> + <td>Specifies a log file for ClearCase to write to</td> + <td>No</td> + <tr> + <tr> + <td>overwrite</td> + <td>Specifies whether to overwrite hijacked files or not</td> + <td>No</td> + <tr> + <tr> + <td>rename</td> + <td>Specifies that hijacked files should be renamed with a .keep extension</td> + <td>No</td> + <tr> + <tr> + <td>currenttime</td> + <td>Specifies that modification time should be written as the current time. Either currenttime or preservetime can be specified.</td> + <td>No</td> + <tr> + <tr> + <td>preservetime</td> + <td>Specifies that modification time should preserved from the VOB time. Either currenttime or preservetime can be specified.</td> + <td>No</td> + <tr> + </table>]]> + </description> + + <structure> + + <attributes> + <attribute name="cleartooldir" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Directory where the cleartool executable is located.]]></short-description> + <description><![CDATA[ + Set the directory where the cleartool executable is located. + ]]></description> + </attribute> + <attribute name="currenttime" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, modification time should be written as the current time.]]></short-description> + <description><![CDATA[ + If true, modification time should be written as the current time. + Either currenttime or preservetime can be specified. + ]]></description> + </attribute> + <attribute name="graphical" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, displays a graphical dialog during the update.]]></short-description> + <description><![CDATA[ + If true, displays a graphical dialog during the update. + ]]></description> + </attribute> + <attribute name="log" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Log file where cleartool records + the status of the command.]]></short-description> + <description><![CDATA[ + Sets the log file where cleartool records + the status of the command. + ]]></description> + </attribute> + <attribute name="overwrite" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, overwrite hijacked files.]]></short-description> + <description><![CDATA[ + If true, overwrite hijacked files. + ]]></description> + </attribute> + <attribute name="preservetime" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, modification time should be preserved from the VOB time.]]></short-description> + <description><![CDATA[ + If true, modification time should be preserved from the VOB time. + Either currenttime or preservetime can be specified. + ]]></description> + </attribute> + <attribute name="rename" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, hijacked files are renamed with a .keep extension.]]></short-description> + <description><![CDATA[ + If true, hijacked files are renamed with a .keep extension. + ]]></description> + </attribute> + <attribute name="viewpath" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Path to the item in a ClearCase view to operate on.]]></short-description> + <description><![CDATA[ + Set the path to the item in a ClearCase view to operate on. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="checksum" category="control" + classname="org.apache.tools.ant.taskdefs.Checksum" + matchingTask="true"> + + <short-description><![CDATA[Used to create or verify file checksums.]]></short-description> + <description> + <![CDATA[Used to create or verify file checksums.]]> + </description> + + <structure> + + <attributes> + <attribute name="algorithm" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Specifies the algorithm to be used to compute the checksum.]]></short-description> + <description><![CDATA[ + Specifies the algorithm to be used to compute the checksum. + Defaults to "MD5". Other popular algorithms like "SHA" may be used as well. + ]]></description> + </attribute> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[File for which the checksum is to be calculated.]]></short-description> + <description><![CDATA[ + Sets the file for which the checksum is to be calculated. + ]]></description> + </attribute> + <attribute name="fileext" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[File extension that is be to used to + create or identify destination file.]]></short-description> + <description><![CDATA[ + Sets the file extension that is be to used to + create or identify destination file. + ]]></description> + </attribute> + <attribute name="forceoverwrite" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Whether or not to overwrite existing file irrespective of + whether it is newer than + the source file.]]></short-description> + <description><![CDATA[ + Whether or not to overwrite existing file irrespective of + whether it is newer than + the source file. Defaults to false. + ]]></description> + </attribute> + <attribute name="property" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Property to hold the generated checksum.]]></short-description> + <description><![CDATA[ + Sets the property to hold the generated checksum. + ]]></description> + </attribute> + <attribute name="provider" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[MessageDigest algorithm provider to be used + to calculate the checksum.]]></short-description> + <description><![CDATA[ + Sets the MessageDigest algorithm provider to be used + to calculate the checksum. + ]]></description> + </attribute> + <attribute name="readbuffersize" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[The size of the read buffer to use.]]></short-description> + <description><![CDATA[ + The size of the read buffer to use. + ]]></description> + </attribute> + <attribute name="verifyproperty" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Verify property.]]></short-description> + <description><![CDATA[ + Sets the verify property. This project property holds + the result of a checksum verification - "true" or "false" + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="fileset" type="org.apache.tools.ant.types.FileSet" + briefType="Fileset" + required="NOTDEFINED"> + <short-description><![CDATA[Files to generate checksums for.]]></short-description> + <description> + <![CDATA[Files to generate checksums for.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="chmod" category="filesystem" + classname="org.apache.tools.ant.taskdefs.Chmod" + > + + <short-description><![CDATA[Chmod equivalent for unix-like environments.]]></short-description> + <description> + <![CDATA[Chmod equivalent for unix-like environments.]]> + </description> + + <structure> + + <attributes> + <attribute name="append" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Whether output should be appended to or overwrite an existing file.]]></short-description> + <description><![CDATA[ + Whether output should be appended to or overwrite an existing file. + Defaults to false. + ]]></description> + </attribute> + <attribute name="defaultexcludes" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Sets whether default exclusions should be used or not.]]></short-description> + <description><![CDATA[ + Sets whether default exclusions should be used or not. + ]]></description> + </attribute> + <attribute name="dest" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The directory where target files are to be placed.]]></short-description> + <description><![CDATA[ + The directory where target files are to be placed. + ]]></description> + </attribute> + <attribute name="dir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The directory which holds the files whose permissions must be changed.]]></short-description> + <description><![CDATA[ + The directory which holds the files whose permissions must be changed. + ]]></description> + </attribute> + <attribute name="excludes" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Set of exclude patterns.]]></short-description> + <description><![CDATA[ + Sets the set of exclude patterns. Patterns may be separated by a comma + or a space. + ]]></description> + </attribute> + <attribute name="executable" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The command to execute.]]></short-description> + <description><![CDATA[ + The command to execute. + ]]></description> + </attribute> + <attribute name="failifexecutionfails" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Stop the build if program cannot be started.]]></short-description> + <description><![CDATA[ + Stop the build if program cannot be started. Defaults to true. + ]]></description> + </attribute> + <attribute name="failonerror" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Fail if the command exits with a non-zero return code.]]></short-description> + <description><![CDATA[ + Fail if the command exits with a non-zero return code. + ]]></description> + </attribute> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The file or single directory of which the permissions must be changed.]]></short-description> + <description><![CDATA[ + The file or single directory of which the permissions must be changed. + ]]></description> + </attribute> + <attribute name="includes" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Set of include patterns.]]></short-description> + <description><![CDATA[ + Sets the set of include patterns. Patterns may be separated by a comma + or a space. + ]]></description> + </attribute> + <attribute name="newenvironment" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Do not propagate old environment when new environment variables are specified.]]></short-description> + <description><![CDATA[ + Do not propagate old environment when new environment variables are specified. + ]]></description> + </attribute> + <attribute name="os" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[List of operating systems on which the command may be executed.]]></short-description> + <description><![CDATA[ + List of operating systems on which the command may be executed. + ]]></description> + </attribute> + <attribute name="output" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[File the output of the process is redirected to.]]></short-description> + <description><![CDATA[ + File the output of the process is redirected to. + ]]></description> + </attribute> + <attribute name="outputproperty" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Property name whose value should be set to the output of + the process.]]></short-description> + <description><![CDATA[ + Property name whose value should be set to the output of + the process. + ]]></description> + </attribute> + <attribute name="parallel" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, run the command only once, appending all files as arguments.]]></short-description> + <description><![CDATA[ + If true, run the command only once, appending all files as arguments. + If false, command will be executed once for every file. Defaults to false. + ]]></description> + </attribute> + <attribute name="perm" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The new permissions.]]></short-description> + <description><![CDATA[ + The new permissions. + ]]></description> + </attribute> + <attribute name="relative" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Whether the filenames should be passed on the command line as + absolute or relative pathnames.]]></short-description> + <description><![CDATA[ + Whether the filenames should be passed on the command line as + absolute or relative pathnames. Paths are relative to the base + directory of the corresponding fileset for source files or the + dest attribute for target files. + ]]></description> + </attribute> + <attribute name="resultproperty" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The name of a property in which the return code of the + command should be stored.]]></short-description> + <description><![CDATA[ + The name of a property in which the return code of the + command should be stored. Only of interest if failonerror=false. + ]]></description> + </attribute> + <attribute name="skipemptyfilesets" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If no source files have been found or are newer than their + corresponding target files, do not run the command.]]></short-description> + <description><![CDATA[ + If no source files have been found or are newer than their + corresponding target files, do not run the command. + ]]></description> + </attribute> + <attribute name="type" type="org.apache.tools.ant.taskdefs.ExecuteOn.FileDirBoth" + briefType=""file", "dir", "both"" required="NOTDEFINED"> + <short-description><![CDATA[Whether the command works only on files, directories or both?.]]></short-description> + <description><![CDATA[ + Whether the command works only on files, directories or both? + ]]></description> + </attribute> + <attribute name="vmlauncher" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, launch new process with VM, otherwise use the OS's shell.]]></short-description> + <description><![CDATA[ + If true, launch new process with VM, otherwise use the OS's shell. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="env" type="org.apache.tools.ant.types.Environment.Variable" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an environment variable to the launched process.]]></short-description> + <description> + <![CDATA[Add an environment variable to the launched process.]]> + </description> + </element> + + <element name="fileset" type="org.apache.tools.ant.types.FileSet" + briefType="Fileset" + required="NOTDEFINED"> + <short-description><![CDATA[Source files to operate upon.]]></short-description> + <description> + <![CDATA[Source files to operate upon.]]> + </description> + </element> + + <element name="arg" type="org.apache.tools.ant.types.Commandline.Argument" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a command-line argument.]]></short-description> + <description> + <![CDATA[Adds a command-line argument.]]> + </description> + </element> + + <element name="exclude" type="org.apache.tools.ant.types.PatternSet.NameEntry" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add a name entry on the exclude list.]]></short-description> + <description> + <![CDATA[Add a name entry on the exclude list.]]> + </description> + </element> + + <element name="include" type="org.apache.tools.ant.types.PatternSet.NameEntry" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add a name entry on the include list.]]></short-description> + <description> + <![CDATA[Add a name entry on the include list.]]> + </description> + </element> + + <element name="mapper" type="org.apache.tools.ant.types.Mapper" + briefType="Mapper" + required="NOTDEFINED"> + <short-description><![CDATA[Mapper to use for mapping source files to target files.]]></short-description> + <description> + <![CDATA[Mapper to use for mapping source files to target files.]]> + </description> + </element> + + <element name="patternset" type="org.apache.tools.ant.types.PatternSet" + briefType="Patternset" + required="NOTDEFINED"> + <short-description><![CDATA[Add a set of patterns.]]></short-description> + <description> + <![CDATA[Add a set of patterns.]]> + </description> + </element> + + <element name="srcfile" type="org.apache.tools.ant.types.Commandline.Marker" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Marker that indicates where the name of the source file should + be put on the command line.]]></short-description> + <description> + <![CDATA[Marker that indicates where the name of the source file should + be put on the command line.]]> + </description> + </element> + + <element name="targetfile" type="org.apache.tools.ant.types.Commandline.Marker" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Marker that indicates where the name of the target file should + be put on the command line.]]></short-description> + <description> + <![CDATA[Marker that indicates where the name of the target file should + be put on the command line.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="concat" category="other" + classname="org.apache.tools.ant.taskdefs.Concat" + > + + <short-description><![CDATA[This class contains the 'concat' task, used to concatenate a series of files into a single stream.]]></short-description> + <description> + <![CDATA[This class contains the 'concat' task, used to concatenate a series + of files into a single stream. The destination of this stream may + be the system console, or a file. The following is a sample + invocation: + + <pre> + <concat destfile="${build.dir}/index.xml" + append="false"> + + <fileset dir="${xml.root.dir}" + includes="*.xml" /> + + </concat> + </pre>]]> + </description> + + <structure> + + <attributes> + <attribute name="append" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Behavior when the destination file exists.]]></short-description> + <description><![CDATA[ + Sets the behavior when the destination file exists. If set to + <code>true</code> the stream data will be appended to the + existing file, otherwise the existing file will be + overwritten. Defaults to <code>false</code>. + ]]></description> + </attribute> + <attribute name="destfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Destination file, or uses the console if not specified.]]></short-description> + <description><![CDATA[ + Sets the destination file, or uses the console if not specified. + ]]></description> + </attribute> + <attribute name="encoding" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Encoding for the input files, used when displaying the + data via the console.]]></short-description> + <description><![CDATA[ + Sets the encoding for the input files, used when displaying the + data via the console. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="filelist" type="org.apache.tools.ant.types.FileList" + briefType="Filelist" + required="NOTDEFINED"> + <short-description><![CDATA[List of files to concatenate.]]></short-description> + <description> + <![CDATA[List of files to concatenate.]]> + </description> + </element> + + <element name="fileset" type="org.apache.tools.ant.types.FileSet" + briefType="Fileset" + required="NOTDEFINED"> + <short-description><![CDATA[Set of files to concatenate.]]></short-description> + <description> + <![CDATA[Set of files to concatenate.]]> + </description> + </element> + + </elements> + + <body > + <description><![CDATA[ + This method adds text which appears in the 'concat' element. + ]]></description> + </body> + + </structure> + +</task> + + +<task name="condition" category="control" + classname="org.apache.tools.ant.taskdefs.ConditionTask" + > + + <short-description><![CDATA[Task to set a property conditionally using <uptodate>, <available>, and many other supported conditions.]]></short-description> + <description> + <![CDATA[Task to set a property conditionally using <uptodate>, <available>, + and many other supported conditions. + + <p>This task supports boolean logic as well as pluggable conditions + to decide, whether a property should be set.</p> + + <p>This task does not extend Task to take advantage of + ConditionBase.</p>]]> + </description> + + <structure> + + <attributes> + <attribute name="property" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The name of the property to set.]]></short-description> + <description><![CDATA[ + The name of the property to set. Required. + ]]></description> + </attribute> + <attribute name="value" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The value for the property to set, if condition evaluates to true.]]></short-description> + <description><![CDATA[ + The value for the property to set, if condition evaluates to true. + Defaults to "true". + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="and" type="org.apache.tools.ant.taskdefs.condition.And" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <and> condition "container".]]></short-description> + <description> + <![CDATA[Add an <and> condition "container".]]> + </description> + </element> + + <element name="available" type="org.apache.tools.ant.taskdefs.Available" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <available> condition.]]></short-description> + <description> + <![CDATA[Add an <available> condition.]]> + </description> + </element> + + <element name="checksum" type="org.apache.tools.ant.taskdefs.Checksum" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <checksum> condition.]]></short-description> + <description> + <![CDATA[Add an <checksum> condition.]]> + </description> + </element> + + <element name="contains" type="org.apache.tools.ant.taskdefs.condition.Contains" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add a <contains> condition.]]></short-description> + <description> + <![CDATA[Add a <contains> condition.]]> + </description> + </element> + + <element name="equals" type="org.apache.tools.ant.taskdefs.condition.Equals" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <equals> condition.]]></short-description> + <description> + <![CDATA[Add an <equals> condition.]]> + </description> + </element> + + <element name="filesmatch" type="org.apache.tools.ant.taskdefs.condition.FilesMatch" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add a <filesmatch> condition.]]></short-description> + <description> + <![CDATA[Add a <filesmatch> condition.]]> + </description> + </element> + + <element name="http" type="org.apache.tools.ant.taskdefs.condition.Http" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <http> condition.]]></short-description> + <description> + <![CDATA[Add an <http> condition.]]> + </description> + </element> + + <element name="isfalse" type="org.apache.tools.ant.taskdefs.condition.IsFalse" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add a <isfalse> condition.]]></short-description> + <description> + <![CDATA[Add a <isfalse> condition.]]> + </description> + </element> + + <element name="isset" type="org.apache.tools.ant.taskdefs.condition.IsSet" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <isset> condition.]]></short-description> + <description> + <![CDATA[Add an <isset> condition.]]> + </description> + </element> + + <element name="istrue" type="org.apache.tools.ant.taskdefs.condition.IsTrue" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add a <istrue> condition.]]></short-description> + <description> + <![CDATA[Add a <istrue> condition.]]> + </description> + </element> + + <element name="not" type="org.apache.tools.ant.taskdefs.condition.Not" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <not> condition "container".]]></short-description> + <description> + <![CDATA[Add an <not> condition "container".]]> + </description> + </element> + + <element name="or" type="org.apache.tools.ant.taskdefs.condition.Or" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <or> condition "container".]]></short-description> + <description> + <![CDATA[Add an <or> condition "container".]]> + </description> + </element> + + <element name="os" type="org.apache.tools.ant.taskdefs.condition.Os" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <os> condition.]]></short-description> + <description> + <![CDATA[Add an <os> condition.]]> + </description> + </element> + + <element name="socket" type="org.apache.tools.ant.taskdefs.condition.Socket" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add a <socket> condition.]]></short-description> + <description> + <![CDATA[Add a <socket> condition.]]> + </description> + </element> + + <element name="uptodate" type="org.apache.tools.ant.taskdefs.UpToDate" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add an <uptodate> condition.]]></short-description> + <description> + <![CDATA[Add an <uptodate> condition.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="copy" category="filesystem" + classname="org.apache.tools.ant.taskdefs.Copy" + > + + <short-description><![CDATA[Copies a file or directory to a new file or directory.]]></short-description> + <description> + <![CDATA[Copies a file or directory to a new file + or directory. Files are only copied if the source file is newer + than the destination file, or when the destination file does not + exist. It is possible to explicitly overwrite existing files.</p> + + <p>This implementation is based on Arnout Kuiper's initial design + document, the following mailing list discussions, and the + copyfile/copydir tasks.</p>]]> + </description> + + <structure> + + <attributes> + <attribute name="encoding" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Character encoding.]]></short-description> + <description><![CDATA[ + Sets the character encoding + ]]></description> + </attribute> + <attribute name="failonerror" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If false, note errors to the output but keep going.]]></short-description> + <description><![CDATA[ + If false, note errors to the output but keep going. + ]]></description> + </attribute> + <attribute name="file" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Single source file to copy.]]></short-description> + <description><![CDATA[ + Sets a single source file to copy. + ]]></description> + </attribute> + <attribute name="filtering" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, enables filtering.]]></short-description> + <description><![CDATA[ + If true, enables filtering. + ]]></description> + </attribute> + <attribute name="flatten" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[When copying directory trees, the files can be "flattened" + into a single directory.]]></short-description> + <description><![CDATA[ + When copying directory trees, the files can be "flattened" + into a single directory. If there are multiple files with + the same name in the source directory tree, only the first + file will be copied into the "flattened" directory, unless + the forceoverwrite attribute is true. + ]]></description> + </attribute> + <attribute name="includeemptydirs" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Used to copy empty directories.]]></short-description> + <description><![CDATA[ + Used to copy empty directories. + ]]></description> + </attribute> + <attribute name="overwrite" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Overwrite any existing destination file(s).]]></short-description> + <description><![CDATA[ + Overwrite any existing destination file(s). + ]]></description> + </attribute> + <attribute name="preservelastmodified" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Give the copied files the same last modified time as the original files.]]></short-description> + <description><![CDATA[ + Give the copied files the same last modified time as the original files. + ]]></description> + </attribute> + <attribute name="todir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Destination directory.]]></short-description> + <description><![CDATA[ + Sets the destination directory. + ]]></description> + </attribute> + <attribute name="tofile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Destination file.]]></short-description> + <description><![CDATA[ + Sets the destination file. + ]]></description> + </attribute> + <attribute name="verbose" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Used to force listing of all names of copied files.]]></short-description> + <description><![CDATA[ + Used to force listing of all names of copied files. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="fileset" type="org.apache.tools.ant.types.FileSet" + briefType="Fileset" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a set of files to copy.]]></short-description> + <description> + <![CDATA[Adds a set of files to copy.]]> + </description> + </element> + + <element name="filterchain" type="org.apache.tools.ant.types.FilterChain" + briefType="FilterChain" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a FilterChain.]]></short-description> + <description> + <![CDATA[Adds a FilterChain.]]> + </description> + </element> + + <element name="filterset" type="org.apache.tools.ant.types.FilterSet" + briefType="Filterset" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a filterset.]]></short-description> + <description> + <![CDATA[Adds a filterset.]]> + </description> + </element> + + <element name="mapper" type="org.apache.tools.ant.types.Mapper" + briefType="Mapper" + required="NOTDEFINED"> + <short-description><![CDATA[Defines the mapper to map source to destination files.]]></short-description> + <description> + <![CDATA[Defines the mapper to map source to destination files.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="copydir" category="other" + classname="org.apache.tools.ant.taskdefs.Copydir" + deprecated="true" + matchingTask="true"> + + <short-description><![CDATA[Copies a directory.]]></short-description> + <description> + <![CDATA[Copies a directory.]]> + </description> + + <structure> + + <attributes> + <attribute name="dest" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + <attribute name="filtering" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + <attribute name="flatten" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + <attribute name="forceoverwrite" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + <attribute name="src" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="copyfile" category="other" + classname="org.apache.tools.ant.taskdefs.Copyfile" + deprecated="true" + > + + <short-description><![CDATA[Copies a file.]]></short-description> + <description> + <![CDATA[Copies a file.]]> + </description> + + <structure> + + <attributes> + <attribute name="dest" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + <attribute name="filtering" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + <attribute name="forceoverwrite" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + <attribute name="src" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[No description.]]></short-description> + <description><![CDATA[ + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="csc" category="dotnet" + classname="org.apache.tools.ant.taskdefs.optional.dotnet.CSharp" + matchingTask="true"> + + <short-description><![CDATA[Compiles C# source into executables or modules.]]></short-description> + <description> + <![CDATA[Compiles C# source into executables or modules. + + The task will only work on win2K until other platforms support + csc.exe or an equivalent. CSC.exe must be on the execute path too. <p> + + All parameters are optional: <csc/> should suffice to produce a debug + build of all *.cs files. References to external files do require explicit + enumeration, so are one of the first attributes to consider adding. <p> + + The task is a directory based task, so attributes like <b>includes="*.cs" + </b> and <b>excludes="broken.cs"</b> can be used to control the files pulled + in. By default, all *.cs files from the project folder down are included in + the command. When this happens the output file -if not specified- is taken + as the first file in the list, which may be somewhat hard to control. + Specifying the output file with <b>'outfile'</b> seems prudent. <p> + + <p> + + TODO + <ol> + <li> is incremental build still broken in beta-1? + <li> is Win32Icon broken? + <li> all the missing options + </ol> + <p> + + History + <Table> + + <tr> + + <td> + 0.3 + </td> + + <td> + Beta 1 edition + </td> + + <td> + To avoid having to remember which assemblies to include, the task + automatically refers to the main dotnet libraries in Beta1. + </tr> + + <tr> + + <td> + 0.2 + </td> + + <td> + Slightly different + </td> + + <td> + Split command execution to a separate class; + </tr> + + <tr> + + <td> + 0.1 + </td> + + <td> + "I can't believe it's so rudimentary" + </td> + + <td> + First pass; minimal builds only support; + </tr> + + </table>]]> + </description> + + <structure> + + <attributes> + <attribute name="additionalmodules" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Semicolon separated list of modules to refer to.]]></short-description> + <description><![CDATA[ + Semicolon separated list of modules to refer to. + ]]></description> + </attribute> + <attribute name="debug" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Debug flag on or off.]]></short-description> + <description><![CDATA[ + set the debug flag on or off. + ]]></description> + </attribute> + <attribute name="definitions" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Semicolon separated list of defined constants.]]></short-description> + <description><![CDATA[ + Semicolon separated list of defined constants. + ]]></description> + </attribute> + <attribute name="destdir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Destination directory of files to be compiled.]]></short-description> + <description><![CDATA[ + Set the destination directory of files to be compiled. + ]]></description> + </attribute> + <attribute name="destfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Name of exe/library to create.]]></short-description> + <description><![CDATA[ + Set the name of exe/library to create. + ]]></description> + </attribute> + <attribute name="docfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[File for generated XML documentation.]]></short-description> + <description><![CDATA[ + file for generated XML documentation + ]]></description> + </attribute> + <attribute name="extraoptions" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Any extra options which are not explicitly supported + by this task.]]></short-description> + <description><![CDATA[ + Any extra options which are not explicitly supported + by this task. + ]]></description> + </attribute> + <attribute name="failonerror" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, fail on compilation errors.]]></short-description> + <description><![CDATA[ + If true, fail on compilation errors. + ]]></description> + </attribute> + <attribute name="filealign" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[File alignment.]]></short-description> + <description><![CDATA[ + Set the file alignment. + Valid values are 0,512, 1024, 2048, 4096, 8192, + and 16384, 0 means 'leave to the compiler' + ]]></description> + </attribute> + <attribute name="fullpaths" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, print the full path of files on errors.]]></short-description> + <description><![CDATA[ + If true, print the full path of files on errors. + ]]></description> + </attribute> + <attribute name="includedefaultreferences" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, automatically includes the common assemblies + in dotnet, and tells the compiler to link in mscore.dll. + + set the automatic reference inclusion flag on or off this flag controls + the string of references and the /nostdlib option in CSC.]]></short-description> + <description><![CDATA[ + If true, automatically includes the common assemblies + in dotnet, and tells the compiler to link in mscore.dll. + + set the automatic reference inclusion flag on or off this flag controls + the string of references and the /nostdlib option in CSC + ]]></description> + </attribute> + <attribute name="incremental" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Incremental compilation flag on or off.]]></short-description> + <description><![CDATA[ + set the incremental compilation flag on or off. + ]]></description> + </attribute> + <attribute name="mainclass" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Name of main class for executables.]]></short-description> + <description><![CDATA[ + Sets the name of main class for executables. + ]]></description> + </attribute> + <attribute name="noconfig" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[A flag that tells the compiler not to read in the compiler + settings files 'csc.rsp' in its bin directory and then the local directory.]]></short-description> + <description><![CDATA[ + A flag that tells the compiler not to read in the compiler + settings files 'csc.rsp' in its bin directory and then the local directory + ]]></description> + </attribute> + <attribute name="optimize" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, enables optimization flag.]]></short-description> + <description><![CDATA[ + If true, enables optimization flag. + ]]></description> + </attribute> + <attribute name="outputfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Output file.]]></short-description> + <description><![CDATA[ + Set the output file + ]]></description> + </attribute> + <attribute name="referencefiles" type="org.apache.tools.ant.types.Path" + briefType="Path" required="NOTDEFINED"> + <short-description><![CDATA[Path of references to include.]]></short-description> + <description><![CDATA[ + Path of references to include. + Wildcards should work. + ]]></description> + </attribute> + <attribute name="references" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Semicolon separated list of DLLs to refer to.]]></short-description> + <description><![CDATA[ + Semicolon separated list of DLLs to refer to. + ]]></description> + </attribute> + <attribute name="srcdir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Source directory of the files to be compiled.]]></short-description> + <description><![CDATA[ + Set the source directory of the files to be compiled. + ]]></description> + </attribute> + <attribute name="targettype" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Type of target.]]></short-description> + <description><![CDATA[ + Set the type of target. + ]]></description> + </attribute> + <attribute name="unsafe" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, enables the unsafe keyword.]]></short-description> + <description><![CDATA[ + If true, enables the unsafe keyword. + ]]></description> + </attribute> + <attribute name="utf8output" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, require all compiler output to be in UTF8 format.]]></short-description> + <description><![CDATA[ + If true, require all compiler output to be in UTF8 format. + ]]></description> + </attribute> + <attribute name="warnlevel" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[Level of warning currently between 1 and 4 + with 4 being the strictest.]]></short-description> + <description><![CDATA[ + Level of warning currently between 1 and 4 + with 4 being the strictest. + ]]></description> + </attribute> + <attribute name="win32icon" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Filename of icon to include.]]></short-description> + <description><![CDATA[ + Set the filename of icon to include. + ]]></description> + </attribute> + <attribute name="win32res" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Filename of a win32 resource (.RES) file to include.]]></short-description> + <description><![CDATA[ + Sets the filename of a win32 resource (.RES) file to include. + This is not a .NET resource, but what Windows is used to. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="cvs" category="scm" + classname="org.apache.tools.ant.taskdefs.Cvs" + > + + <short-description><![CDATA[Performs operations on a CVS repository. original 1.20 NOTE: This implementation has been moved to AbstractCvsTask with the addition of some accessors for extensibility.]]></short-description> + <description> + <![CDATA[Performs operations on a CVS repository. + + original 1.20 + + NOTE: This implementation has been moved to AbstractCvsTask with + the addition of some accessors for extensibility.]]> + </description> + + <structure> + + <attributes> + <attribute name="append" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Whether to append output/error when redirecting to a file.]]></short-description> + <description><![CDATA[ + Whether to append output/error when redirecting to a file. + ]]></description> + </attribute> + <attribute name="command" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The CVS command to execute.]]></short-description> + <description><![CDATA[ + The CVS command to execute. + ]]></description> + </attribute> + <attribute name="compression" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, this is the same as compressionlevel="3".]]></short-description> + <description><![CDATA[ + If true, this is the same as compressionlevel="3". + ]]></description> + </attribute> + <attribute name="compressionlevel" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[If set to a value 1-9 it adds -zN to the cvs command line, else + it disables compression.]]></short-description> + <description><![CDATA[ + If set to a value 1-9 it adds -zN to the cvs command line, else + it disables compression. + ]]></description> + </attribute> + <attribute name="cvsroot" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The CVSROOT variable.]]></short-description> + <description><![CDATA[ + The CVSROOT variable. + ]]></description> + </attribute> + <attribute name="cvsrsh" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The CVS_RSH variable.]]></short-description> + <description><![CDATA[ + The CVS_RSH variable. + ]]></description> + </attribute> + <attribute name="date" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Use the most recent revision no later than the given date.]]></short-description> + <description><![CDATA[ + Use the most recent revision no later than the given date. + ]]></description> + </attribute> + <attribute name="dest" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The directory where the checked out files should be placed.]]></short-description> + <description><![CDATA[ + The directory where the checked out files should be placed. + ]]></description> + </attribute> + <attribute name="error" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The file to direct standard error from the command.]]></short-description> + <description><![CDATA[ + The file to direct standard error from the command. + ]]></description> + </attribute> + <attribute name="failonerror" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Stop the build process if the command exits with + a return code other than 0.]]></short-description> + <description><![CDATA[ + Stop the build process if the command exits with + a return code other than 0. + Defaults to false. + ]]></description> + </attribute> + <attribute name="noexec" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, report only and don't change any files.]]></short-description> + <description><![CDATA[ + If true, report only and don't change any files. + ]]></description> + </attribute> + <attribute name="output" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[The file to direct standard output from the command.]]></short-description> + <description><![CDATA[ + The file to direct standard output from the command. + ]]></description> + </attribute> + <attribute name="package" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The package/module to operate upon.]]></short-description> + <description><![CDATA[ + The package/module to operate upon. + ]]></description> + </attribute> + <attribute name="passfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Password file to read passwords from.]]></short-description> + <description><![CDATA[ + Password file to read passwords from. + ]]></description> + </attribute> + <attribute name="port" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[Port used by CVS to communicate with the server.]]></short-description> + <description><![CDATA[ + Port used by CVS to communicate with the server. + ]]></description> + </attribute> + <attribute name="quiet" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, suppress informational messages.]]></short-description> + <description><![CDATA[ + If true, suppress informational messages. + ]]></description> + </attribute> + <attribute name="tag" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The tag of the package/module to operate upon.]]></short-description> + <description><![CDATA[ + The tag of the package/module to operate upon. + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="commandline" type="org.apache.tools.ant.types.Commandline" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Adds direct command-line to execute.]]></short-description> + <description> + <![CDATA[Adds direct command-line to execute.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="cvschangelog" category="other" + classname="org.apache.tools.ant.taskdefs.cvslib.ChangeLogTask" + > + + <short-description><![CDATA[Examines the output of cvs log and group related changes together.]]></short-description> + <description> + <![CDATA[Examines the output of cvs log and group related changes together. + + It produces an XML output representing the list of changes. + <PRE> + <FONT color=#0000ff><!-- Root element --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> changelog <FONT color=#ff00ff>(entry</FONT><FONT color=#ff00ff>+</FONT><FONT color=#ff00ff>)</FONT><FONT color=#6a5acd>></FONT> + <FONT color=#0000ff><!-- CVS Entry --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> entry <FONT color=#ff00ff>(date,author,file</FONT><FONT color=#ff00ff>+</FONT><FONT color=#ff00ff>,msg)</FONT><FONT color=#6a5acd>></FONT> + <FONT color=#0000ff><!-- Date of cvs entry --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> date <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>></FONT> + <FONT color=#0000ff><!-- Author of change --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> author <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>></FONT> + <FONT color=#0000ff><!-- List of files affected --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> msg <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>></FONT> + <FONT color=#0000ff><!-- File changed --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> file <FONT color=#ff00ff>(name,revision,prevrevision</FONT><FONT color=#ff00ff>?</FONT><FONT color=#ff00ff>)</FONT><FONT color=#6a5acd>></FONT> + <FONT color=#0000ff><!-- Name of the file --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> name <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>></FONT> + <FONT color=#0000ff><!-- Revision number --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> revision <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>></FONT> + <FONT color=#0000ff><!-- Previous revision number --></FONT> + <FONT color=#6a5acd><!ELEMENT</FONT> prevrevision <FONT color=#ff00ff>(#PCDATA)</FONT><FONT color=#6a5acd>></FONT> + </PRE>]]> + </description> + + <structure> + + <attributes> + <attribute name="daysinpast" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[Number of days worth of log entries to process.]]></short-description> + <description><![CDATA[ + Set the number of days worth of log entries to process. + ]]></description> + </attribute> + <attribute name="destfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Output file for the log.]]></short-description> + <description><![CDATA[ + Set the output file for the log. + ]]></description> + </attribute> + <attribute name="dir" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Base dir for cvs.]]></short-description> + <description><![CDATA[ + Set the base dir for cvs. + ]]></description> + </attribute> + <attribute name="end" type="java.util.Date" + briefType="Date" required="NOTDEFINED"> + <short-description><![CDATA[Date at which the changelog should stop.]]></short-description> + <description><![CDATA[ + Set the date at which the changelog should stop. + ]]></description> + </attribute> + <attribute name="start" type="java.util.Date" + briefType="Date" required="NOTDEFINED"> + <short-description><![CDATA[Date at which the changelog should start.]]></short-description> + <description><![CDATA[ + Set the date at which the changelog should start. + ]]></description> + </attribute> + <attribute name="usersfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Lookup list of user names & addresses.]]></short-description> + <description><![CDATA[ + Set a lookup list of user names & addresses + ]]></description> + </attribute> + </attributes> + + <elements> + <element name="fileset" type="org.apache.tools.ant.types.FileSet" + briefType="Fileset" + required="NOTDEFINED"> + <short-description><![CDATA[Adds a set of files about which cvs logs will be generated.]]></short-description> + <description> + <![CDATA[Adds a set of files about which cvs logs will be generated.]]> + </description> + </element> + + <element name="user" type="org.apache.tools.ant.taskdefs.cvslib.CvsUser" + briefType="" + required="NOTDEFINED"> + <short-description><![CDATA[Add a user to list changelog knows about.]]></short-description> + <description> + <![CDATA[Add a user to list changelog knows about.]]> + </description> + </element> + + </elements> + + </structure> + +</task> + + +<task name="cvspass" category="scm" + classname="org.apache.tools.ant.taskdefs.CVSPass" + > + + <short-description><![CDATA[Adds an new entry to a CVS password file.]]></short-description> + <description> + <![CDATA[Adds an new entry to a CVS password file.]]> + </description> + + <structure> + + <attributes> + <attribute name="cvsroot" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The CVS repository to add an entry for.]]></short-description> + <description><![CDATA[ + The CVS repository to add an entry for. + ]]></description> + </attribute> + <attribute name="passfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Password file to add the entry to.]]></short-description> + <description><![CDATA[ + Password file to add the entry to. + ]]></description> + </attribute> + <attribute name="password" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[Password to be added to the password file.]]></short-description> + <description><![CDATA[ + Password to be added to the password file. + ]]></description> + </attribute> + </attributes> + + <elements> + </elements> + + </structure> + +</task> + + +<task name="cvstagdiff" category="other" + classname="org.apache.tools.ant.taskdefs.cvslib.CvsTagDiff" + > + + <short-description><![CDATA[Examines the output of cvs rdiff between two tags.]]></short-description> + <description> + <![CDATA[Examines the output of cvs rdiff between two tags. + + It produces an XML output representing the list of changes. + <PRE> + <!-- Root element --> + <!ELEMENT tagdiff ( entry+ ) > + <!-- Start tag of the report --> + <!ATTLIST tagdiff startTag NMTOKEN #IMPLIED > + <!-- End tag of the report --> + <!ATTLIST tagdiff endTag NMTOKEN #IMPLIED > + <!-- Start date of the report --> + <!ATTLIST tagdiff startDate NMTOKEN #IMPLIED > + <!-- End date of the report --> + <!ATTLIST tagdiff endDate NMTOKEN #IMPLIED > + + <!-- CVS tag entry --> + <!ELEMENT entry ( file ) > + <!-- File added, changed or removed --> + <!ELEMENT file ( name, revision?, prevrevision? ) > + <!-- Name of the file --> + <!ELEMENT name ( #PCDATA ) > + <!-- Revision number --> + <!ELEMENT revision ( #PCDATA ) > + <!-- Previous revision number --> + <!ELEMENT prevrevision ( #PCDATA ) > + </PRE>]]> + </description> + + <structure> + + <attributes> + <attribute name="compression" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[If true, this is the same as compressionlevel="3".]]></short-description> + <description><![CDATA[ + If true, this is the same as compressionlevel="3". + ]]></description> + </attribute> + <attribute name="compressionlevel" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[If set to a value 1-9 it adds -zN to the cvs command line, else + it disables compression.]]></short-description> + <description><![CDATA[ + If set to a value 1-9 it adds -zN to the cvs command line, else + it disables compression. + ]]></description> + </attribute> + <attribute name="cvsroot" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The CVSROOT variable.]]></short-description> + <description><![CDATA[ + The CVSROOT variable. + ]]></description> + </attribute> + <attribute name="cvsrsh" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The CVS_RSH variable.]]></short-description> + <description><![CDATA[ + The CVS_RSH variable. + ]]></description> + </attribute> + <attribute name="destfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Output file for the diff.]]></short-description> + <description><![CDATA[ + Set the output file for the diff. + ]]></description> + </attribute> + <attribute name="enddate" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[End date.]]></short-description> + <description><![CDATA[ + Set the end date. + ]]></description> + </attribute> + <attribute name="endtag" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[End tag.]]></short-description> + <description><![CDATA[ + Set the end tag. + ]]></description> + </attribute> + <attribute name="failonerror" type="boolean" + briefType="boolean" required="NOTDEFINED"> + <short-description><![CDATA[Stop the build process if the command exits with + a return code other than 0.]]></short-description> + <description><![CDATA[ + Stop the build process if the command exits with + a return code other than 0. + Defaults to false. + ]]></description> + </attribute> + <attribute name="package" type="java.lang.String" + briefType="String" required="NOTDEFINED"> + <short-description><![CDATA[The package/module to analyze.]]></short-description> + <description><![CDATA[ + The package/module to analyze. + ]]></description> + </attribute> + <attribute name="passfile" type="java.io.File" + briefType="File" required="NOTDEFINED"> + <short-description><![CDATA[Password file to read passwords from.]]></short-description> + <description><![CDATA[ + Password file to read passwords from. + ]]></description> + </attribute> + <attribute name="port" type="int" + briefType="int" required="NOTDEFINED"> + <short-description><![CDATA[Port used by CVS to communicate with the server.]]></short-description> + <description><![CDATA[ + Port used by CVS to communicate with the server. |