Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
/*
3
 *  $Id: PhingCallTask.php 299 2007-11-08 20:31:19Z hans $
4
 *
5
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16
 *
17
 * This software consists of voluntary contributions made by many individuals
18
 * and is licensed under the LGPL. For more information please see
19
 * <http://phing.info>.
20
 */
21
 
22
require_once 'phing/Task.php';
23
 
24
/**
25
 * Call another target in the same project.
26
 *
27
 * <samp>
28
 *    <target name="foo">
29
 *      <phingcall target="bar">
30
 *        <property name="property1" value="aaaaa" />
31
 *        <property name="foo" value="baz" />
32
 *       </phingcall>
33
 *    </target>
34
 *
35
 *    <target name="bar" depends="init">
36
 *      <echo message="prop is ${property1} ${foo}" />
37
 *    </target>
38
 * </samp>
39
 *
40
 * This only works as expected if neither property1 nor foo are defined in the project itself.
41
 *
42
 * @author    Andreas Aderhold <andi@binarycloud.com>
43
 * @copyright 2001,2002 THYRELL. All rights reserved
44
 * @version   $Revision: 1.9 $
45
 * @access    public
46
 * @package   phing.tasks.system
47
 */
48
class PhingCallTask extends Task {
49
 
50
	/**
51
	 * The called Phing task.
52
	 *
53
	 * @var PhingTask
54
	 */
55
	private $callee;
56
 
57
	/**
58
	 * The target to call.
59
	 *
60
	 * @var string
61
	 */
62
	private $subTarget;
63
 
64
	/**
65
	 * Whether to inherit all properties from current project.
66
	 *
67
	 * @var boolean
68
	 */
69
	private $inheritAll = true;
70
 
71
	/**
72
	 * Whether to inherit refs from current project.
73
	 *
74
	 * @var boolean
75
	 */
76
	private $inheritRefs = false;
77
 
78
	/**
79
	 *  If true, pass all properties to the new Phing project.
80
	 *  Defaults to true. Future use.
81
	 *  @param boolean new value
82
	 */
83
	function setInheritAll($inherit) {
84
		$this->inheritAll = (boolean) $inherit;
85
	}
86
 
87
	/**
88
	 *  If true, pass all references to the new Phing project.
89
	 *  Defaults to false. Future use.
90
	 *
91
	 *  @param boolean new value
92
	 */
93
	function setInheritRefs($inheritRefs) {
94
		$this->inheritRefs = (boolean) $inheritRefs;
95
	}
96
 
97
	/**
98
	 * Alias for createProperty
99
	 * @see createProperty()
100
	 */
101
	function createParam() {
102
		if ($this->callee === null) {
103
			$this->init();
104
		}
105
		return $this->callee->createProperty();
106
	}
107
 
108
	/**
109
	 * Property to pass to the invoked target.
110
	 */
111
	function createProperty() {
112
		if ($this->callee === null) {
113
			$this->init();
114
		}
115
		return $this->callee->createProperty();
116
	}
117
 
118
	/**
119
	 * Target to execute, required.
120
	 */
121
	function setTarget($target) {
122
		$this->subTarget = (string) $target;
123
	}
124
 
125
	/**
126
	 *  init this task by creating new instance of the phing task and
127
	 *  configuring it's by calling its own init method.
128
	 */
129
	function init() {
130
		$this->callee = $this->project->createTask("phing");
131
		$this->callee->setOwningTarget($this->getOwningTarget());
132
		$this->callee->setTaskName($this->getTaskName());
133
		$this->callee->setHaltOnFailure(true);
134
		$this->callee->setLocation($this->getLocation());
135
		$this->callee->init();
136
	}
137
 
138
	/**
139
	 *  hand off the work to the phing task of ours, after setting it up
140
	 *  @throws BuildException on validation failure or if the target didn't
141
	 *  execute
142
	 */
143
	function main() {
144
 
145
		$this->log("Running PhingCallTask for target '" . $this->subTarget . "'", Project::MSG_DEBUG);
146
		if ($this->callee === null) {
147
			$this->init();
148
		}
149
 
150
		if ($this->subTarget === null) {
151
			throw new BuildException("Attribute target is required.", $this->getLocation());
152
		}
153
 
154
		$this->callee->setPhingfile($this->project->getProperty("phing.file"));
155
		$this->callee->setTarget($this->subTarget);
156
		$this->callee->setInheritAll($this->inheritAll);
157
		$this->callee->setInheritRefs($this->inheritRefs);
158
		$this->callee->main();
159
	}
160
 
161
}