Passed
Push — master ( 601cfd...7bcbf1 )
by Michiel
22:46
created

JsonValidateTask::getFile()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
/**
3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14
 *
15
 * This software consists of voluntary contributions made by many individuals
16
 * and is licensed under the LGPL. For more information please see
17
 * <http://phing.info>.
18
 */
19
20
/**
21
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32
 *
33
 * This software consists of voluntary contributions made by many individuals
34
 * and is licensed under the LGPL. For more information please see
35
 * <http://phing.info>.
36
 */
37
38
namespace Phing\Task\System;
39
40
use Phing\Project;
41
use Phing\Task;
42
43
/**
44
 * Checks if a given file is valid JSON
45
 * <jsonvalidate file="path/file.json" />
46
 *
47
 * @author  Suat Özgür
48
 * @package phing.tasks.ext
49
 */
50
class JsonValidateTask extends Task
51
{
52
    private $file = null;
53
54
    /**
55
     * executes the ValidJson task
56
     */
57
    public function main()
58
    {
59
        if (null === $this->getFile()) {
0 ignored issues
show
introduced by
The condition null === $this->getFile() is always false.
Loading history...
60
            $msg = "JsonValidate: file is not defined.";
61
            $this->log($msg, Project::MSG_ERR);
62
            throw new \Phing\Exception\BuildException($msg);
63
        }
64
65
        if (!file_exists($this->getFile()) || is_dir($this->getFile())) {
66
            $msg = "JsonValidate: file not found " . $this->getFile();
67
            $this->log($msg, Project::MSG_ERR);
68
            throw new \Phing\Exception\BuildException($msg);
69
        }
70
71
        $decoded = json_decode(file_get_contents($this->getFile()));
72
        if (null === $decoded) {
73
            $msg = "JsonValidate: decoding " . $this->getFile() . " failed.";
74
            $this->log($msg, Project::MSG_ERR);
75
            throw new \Phing\Exception\BuildException($msg);
76
        }
77
        $this->log($this->getFile() . " is valid JSON", Project::MSG_INFO);
78
    }
79
80
    /**
81
     * @return string
82
     */
83
    public function getFile()
84
    {
85
        return $this->file;
86
    }
87
88
    /**
89
     * @param string $file
90
     */
91
    public function setFile($file)
92
    {
93
        $this->file = $file;
94
    }
95
}
96