Completed
Push — master ( 0a650b...9b576e )
by Jeroen
9s
created

ReaderBuilder::getOptionsResolver()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 7
ccs 4
cts 4
cp 1
rs 9.4285
cc 1
eloc 4
nc 1
nop 1
crap 1
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 4
            }
64 4
        }
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 4
            default:
74 4
                return new XmlReader($resources, $this->eventDispatcher);
75 4
        }
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