Completed
Push — master ( 2b5604...0a5d2b )
by Burhan
17s queued 11s
created

FieldParserFactory::getFieldParser()   B

Complexity

Conditions 9
Paths 9

Size

Total Lines 45
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 19
CRAP Score 9.0101

Importance

Changes 0
Metric Value
cc 9
eloc 31
nc 9
nop 3
dl 0
loc 45
ccs 19
cts 20
cp 0.95
crap 9.0101
rs 8.0555
c 0
b 0
f 0
1
<?php
2
3
namespace Graze\CiffRenderer\Parser;
4
5
use Graze\CiffRenderer\Parser\FieldParserRegistry;
6
use Graze\CiffRenderer\Parser\FieldParser\FieldParserInterface;
7
use \SimpleXMLElement;
8
use Graze\CiffRenderer\Parser\FieldType;
9
use Graze\CiffRenderer\Parser\FieldParser\FieldParserFixedText;
10
use Graze\CiffRenderer\Parser\FieldParser\FieldParserBarcode;
11
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDate;
12
use Graze\CiffRenderer\Parser\FieldParser\FieldParserDateOffset;
13
use Graze\CiffRenderer\Parser\FieldParser\FieldParserStaticGraphic;
14
use Graze\CiffRenderer\Parser\FieldParser\FieldParserGraphicPrimitive;
15
use Graze\CiffRenderer\Exception\UnsupportedFieldTypeException;
16
17
class FieldParserFactory
18
{
19
    /**
20
     * @var FieldParserRegistry
21
     */
22
    private $fieldParserRegistry;
23
24
    /**
25
     * @param FieldParserRegistry $fieldParserRegistry
26
     */
27 8
    public function __construct(FieldParserRegistry $fieldParserRegistry)
28
    {
29 8
        $this->fieldParserRegistry = $fieldParserRegistry;
30 8
    }
31
32
    /**
33
     * @param SimpleXMLElement $xmlHeader
34
     * @param SimpleXMLElement $xmlField
35
     * @param float $scale
36
     * @return FieldParserInterface
37
     */
38 8
    public function getFieldParser(SimpleXMLElement $xmlHeader, SimpleXMLElement $xmlField, $scale)
39
    {
40 8
        $fieldType = (string) $xmlField->FldType; // @codingStandardsIgnoreLine
41
42 8
        switch ($fieldType) {
43
            case FieldType::FIELD_FIXED_TEXT:
44
            case FieldType::FIELD_COMPLEX_TEXT:
45
            case FieldType::FIELD_MERGE_FIELD:
46 3
                $className = FieldParserFixedText::class;
47 3
                break;
48
49
            case FieldType::FIELD_BARCODE:
50 1
                $className = FieldParserBarcode::class;
51 1
                break;
52
53
            case FieldType::FIELD_DATE:
54 1
                $className = FieldParserDate::class;
55 1
                break;
56
57
            case FieldType::FIELD_OFFSET_DATE:
58 1
                $className = FieldParserDateOffset::class;
59 1
                break;
60
61
            case FieldType::FIELD_STATIC_GRAPHIC:
62 1
                $className = FieldParserStaticGraphic::class;
63 1
                break;
64
65
            case FieldType::FIELD_GRAPHIC_PRIMITIVE:
66 1
                $className = FieldParserGraphicPrimitive::class;
67 1
                break;
68
69
            default:
70
                throw new UnsupportedFieldTypeException($fieldType);
71
        }
72
73 8
        $parser = $className::factory(
74 8
            $this->fieldParserRegistry,
75
            $xmlHeader,
76
            $xmlField,
77
            $scale
78
        );
79
80 8
        $this->fieldParserRegistry->addParser($parser);
81
82 8
        return $parser;
83
    }
84
85
    /**
86
     * @return FieldParserFactory
87
     */
88
    public static function factory()
89
    {
90
        return new static(
91
            new FieldParserRegistry()
92
        );
93
    }
94
}
95