Subversion-Projekte lars-tiefland.php_share

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?php
/*
 *  $Id: PhingCallTask.php 299 2007-11-08 20:31:19Z hans $
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the LGPL. For more information please see
 * <http://phing.info>.
 */

require_once 'phing/Task.php';

/**
 * Call another target in the same project.
 *
 * <samp>
 *    <target name="foo">
 *      <phingcall target="bar">
 *        <property name="property1" value="aaaaa" />
 *        <property name="foo" value="baz" />
 *       </phingcall>
 *    </target>
 *
 *    <target name="bar" depends="init">
 *      <echo message="prop is ${property1} ${foo}" />
 *    </target>
 * </samp>
 *
 * This only works as expected if neither property1 nor foo are defined in the project itself.
 *
 * @author    Andreas Aderhold <andi@binarycloud.com>
 * @copyright 2001,2002 THYRELL. All rights reserved
 * @version   $Revision: 1.9 $
 * @access    public
 * @package   phing.tasks.system
 */
class PhingCallTask extends Task {

        /**
         * The called Phing task.
         *
         * @var PhingTask
         */
        private $callee;

        /**
         * The target to call.
         *
         * @var string
         */
        private $subTarget;

        /**
         * Whether to inherit all properties from current project.
         *
         * @var boolean
         */
        private $inheritAll = true;

        /**
         * Whether to inherit refs from current project.
         *
         * @var boolean
         */
        private $inheritRefs = false;

        /**
         *  If true, pass all properties to the new Phing project.
         *  Defaults to true. Future use.
         *  @param boolean new value
         */
        function setInheritAll($inherit) {
                $this->inheritAll = (boolean) $inherit;
        }

        /**
         *  If true, pass all references to the new Phing project.
         *  Defaults to false. Future use.
         *
         *  @param boolean new value
         */
        function setInheritRefs($inheritRefs) {
                $this->inheritRefs = (boolean) $inheritRefs;
        }

        /**
         * Alias for createProperty
         * @see createProperty()
         */
        function createParam() {
                if ($this->callee === null) {
                        $this->init();
                }
                return $this->callee->createProperty();
        }

        /**
         * Property to pass to the invoked target.
         */
        function createProperty() {
                if ($this->callee === null) {
                        $this->init();
                }
                return $this->callee->createProperty();
        }

        /**
         * Target to execute, required.
         */
        function setTarget($target) {
                $this->subTarget = (string) $target;
        }

        /**
         *  init this task by creating new instance of the phing task and
         *  configuring it's by calling its own init method.
         */
        function init() {
                $this->callee = $this->project->createTask("phing");
                $this->callee->setOwningTarget($this->getOwningTarget());
                $this->callee->setTaskName($this->getTaskName());
                $this->callee->setHaltOnFailure(true);
                $this->callee->setLocation($this->getLocation());
                $this->callee->init();
        }

        /**
         *  hand off the work to the phing task of ours, after setting it up
         *  @throws BuildException on validation failure or if the target didn't
         *  execute
         */
        function main() {

                $this->log("Running PhingCallTask for target '" . $this->subTarget . "'", Project::MSG_DEBUG);
                if ($this->callee === null) {
                        $this->init();
                }

                if ($this->subTarget === null) {
                        throw new BuildException("Attribute target is required.", $this->getLocation());
                }

                $this->callee->setPhingfile($this->project->getProperty("phing.file"));
                $this->callee->setTarget($this->subTarget);
                $this->callee->setInheritAll($this->inheritAll);
                $this->callee->setInheritRefs($this->inheritRefs);
                $this->callee->main();
        }

}