Completed
Push — master ( b0f07b...0ca432 )
by Randy
03:00
created

Hydrator::getWarnings()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
3
namespace Dgame\Soap\Hydrator\Dom;
4
5
use Dgame\Soap\Dom\Translator;
6
use Dgame\Soap\Element;
7
use Dgame\Soap\Hydrator\ClassMapper;
8
use Dgame\Soap\Hydrator\HydrateProcedure;
9
use Dgame\Soap\XmlElement;
10
use DOMDocument;
11
use DOMNode;
12
13
/**
14
 * Class Hydrator
15
 * @package Dgame\Soap\Hydrator\Dom
16
 */
17
final class Hydrator
18
{
19
    /**
20
     * @var ClassMapper
21
     */
22
    private $mapper;
23
    /**
24
     * @var array
25
     */
26
    private $warnings = [];
27
28
    /**
29 9
     * Hydrator constructor.
30
     *
31 9
     * @param ClassMapper $mapper
32 9
     */
33
    public function __construct(ClassMapper $mapper)
34
    {
35
        $this->mapper = $mapper;
36
    }
37
38
    /**
39 9
     * @return array
40
     */
41 9
    public function getWarnings(): array
42 9
    {
43 9
        return $this->warnings;
44
    }
45
46
    /**
47
     * @return bool
48
     */
49
    public function hasWarnings(): bool
50
    {
51
        return !empty($this->warnings);
52
    }
53
54
    /**
55
     * @param DOMDocument $document
56
     *
57
     * @return null|object
58
     */
59
    public function hydrateDocument(DOMDocument $document)
60
    {
61
        $element = Translator::new()->translateDocument($document);
62
        if ($element !== null) {
63
            return $this->hydrateElement($element);
64
        }
65
66
        $this->warnings[] = 'Could not hydrate document';
67
68
        return null;
69 9
    }
70
71 9
    /**
72 9
     * @param DOMNode $node
73 9
     *
74
     * @return null|object
75
     */
76
    public function hydrateNode(DOMNode $node)
77
    {
78
        $element = Translator::new()->translateNode($node);
79
        if ($element !== null) {
80
            return $this->hydrateElement($element);
81
        }
82
83
        $this->warnings[] = 'Could not translate: ' . $node->nodeName;
84 1
85
        return null;
86 1
    }
87
88
    /**
89
     * @param XmlElement $element
90
     *
91
     * @return null|object
92
     */
93
    private function hydrateElement(XmlElement $element)
94 1
    {
95
        $procedure = $this->hydrate($element);
96 1
        if ($procedure->isValid()) {
97 1
            return $procedure->getHydrate()->getObject();
98
        }
99 1
100
        $this->warnings[] = 'Could not hydrate: ' . $element->getName();
101
102
        return null;
103
    }
104
105
    /**
106
     * @param AssemblableInterface $assemblable
107 9
     *
108
     * @return DOMDocument
109 9
     */
110 9
    public function assemble(AssemblableInterface $assemblable): DOMDocument
111
    {
112 9
        return $this->dehydrate($assemblable->assemble());
113
    }
114
115
    /**
116
     * @param Element $element
117
     *
118
     * @return DOMDocument
119
     */
120
    public function dehydrate(Element $element): DOMDocument
121
    {
122
        $assembler = new Assembler();
123
        $element->accept($assembler);
124
125
        return $assembler->getDocument();
126
    }
127
128
    /**
129
     * @param Element $element
130
     *
131
     * @return HydrateProcedure
132
     */
133
    private function hydrate(Element $element): HydrateProcedure
134
    {
135
        $procedure = new HydrateProcedure($this->mapper);
136
        $element->accept($procedure);
137
138
        if ($procedure->hasWarnings()) {
139
            $this->warnings[] = $procedure->getWarnings();
140
        }
141
142
        return $procedure;
143
    }
144
}