1<?php
2/*
3 *  $Id: 260a7f3caa499a33f0d3982f9a5cc9db222475a6 $
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
22require_once 'phing/Task.php';
23
24/**
25 * Exits the active build, giving an additional message
26 * if available.
27 *
28 * @author    Hans Lellelid <hans@xmpl.org> (Phing)
29 * @author    Nico Seessle <nico@seessle.de> (Ant)
30 * @version   $Id$
31 * @package   phing.tasks.system
32 */
33class FailTask extends Task {
34
35    private $message;
36    private $ifCondition;
37    private $unlessCondition;
38
39    /**
40     * A message giving further information on why the build exited.
41     *
42     * @param string $value message to output
43     */
44    public function setMsg($value) {
45        $this->setMessage($value);
46    }
47
48    /**
49     * A message giving further information on why the build exited.
50     *
51     * @param value message to output
52     */
53    public function setMessage($value) {
54        $this->message = $value;
55    }
56
57    /**
58     * Only fail if a property of the given name exists in the current project.
59     * @param c property name
60     */
61    public function setIf($c) {
62        $this->ifCondition = $c;
63    }
64
65    /**
66     * Only fail if a property of the given name does not
67     * exist in the current project.
68     * @param c property name
69     */
70    public function setUnless($c) {
71        $this->unlessCondition = $c;
72    }
73
74    /**
75     * @throws BuildException
76     */
77    public function main()  {
78        if ($this->testIfCondition() && $this->testUnlessCondition()) {
79            if ($this->message !== null) {
80                throw new BuildException($this->message);
81            } else {
82                throw new BuildException("No message");
83            }
84        }
85    }
86
87    /**
88     * Set a multiline message.
89     */
90    public function addText($msg) {
91        if ($this->message === null) {
92            $this->message = "";
93        }
94        $this->message .= $this->project->replaceProperties($msg);
95    }
96
97    /**
98     * @return boolean
99     */
100    private function testIfCondition() {
101        if ($this->ifCondition === null || $this->ifCondition === "") {
102            return true;
103        }
104
105        return $this->project->getProperty($this->ifCondition) !== null;
106    }
107
108    /**
109     * @return boolean
110     */
111    private function testUnlessCondition() {
112        if ($this->unlessCondition === null || $this->unlessCondition ===  "") {
113            return true;
114        }
115        return $this->project->getProperty($this->unlessCondition) === null;
116    }
117
118}
119