Completed
Push — master ( dbcf6b...d53ab6 )
by Peter
44:13 queued 37:37
created

ReaderBuilder   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 115
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 80%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 8
dl 0
loc 115
ccs 28
cts 35
cp 0.8
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A addResourceTransformer() 0 4 1
A addPartResourceTransformer() 0 4 1
A setReaderType() 0 4 1
A getOptionsResolver() 0 7 1
A createTransport() 0 8 1
A build() 0 26 5
1
<?php
2
3
namespace TreeHouse\IoBundle\Import\Reader;
4
5
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
6
use Symfony\Component\OptionsResolver\OptionsResolver;
7
use TreeHouse\Feeder\Reader\JsonLinesReader;
8
use TreeHouse\Feeder\Reader\XmlReader;
9
use TreeHouse\Feeder\Resource\FileResource;
10
use TreeHouse\Feeder\Resource\ResourceCollection;
11
use TreeHouse\Feeder\Resource\Transformer\ResourceTransformerInterface;
12
use TreeHouse\Feeder\Transport\TransportInterface;
13
use TreeHouse\IoBundle\Import\Feed\TransportFactory;
14
use TreeHouse\IoBundle\Import\Reader\Type\ReaderTypeInterface;
15
16
class ReaderBuilder implements ReaderBuilderInterface
17
{
18
    /**
19
     * @var EventDispatcherInterface
20
     */
21
    protected $eventDispatcher;
22
23
    /**
24
     * @var string
25
     */
26
    protected $destinationDir;
27
28
    /**
29
     * @var string
30
     */
31
    protected $readerType;
32
33
    /**
34
     * @var array<string, ResourceTransformer[]>
35
     */
36
    protected $transformers = [];
37
38
    /**
39
     * @param EventDispatcherInterface $dispatcher
40
     * @param string                   $destinationDir
41
     */
42 4
    public function __construct(EventDispatcherInterface $dispatcher, $destinationDir)
43
    {
44 4
        $this->eventDispatcher = $dispatcher;
45 4
        $this->destinationDir = $destinationDir;
46 4
    }
47
48
    /**
49
     * @inheritdoc
50
     */
51 4
    public function build(ReaderTypeInterface $type, array $transportConfig, $resourceType, array $options)
52
    {
53 4
        $resolver = $this->getOptionsResolver($type);
54
55 4
        $transport = $this->createTransport($transportConfig, $this->destinationDir, $this->eventDispatcher);
56 4
        $resources = new ResourceCollection([new FileResource($transport)]);
57
58 4
        $type->build($this, $resolver->resolve($options));
59
60 4
        if (isset($this->transformers[$resourceType])) {
61 4
            foreach ($this->transformers[$resourceType] as $transformer) {
62 4
                $resources->addTransformer($transformer);
63
            }
64
        }
65
66 4
        switch ($this->readerType) {
67 4
            case self::READER_TYPE_JSONLINES:
68
                return new JsonLinesReader($resources, $this->eventDispatcher);
69
                break;
0 ignored issues
show
Unused Code introduced by
break is not strictly necessary here and could be removed.

The break statement is not necessary if it is preceded for example by a return statement:

switch ($x) {
    case 1:
        return 'foo';
        break; // This break is not necessary and can be left off.
}

If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.

Loading history...
70
                
71 4
            case self::READER_TYPE_XML:
72
                // xml is the default, let it fall through
73
            default:
74 4
                return new XmlReader($resources, $this->eventDispatcher);
75
        }
76
    }
77
78
    /**
79
     * @inheritdoc
80
     */
81
    public function addResourceTransformer(ResourceTransformerInterface $transformer)
82
    {
83
        $this->transformers[self::RESOURCE_TYPE_MAIN][] = $transformer;
84
    }
85
86
    /**
87
     * @inheritdoc
88
     */
89 4
    public function addPartResourceTransformer(ResourceTransformerInterface $transformer)
90
    {
91 4
        $this->transformers[self::RESOURCE_TYPE_PART][] = $transformer;
92 4
    }
93
94
    /**
95
     * @inheritdoc
96
     */
97
    public function setReaderType($type)
98
    {
99
        $this->readerType = $type;
100
    }
101
102
    /**
103
     * @param ReaderTypeInterface $type
104
     *
105
     * @return OptionsResolver
106
     */
107 4
    protected function getOptionsResolver(ReaderTypeInterface $type)
108
    {
109 4
        $resolver = new OptionsResolver();
110 4
        $type->setOptions($resolver);
111
112 4
        return $resolver;
113
    }
114
115
    /**
116
     * @param array                    $transportConfig
117
     * @param string                   $destinationDir
118
     * @param EventDispatcherInterface $dispatcher
119
     *
120
     * @return TransportInterface
121
     */
122 4
    protected function createTransport(array $transportConfig, $destinationDir, EventDispatcherInterface $dispatcher)
123
    {
124 4
        $transport = TransportFactory::createTransportFromConfig($transportConfig);
125 4
        $transport->setDestinationDir($destinationDir);
126 4
        $transport->setEventDispatcher($dispatcher);
127
128 4
        return $transport;
129
    }
130
}
131