diff options
Diffstat (limited to 'framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CallTarget.java')
-rw-r--r-- | framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CallTarget.java | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CallTarget.java b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CallTarget.java new file mode 100644 index 00000000..d8a0e8c8 --- /dev/null +++ b/framework/src/ant/apache-ant-1.9.6/src/main/org/apache/tools/ant/taskdefs/CallTarget.java @@ -0,0 +1,255 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package org.apache.tools.ant.taskdefs; + +import java.io.IOException; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.types.PropertySet; + +/** + * 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. + * + * + * @since Ant 1.2 + * + * @ant.task name="antcall" category="control" + */ +public class CallTarget extends Task { + + private Ant callee; + // must match the default value of Ant#inheritAll + private boolean inheritAll = true; + // must match the default value of Ant#inheritRefs + private boolean inheritRefs = false; + + private boolean targetSet = false; + + /** + * If true, pass all properties to the new Ant project. + * Defaults to true. + * @param inherit <code>boolean</code> flag. + */ + public void setInheritAll(boolean inherit) { + inheritAll = inherit; + } + + /** + * If true, pass all references to the new Ant project. + * Defaults to false. + * @param inheritRefs <code>boolean</code> flag. + */ + public void setInheritRefs(boolean inheritRefs) { + this.inheritRefs = inheritRefs; + } + + /** + * Initialize this task by creating new instance of the ant task and + * configuring it by calling its own init method. + */ + public void init() { + callee = new Ant(this); + callee.init(); + } + + /** + * Delegate the work to the ant task instance, after setting it up. + * @throws BuildException on validation failure or if the target didn't + * execute. + */ + public void execute() throws BuildException { + if (callee == null) { + init(); + } + if (!targetSet) { + throw new BuildException( + "Attribute target or at least one nested target is required.", + getLocation()); + } + callee.setAntfile(getProject().getProperty("ant.file")); + callee.setInheritAll(inheritAll); + callee.setInheritRefs(inheritRefs); + callee.execute(); + } + + /** + * Create a new Property to pass to the invoked target(s). + * @return a <code>Property</code> object. + */ + public Property createParam() { + if (callee == null) { + init(); + } + return callee.createProperty(); + } + + /** + * Reference element identifying a data type to carry + * over to the invoked target. + * @param r the specified <code>Ant.Reference</code>. + * @since Ant 1.5 + */ + public void addReference(Ant.Reference r) { + if (callee == null) { + init(); + } + callee.addReference(r); + } + + /** + * Set of properties to pass to the new project. + * @param ps the <code>PropertySet</code> to pass. + * @since Ant 1.6 + */ + public void addPropertyset(PropertySet ps) { + if (callee == null) { + init(); + } + callee.addPropertyset(ps); + } + + /** + * Set target to execute. + * @param target the name of the target to execute. + */ + public void setTarget(String target) { + if (callee == null) { + init(); + } + callee.setTarget(target); + targetSet = true; + } + + /** + * Add a target to the list of targets to invoke. + * @param t <code>Ant.TargetElement</code> representing the target. + * @since Ant 1.6.3 + */ + public void addConfiguredTarget(Ant.TargetElement t) { + if (callee == null) { + init(); + } + callee.addConfiguredTarget(t); + targetSet = true; + } + + /** + * Handles output. + * Send it the the new project if is present, otherwise + * call the super class. + * @param output The string output to output. + * @see Task#handleOutput(String) + * @since Ant 1.5 + */ + public void handleOutput(String output) { + if (callee != null) { + callee.handleOutput(output); + } else { + super.handleOutput(output); + } + } + + /** + * Handles input. + * Delegate to the created project, if present, otherwise + * call the super class. + * @param buffer the buffer into which data is to be read. + * @param offset the offset into the buffer at which data is stored. + * @param length the amount of data to read. + * + * @return the number of bytes read. + * + * @exception IOException if the data cannot be read. + * @see Task#handleInput(byte[], int, int) + * @since Ant 1.6 + */ + public int handleInput(byte[] buffer, int offset, int length) + throws IOException { + if (callee != null) { + return callee.handleInput(buffer, offset, length); + } + return super.handleInput(buffer, offset, length); + } + + /** + * Handles output. + * Send it the the new project if is present, otherwise + * call the super class. + * @param output The string to output. + * @see Task#handleFlush(String) + * @since Ant 1.5.2 + */ + public void handleFlush(String output) { + if (callee != null) { + callee.handleFlush(output); + } else { + super.handleFlush(output); + } + } + + /** + * Handle error output. + * Send it the the new project if is present, otherwise + * call the super class. + * @param output The string to output. + * + * @see Task#handleErrorOutput(String) + * @since Ant 1.5 + */ + public void handleErrorOutput(String output) { + if (callee != null) { + callee.handleErrorOutput(output); + } else { + super.handleErrorOutput(output); + } + } + + /** + * Handle error output. + * Send it the the new project if is present, otherwise + * call the super class. + * @param output The string to output. + * @see Task#handleErrorFlush(String) + * @since Ant 1.5.2 + */ + public void handleErrorFlush(String output) { + if (callee != null) { + callee.handleErrorFlush(output); + } else { + super.handleErrorFlush(output); + } + } +} |