Passed
Push — static-analysis ( 5a0c71...7ccf34 )
by SignpostMarv
03:20
created

Element::loadElement()   B

Complexity

Conditions 4
Paths 8

Size

Total Lines 27
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 18
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
eloc 14
nc 8
nop 3
dl 0
loc 27
ccs 18
cts 18
cp 1
crap 4
rs 8.5806
c 0
b 0
f 0
1
<?php
2
namespace GoetasWebservices\XML\XSDReader\Schema\Element;
3
4
use DOMElement;
5
use DOMXPath;
6
use GoetasWebservices\XML\XSDReader\Schema\Item;
7
use GoetasWebservices\XML\XSDReader\Schema\Schema;
8
use GoetasWebservices\XML\XSDReader\SchemaReader;
9
10
class Element extends Item implements ElementItem, ElementSingle
11
{
12
    /**
13
    * @var int
14
    */
15
    protected $min = 1;
16
17
    /**
18
    * @var int
19
    */
20
    protected $max = 1;
21
22
    /**
23
    * @var bool
24
    */
25
    protected $qualified = false;
26
27
    /**
28
    * @var bool
29
    */
30
    protected $nil = false;
31
32
    /**
33
    * @return int
34
    */
35 6
    public function getMin()
36
    {
37 6
        return $this->min;
38
    }
39
40
    /**
41
    * @param int $min
42
    *
43
    * @return $this
44
    */
45 135
    public function setMin($min)
46
    {
47 135
        $this->min = $min;
48 135
        return $this;
49
    }
50
51
    /**
52
    * @return int
53
    */
54 12
    public function getMax()
55
    {
56 12
        return $this->max;
57
    }
58
59
    /**
60
    * @param int $max
61
    *
62
    * @return $this
63
    */
64 135
    public function setMax($max)
65
    {
66 135
        $this->max = $max;
67 135
        return $this;
68
    }
69
70
    /**
71
    * @return bool
72
    */
73 3
    public function isQualified()
74
    {
75 3
        return $this->qualified;
76
    }
77
78
    /**
79
    * @param bool $qualified
80
    *
81
    * @return $this
82
    */
83 9
    public function setQualified($qualified)
84
    {
85 9
        $this->qualified = is_bool($qualified) ? $qualified : (boolean) $qualified;
86 9
        return $this;
87
    }
88
89
    /**
90
    * @return bool
91
    */
92 3
    public function isNil()
93
    {
94 3
        return $this->nil;
95
    }
96
97
    /**
98
    * @param bool $nil
99
    *
100
    * @return $this
101
    */
102 9
    public function setNil($nil)
103
    {
104 9
        $this->nil = is_bool($nil) ? $nil : (boolean) $nil;
105 9
        return $this;
106
    }
107
108
    /**
109
    * @return Element
110
    */
111 135
    public static function loadElement(
112
        SchemaReader $reader,
113
        Schema $schema,
114
        DOMElement $node
115
    ) {
116 135
        $element = new Element($schema, $node->getAttribute("name"));
117 135
        $element->setDoc(SchemaReader::getDocumentation($node));
118
119 135
        $reader->fillItem($element, $node);
120
121 135
        SchemaReader::maybeSetMax($element, $node);
122 135
        SchemaReader::maybeSetMin($element, $node);
123
124 135
        $xp = new \DOMXPath($node->ownerDocument);
125 135
        $xp->registerNamespace('xs', 'http://www.w3.org/2001/XMLSchema');
126
127 135
        if ($xp->query('ancestor::xs:choice', $node)->length) {
128 135
            $element->setMin(0);
129 45
        }
130
131 135
        if ($node->hasAttribute("nillable")) {
132 9
            $element->setNil($node->getAttribute("nillable") == "true");
133 3
        }
134 135
        if ($node->hasAttribute("form")) {
135 9
            $element->setQualified($node->getAttribute("form") == "qualified");
136 3
        }
137 135
        return $element;
138
    }
139
}
140