Completed
Pull Request — refactor-01-decoupling (#27)
by John
02:14
created

ParserDocument::setXml()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 2
1
<?php
2
3
namespace Graze\CiffRenderer\Parser;
4
5
use Graze\CiffRenderer\Parser\FieldSorter;
6
use Graze\CiffRenderer\Parser\FieldParserFactory;
7
8
class ParserDocument
9
{
10
    /**
11
     * @var FieldSorter
12
     */
13
    private $fieldSorter;
14
15
    /**
16
     * @var FieldParserFactory
17
     */
18
    private $fieldParserFactory;
19
20
    /**
21
     * @var \SimpleXMLElement
22
     */
23
    private $xml;
24
25
    /**
26
     * @param FieldSorter $fieldSorter
27
     * @param FieldParserFactory $fieldParserFactory
28
     */
29
    public function __construct(
30
        FieldSorter $fieldSorter,
31
        FieldParserFactory $fieldParserFactory
32
    ) {
33
        $this->fieldSorter = $fieldSorter;
34
        $this->fieldParserFactory = $fieldParserFactory;
35
    }
36
37
    /**
38
     * @param \SimpleXMLElement $xml
39
     */
40
    public function setXml(\SimpleXMLElement $xml)
41
    {
42
        $this->xml = $xml;
43
    }
44
45
    /**
46
     * @return ParserInterface[]
47
     */
48
    public function getFieldParsers()
49
    {
50
        $subImage = (array) $this->xml->SubImage;
51
        $fields = $this->fieldSorter->sort($subImage['Field']);
52
        $parsers = [];
53
        foreach ($fields as $field) {
54
            $parser = $this->fieldParserFactory->getFieldParser($field, $this->xml->Header, $this->getScale());
55
            $parsers[] = $parser;
56
        }
57
58
        return $parsers;
59
    }
60
61
    /**
62
     * @return float
63
     */
64
    public function getWidth()
65
    {
66
        return (float) $this->xml->SubImage->SubHeader->ImageWidth * $this->getScale();
67
    }
68
69
    /**
70
     * @return float
71
     */
72
    public function getHeight()
73
    {
74
        return (float) $this->xml->SubImage->SubHeader->ImageHeight * $this->getScale();
75
    }
76
77
    /**
78
     * @return float
79
     */
80
    public function getScale()
81
    {
82
        return (float) $this->xml->SubImage->SubHeader->XRes;
83
    }
84
85
    /**
86
     * @return ParserDocument
87
     */
88
    public static function factory()
89
    {
90
        return new static(
91
            new FieldSorter(),
92
            FieldParserFactory::factory()
93
        );
94
    }
95
}
96