Passed
Push — master ( 0a5d2b...01a422 )
by Burhan
02:24
created

FieldParserFactory   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Test Coverage

Coverage 89.47%

Importance

Changes 0
Metric Value
eloc 38
c 0
b 0
f 0
dl 0
loc 78
ccs 34
cts 38
cp 0.8947
rs 10
wmc 11

3 Methods

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