Completed
Push — refactor-04-parser-tests ( dc4950...bd4663 )
by John
06:06
created

ParserDocument::factory()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 0
cts 6
cp 0
rs 9.6666
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 0
crap 2
1
<?php
2
3
namespace Graze\CiffRenderer\Parser;
4
5
use Graze\CiffRenderer\Parser\SimpleXmlElement\SimpleXmlElementBuilder;
6
use Graze\CiffRenderer\Parser\FieldSorter;
7
use Graze\CiffRenderer\Parser\FieldParser\FieldParserFactory;
8
use Graze\CiffRenderer\Parser\FieldParserRegistry;
9
10
class ParserDocument
11
{
12
    /**
13
     * @var SimpleXmlElementBuilder
14
     */
15
    private $simpleXmlElementBuilder;
16
17
    /**
18
     * @var FieldSorter
19
     */
20
    private $fieldSorter;
21
22
    /**
23
     * @var FieldParserFactory
24
     */
25
    private $fieldParserFactory;
26
27
    /**
28
     * @var FieldParserRegistry
29
     */
30
    private $fieldParserRegistry;
31
32
    /**
33
     * @var Graze\CiffRenderer\Parser\SimpleXmlElement\SimpleXmlElementInterface
34
     */
35
    private $xml;
36
37
    /**
38
     * @param SimpleXmlElementBuilder $simpleXmlElementBuilder
39
     * @param FieldSorter $fieldSorter
40
     * @param FieldParserFactory $fieldParserFactory
41
     * @param FieldParserRegistry $fieldParserRegistry
42
     */
43 1
    public function __construct(
44
        SimpleXmlElementBuilder $simpleXmlElementBuilder,
0 ignored issues
show
Comprehensibility Naming introduced by
The variable name $simpleXmlElementBuilder exceeds the maximum configured length of 20.

Very long variable names usually make code harder to read. It is therefore recommended not to make variable names too verbose.

Loading history...
45
        FieldSorter $fieldSorter,
46
        FieldParserFactory $fieldParserFactory,
47
        FieldParserRegistry $fieldParserRegistry
48
    ) {
49 1
        $this->simpleXmlElementBuilder = $simpleXmlElementBuilder;
50 1
        $this->fieldSorter = $fieldSorter;
51 1
        $this->fieldParserFactory = $fieldParserFactory;
52 1
        $this->fieldParserRegistry = $fieldParserRegistry;
53 1
    }
54
55
    /**
56
     * @param string $string
57
     */
58 1
    public function parse($string)
59
    {
60 1
        $this->xml = $this->simpleXmlElementBuilder->build($string);
0 ignored issues
show
Documentation Bug introduced by
It seems like $this->simpleXmlElementBuilder->build($string) of type object<Graze\CiffRendere...ement\SimpleXmlElement> is incompatible with the declared type object<Graze\CiffRendere...pleXmlElementInterface> of property $xml.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
61 1
    }
62
63
    /**
64
     * @return ParserInterface[]
65
     */
66 1
    public function getFieldParsers()
67
    {
68 1
        $subImage = (array) $this->xml->SubImage;
69 1
        $fields = $subImage['Field'];
70 1
        $this->fieldSorter->sort($fields);
71 1
        $parsers = [];
72 1
        foreach ($fields as $field) {
73 1
            $parser = $this->fieldParserFactory->getFieldParser($field);
74 1
            $parser->parse($this->fieldParserRegistry, $field, $this->xml->Header, $this->getScale());
75 1
            $parsers[] = $parser;
76
        }
77
78 1
        return $parsers;
79
    }
80
81
    /**
82
     * @return float
83
     */
84
    public function getWidth()
85
    {
86
        return (float) $this->xml->SubImage->SubHeader->ImageWidth * $this->getScale();
87
    }
88
89
    /**
90
     * @return float
91
     */
92
    public function getHeight()
93
    {
94
        return (float) $this->xml->SubImage->SubHeader->ImageHeight * $this->getScale();
95
    }
96
97
    /**
98
     * @return float
99
     */
100 1
    public function getScale()
101
    {
102 1
        return (float) $this->xml->SubImage->SubHeader->XRes;
103
    }
104
105
    /**
106
     * @return ParserDocument
107
     */
108
    public static function factory()
109
    {
110
        return new static(
111
            new simpleXmlElementBuilder(),
112
            new FieldSorter(),
113
            new FieldParserFactory(),
114
            new FieldParserRegistry()
115
        );
116
    }
117
}
118