Completed
Pull Request — master (#18)
by John
05:06 queued 03:09
created

ParserDocument::getScale()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace Graze\CiffRenderer\Parser;
4
5
use Graze\CiffRenderer\Parser\FieldSorter;
6
use Graze\CiffRenderer\Parser\FieldParser\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 FieldParserRegistry
22
     */
23
    private $fieldParserRegistry;
24
25
    /**
26
     * @var \SimpleXMLElement
27
     */
28
    private $xml;
29
30
    /**
0 ignored issues
show
Coding Style Documentation introduced by
Doc comment for parameter "$fieldParserRegistry" missing
Loading history...
31
     * @param FieldSorter $fieldSorter
32
     * @param FieldParserFactory $fieldParserFactory
33
     */
34
    public function __construct(
35
        FieldSorter $fieldSorter,
36
        FieldParserFactory $fieldParserFactory,
37
        FieldParserRegistry $fieldParserRegistry
38
    ) {
39
        $this->fieldSorter = $fieldSorter;
40
        $this->fieldParserFactory = $fieldParserFactory;
41
        $this->fieldParserRegistry = $fieldParserRegistry;
42
    }
43
44
    /**
45
     * @param \SimpleXMLElement $xml
46
     */
47
    public function parse(\SimpleXMLElement $xml)
48
    {
49
        $this->xml = $xml;
50
    }
51
52
    /**
53
     * @return ParserInterface[]
54
     */
55
    public function getFieldParsers()
56
    {
57
        $subImage = (array) $this->xml->SubImage;
58
        $fields = $this->fieldSorter->sort($subImage['Field']);
59
        $parsers = [];
60
        foreach ($fields as $field) {
61
            $parser = $this->fieldParserFactory->getFieldParser($field);
62
            $parser->parse($this->fieldParserRegistry, $field, $this->xml->Header, $this->getScale());
63
            $parsers[] = $parser;
64
        }
65
66
        return $parsers;
67
    }
68
69
    /**
70
     * @return float
71
     */
72
    public function getWidth()
73
    {
74
        return (float) $this->xml->SubImage->SubHeader->ImageWidth * $this->getScale();
75
    }
76
77
    /**
78
     * @return float
79
     */
80
    public function getHeight()
81
    {
82
        return (float) $this->xml->SubImage->SubHeader->ImageHeight * $this->getScale();
83
    }
84
85
    /**
86
     * @return float
87
     */
88
    public function getScale()
89
    {
90
        return (float) $this->xml->SubImage->SubHeader->XRes;
91
    }
92
93
    /**
94
     * @return ParserDocument
95
     */
96
    public static function factory()
97
    {
98
        return new static(
99
            new FieldSorter(),
100
            new FieldParserFactory(),
101
            new FieldParserRegistry()
102
        );
103
    }
104
}
105