Passed
Push — static-analysis ( c3aabf...c8fdad )
by SignpostMarv
03:22
created

SchemaReaderSchemaAbstraction   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Test Coverage

Coverage 93.1%

Importance

Changes 0
Metric Value
dl 0
loc 56
ccs 27
cts 29
cp 0.931
rs 10
c 0
b 0
f 0
wmc 6

2 Methods

Rating   Name   Duplication   Size   Complexity  
B schemaNode() 0 31 3
A setSchemaThingsFromNode() 0 15 3
1
<?php
2
namespace GoetasWebservices\XML\XSDReader;
3
4
use Closure;
5
use DOMDocument;
6
use DOMElement;
7
use DOMNode;
8
use DOMNodeList;
9
use GoetasWebservices\XML\XSDReader\Exception\IOException;
10
use GoetasWebservices\XML\XSDReader\Exception\TypeException;
11
use GoetasWebservices\XML\XSDReader\Schema\Attribute\Attribute;
12
use GoetasWebservices\XML\XSDReader\Schema\Attribute\AttributeDef;
13
use GoetasWebservices\XML\XSDReader\Schema\Attribute\AttributeItem;
14
use GoetasWebservices\XML\XSDReader\Schema\Attribute\Group as AttributeGroup;
15
use GoetasWebservices\XML\XSDReader\Schema\Element\Element;
16
use GoetasWebservices\XML\XSDReader\Schema\Element\ElementContainer;
17
use GoetasWebservices\XML\XSDReader\Schema\Element\ElementDef;
18
use GoetasWebservices\XML\XSDReader\Schema\Element\ElementItem;
19
use GoetasWebservices\XML\XSDReader\Schema\Element\ElementRef;
20
use GoetasWebservices\XML\XSDReader\Schema\Element\Group;
21
use GoetasWebservices\XML\XSDReader\Schema\Element\GroupRef;
22
use GoetasWebservices\XML\XSDReader\Schema\Element\InterfaceSetMinMax;
23
use GoetasWebservices\XML\XSDReader\Schema\Exception\TypeNotFoundException;
24
use GoetasWebservices\XML\XSDReader\Schema\Inheritance\Base;
25
use GoetasWebservices\XML\XSDReader\Schema\Inheritance\Extension;
26
use GoetasWebservices\XML\XSDReader\Schema\Inheritance\Restriction;
27
use GoetasWebservices\XML\XSDReader\Schema\Item;
28
use GoetasWebservices\XML\XSDReader\Schema\Schema;
29
use GoetasWebservices\XML\XSDReader\Schema\SchemaItem;
30
use GoetasWebservices\XML\XSDReader\Schema\Type\BaseComplexType;
31
use GoetasWebservices\XML\XSDReader\Schema\Type\ComplexType;
32
use GoetasWebservices\XML\XSDReader\Schema\Type\ComplexTypeSimpleContent;
33
use GoetasWebservices\XML\XSDReader\Schema\Type\SimpleType;
34
use GoetasWebservices\XML\XSDReader\Schema\Type\Type;
35
use GoetasWebservices\XML\XSDReader\Utils\UrlUtils;
36
use RuntimeException;
37
38
abstract class SchemaReaderSchemaAbstraction extends SchemaReaderFillAbstraction
39 135
{    protected function setSchemaThingsFromNode(
0 ignored issues
show
Coding Style introduced by
The opening class brace should be on a newline by itself.
Loading history...
40
        Schema $schema,
41
        DOMElement $node,
42
        Schema $parent = null
43
    ) {
44 135
        $schema->setDoc(static::getDocumentation($node));
45
46 135
        if ($node->hasAttribute("targetNamespace")) {
47 135
            $schema->setTargetNamespace($node->getAttribute("targetNamespace"));
48 45
        } elseif ($parent) {
49
            $schema->setTargetNamespace($parent->getTargetNamespace());
50
        }
51 135
        $schema->setElementsQualification($node->getAttribute("elementFormDefault") == "qualified");
52 135
        $schema->setAttributesQualification($node->getAttribute("attributeFormDefault") == "qualified");
53 135
        $schema->setDoc(static::getDocumentation($node));
54 135
    }
55
56
    /**
57
     *
58
     * @param Schema $schema
59
     * @param DOMElement $node
60
     * @param Schema $parent
61
     * @return Closure[]
62
     */
63 135
    protected function schemaNode(Schema $schema, DOMElement $node, Schema $parent = null)
64
    {
65 135
        $this->setSchemaThingsFromNode($schema, $node, $parent);
66 135
        $functions = array();
67
68 90
        static $methods = [
69
            'include' => 'loadImport',
70
            'import' => 'loadImport',
71
            'element' => 'loadElementDef',
72
            'attribute' => 'loadAttributeDef',
73
            'attributeGroup' => 'loadAttributeGroup',
74
            'group' => 'loadGroup',
75
            'complexType' => 'loadComplexType',
76
            'simpleType' => 'loadSimpleType',
77 45
        ];
78
79 135
        foreach ($node->childNodes as $childNode) {
80 135
            $callback = $this->maybeCallMethod(
81 135
                $methods,
82 135
                (string) $childNode->localName,
83 135
                $childNode,
84 135
                $schema,
85 90
                $childNode
86 45
            );
87
88 135
            if ($callback instanceof Closure) {
89 135
                $functions[] = $callback;
90 45
            }
91 45
        }
92
93 135
        return $functions;
94
    }
95
}
96