Test Failed
Pull Request — master (#18)
by SignpostMarv
03:33
created

Group::getSchema()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
ccs 1
cts 1
cp 1
crap 1
1
<?php
2
namespace GoetasWebservices\XML\XSDReader\Schema\Attribute;
3
4
use DOMElement;
5
use GoetasWebservices\XML\XSDReader\SchemaReader;
6
use GoetasWebservices\XML\XSDReader\SchemaReaderLoadAbstraction;
7
use GoetasWebservices\XML\XSDReader\Schema\Schema;
8
9
class Group implements AttributeItem, AttributeContainer
10
{
11
    use AttributeItemTrait;
12
    use AttributeContainerTrait;
13
14
    /**
15
     *
16
     * @var Schema
17
     */
18
    protected $schema;
19
20
    /**
21 45
    * @var string|null
22
    */
23 45
    protected $doc;
24 45
25 45
    /**
26
    * @param string $name
27 45
    */
28
    public function __construct(Schema $schema, $name)
29 45
    {
30
        $this->schema = $schema;
31
        $this->name = $name;
32
    }
33
34
    /**
35
    * @return string|null
36
    */
37
    public function getDoc()
38 45
    {
39
        return $this->doc;
40 45
    }
41 45
42
    /**
43 2
    * @param string $doc
44
    *
45 2
    * @return $this
46
    */
47
    public function setDoc($doc)
48
    {
49
        $this->doc = $doc;
50
        return $this;
51
    }
52
53 45
    /**
54
    * @return Schema
55 45
    */
56 45
    public function getSchema()
57
    {
58
        return $this->schema;
59
    }
60
61
    /**
62
    * @param string $attr
63
    */
64
    public static function findSomethingLikeThis(
65
        SchemaReaderLoadAbstraction $useThis,
66
        Schema $schema,
67
        DOMElement $node,
68
        DOMElement $childNode,
69
        AttributeContainer $addToThis
70
    ) {
71
        /**
72
        * @var AttributeItem $attribute
73
        */
74
        $attribute = $useThis->findSomething('findAttributeGroup', $schema, $node, $childNode->getAttribute("ref"));
75
        $addToThis->addAttribute($attribute);
76
    }
77
78
    /**
79
    * @return \Closure
80
    */
81
    public static function loadAttributeGroup(
82
        SchemaReaderLoadAbstraction $schemaReader,
83
        Schema $schema,
84
        DOMElement $node
85
    ) {
86
        $attGroup = new self($schema, $node->getAttribute("name"));
87
        $attGroup->setDoc(SchemaReader::getDocumentation($node));
88
        $schema->addAttributeGroup($attGroup);
89
90
        return function () use ($schemaReader, $schema, $node, $attGroup) {
91
            foreach ($node->childNodes as $childNode) {
92
                switch ($childNode->localName) {
93
                    case 'attribute':
94
                        $attribute = Attribute::getAttributeFromAttributeOrRef(
95
                            $schemaReader,
96
                            $childNode,
97
                            $schema,
98
                            $node
99
                        );
100
                        $attGroup->addAttribute($attribute);
101
                        break;
102
                    case 'attributeGroup':
103
                        self::findSomethingLikeThis(
104
                            $schemaReader,
105
                            $schema,
106
                            $node,
107
                            $childNode,
108
                            $attGroup
109
                        );
110
                        break;
111
                }
112
            }
113
        };
114
    }
115
}
116