Completed
Pull Request — master (#296)
by
unknown
03:13
created

StreamMergeWriter   A

Complexity

Total Complexity 14

Size/Duplication

Total Lines 131
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 97.22%

Importance

Changes 4
Bugs 0 Features 1
Metric Value
wmc 14
c 4
b 0
f 1
lcom 1
cbo 1
dl 0
loc 131
rs 10
ccs 35
cts 36
cp 0.9722

9 Methods

Rating   Name   Duplication   Size   Complexity  
A getDiscriminantField() 0 4 1
A getStreamWriter() 0 4 1
A getStreamWriters() 0 4 1
A hasStreamWriter() 0 4 1
A setDiscriminantField() 0 6 1
A writeItem() 0 11 4
A setStreamWriters() 0 8 2
A setStreamWriter() 0 8 1
A setStream() 0 9 2
1
<?php
2
3
namespace Ddeboer\DataImport\Writer;
4
5
/**
6
 * Class allowing multiple writers to write in same stream
7
 *
8
 * @author Benoît Burnichon <[email protected]>
9
 */
10
class StreamMergeWriter extends AbstractStreamWriter
11
{
12
    /**
13
     * @var string
14
     */
15
    private $discriminantField = 'discr';
16
17
    /**
18
     * @var AbstractStreamWriter[]
19
     */
20
    private $writers = [];
21
22
    /**
23
     * Set discriminant field
24
     *
25
     * @param string $discriminantField
26
     *
27
     * @return $this
28
     */
29 2
    public function setDiscriminantField($discriminantField)
30
    {
31 2
        $this->discriminantField = (string) $discriminantField;
32
33 2
        return $this;
34
    }
35
36
    /**
37
     * Get discriminant Field
38
     *
39
     * @return string
40
     */
41 2
    public function getDiscriminantField()
42
    {
43 2
        return $this->discriminantField;
44
    }
45
46
    /**
47
     * {@inheritdoc}
48
     */
49 1
    public function writeItem(array $item)
50
    {
51 1
        if ((isset($item[$this->discriminantField])
52
                || array_key_exists($this->discriminantField, $item))
53 1
            && $this->hasStreamWriter($key = $item[$this->discriminantField])
54 1
        ) {
55 1
            $writer = $this->getStreamWriter($key);
56
57 1
            $writer->writeItem($item);
58 1
        }
59 1
    }
60
61
    /**
62
     * Set stream writers
63
     *
64
     * @param AbstractStreamWriter[] $writers
65
     *
66
     * @return $this
67
     */
68 3
    public function setStreamWriters(array $writers)
69
    {
70 3
        foreach ($writers as $key => $writer) {
71 3
            $this->setStreamWriter($key, $writer);
72 3
        }
73
74 3
        return $this;
75
    }
76
77
    /**
78
     * @param string               $key
79
     * @param AbstractStreamWriter $writer
80
     *
81
     * @return $this
82
     */
83 6
    public function setStreamWriter($key, AbstractStreamWriter $writer)
84
    {
85 6
        $writer->setStream($this->getStream());
86 6
        $writer->setCloseStreamOnFinish(false);
87 6
        $this->writers[$key] = $writer;
88
89 6
        return $this;
90
    }
91
92
    /**
93
     * Get a previously registered Writer
94
     *
95
     * @param string $key
96
     *
97
     * @return AbstractStreamWriter
98
     */
99 2
    public function getStreamWriter($key)
100
    {
101 2
        return $this->writers[$key];
102
    }
103
104
    /**
105
     * Get list of registered Writers
106
     *
107
     * @return AbstractStreamWriter[]
108
     */
109 9
    public function getStreamWriters()
110
    {
111 9
        return $this->writers;
112
    }
113
114
    /**
115
     * Is a writer registered for key?
116
     *
117
     * @param string $key
118
     *
119
     * @return boolean
120
     */
121 2
    public function hasStreamWriter($key)
122
    {
123 2
        return isset($this->writers[$key]);
124
    }
125
126
    /**
127
     * Set a stream
128
     *
129
     * @param resource $stream
130
     */
131 10
    public function setStream($stream)
132
    {
133 10
        parent::setStream($stream);
134 9
        foreach ($this->getStreamWriters() as $writer) {
135 1
            $writer->setStream($stream);
136 9
        }
137
138 9
        return $this;
139
    }
140
}
141