Completed
Push — master ( ad3f3f...b283b6 )
by Randy
02:33
created

Hydrator   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 98
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 75%

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 6
dl 0
loc 98
ccs 21
cts 28
cp 0.75
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A hydrateDocument() 0 9 2
A hydrateNode() 0 9 2
A hydrateElement() 0 9 2
A assemble() 0 4 1
A dehydrate() 0 7 1
A hydrate() 0 7 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
    /**
25
     * Hydrator constructor.
26
     *
27
     * @param ClassMapper $mapper
28
     */
29 6
    public function __construct(ClassMapper $mapper)
30
    {
31 6
        $this->mapper = $mapper;
32 6
    }
33
34
    /**
35
     * @param DOMDocument $document
36
     *
37
     * @return null|object
38
     */
39 6
    public function hydrateDocument(DOMDocument $document)
40
    {
41 6
        $element = Translator::new()->translateDocument($document);
42 6
        if ($element !== null) {
43 6
            return $this->hydrateElement($element);
44
        }
45
46
        return null;
47
    }
48
49
    /**
50
     * @param DOMNode $node
51
     *
52
     * @return null|object
53
     */
54
    public function hydrateNode(DOMNode $node)
55
    {
56
        $element = Translator::new()->translateNode($node);
57
        if ($element !== null) {
58
            return $this->hydrateElement($element);
59
        }
60
61
        return null;
62
    }
63
64
    /**
65
     * @param XmlElement $element
66
     *
67
     * @return null|object
68
     */
69 6
    private function hydrateElement(XmlElement $element)
70
    {
71 6
        $procedure = $this->hydrate($element);
72 6
        if ($procedure->isValid()) {
73 6
            return $procedure->getHydrate()->getObject();
74
        }
75
76
        return null;
77
    }
78
79
    /**
80
     * @param AssemblableInterface $assemblable
81
     *
82
     * @return DOMDocument
83
     */
84 1
    public function assemble(AssemblableInterface $assemblable): DOMDocument
85
    {
86 1
        return $this->dehydrate($assemblable->assemble());
87
    }
88
89
    /**
90
     * @param Element $element
91
     *
92
     * @return DOMDocument
93
     */
94 1
    public function dehydrate(Element $element): DOMDocument
95
    {
96 1
        $assembler = new Assembler();
97 1
        $element->accept($assembler);
98
99 1
        return $assembler->getDocument();
100
    }
101
102
    /**
103
     * @param Element $element
104
     *
105
     * @return HydrateProcedure
106
     */
107 6
    private function hydrate(Element $element): HydrateProcedure
108
    {
109 6
        $procedure = new HydrateProcedure($this->mapper);
110 6
        $element->accept($procedure);
111
112 6
        return $procedure;
113
    }
114
}