Passed
Push — development ( 6ec9e3...db1519 )
by Theodoros
03:16
created

EcondaBusinessFactory::createEcondaCsvFileReader()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * MIT License
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace SprykerEco\Zed\Econda\Business;
9
10
use Exception;
11
use Generated\Shared\Transfer\BatchResultTransfer;
12
use Generated\Shared\Transfer\FailedResultTransfer;
13
use Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderDependencyContainer;
14
use Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactory;
15
use Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactoryWorker;
16
use Spryker\Zed\Kernel\Business\AbstractBusinessFactory;
17
use SprykerEco\Zed\Econda\Business\Collector\File\EcondaCategoryCollector;
18
use SprykerEco\Zed\Econda\Business\Collector\File\EcondaProductCollector;
19
use SprykerEco\Zed\Econda\Business\Exporter\FileExporter;
20
use SprykerEco\Zed\Econda\Business\Exporter\Runner;
21
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\Adapter\CsvAdapter;
22
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\FileWriter;
23
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\NameGenerator\CsvNameGenerator;
24
use SprykerEco\Zed\Econda\Business\Helper\ProgressBarHelper;
25
use SprykerEco\Zed\Econda\Business\Manager\CollectorManager;
26
use SprykerEco\Zed\Econda\Business\Reader\EcondaCsvFileReader;
27
use SprykerEco\Zed\Econda\EcondaDependencyProvider;
28
use SprykerEco\Zed\Econda\Persistence\EcondaQueryContainer;
29
30
/**
31
 * @method \SprykerEco\Zed\Econda\EcondaConfig getConfig()
32
 * @method \SprykerEco\Zed\Econda\Persistence\EcondaQueryContainer getQueryContainer()
33
 */
34
class EcondaBusinessFactory extends AbstractBusinessFactory
35
{
36
    /**
37
     * @return \SprykerEco\Zed\Econda\Business\Reader\EcondaCsvFileReader
38
     */
39
    public function createEcondaCsvFileReader()
40
    {
41
        $nameGenerator = $this->createCsvNameGenerator();
42
43
        return new EcondaCsvFileReader($this->getConfig(), $nameGenerator);
44
    }
45
46
    /**
47
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Runner
48
     */
49
    public function createRunner()
50
    {
51
        return new Runner(
52
            $this->getLocaleFacade(),
53
            $this->createFileExporter()
54
        );
55
    }
56
57
    /**
58
     * @return \SprykerEco\Zed\Econda\Business\Manager\CollectorManager
59
     */
60
    public function createCollectorManager()
61
    {
62
        $criteriaBuilder = $this->createCriteriaBuilder();
63
        $queryContainer = $this->getEcondaQueryContainer();
64
        $progressBarHelper = $this->createProgressBarHelper();
65
        return new CollectorManager($criteriaBuilder, $queryContainer, $progressBarHelper);
66
    }
67
68
    /**
69
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\FileWriter
70
     */
71
    protected function createFileWriter()
72
    {
73
        $csvFileWriterAdapter = $this->createCsvFileWriterAdapter();
74
        $fileWriter = new FileWriter($csvFileWriterAdapter);
75
76
        return $fileWriter;
77
    }
78
79
    /**
80
     * @return \Generated\Shared\Transfer\BatchResultTransfer
81
     */
82
    protected function createBatchResultModel()
83
    {
84
        return new BatchResultTransfer();
85
    }
86
87
    /**
88
     * @return \SprykerEco\Zed\Econda\Business\Helper\ProgressBarHelper
89
     */
90
    protected function createProgressBarHelper()
91
    {
92
        return new ProgressBarHelper();
93
    }
94
95
    /**
96
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\NameGenerator\CsvNameGenerator
97
     */
98
    protected function createCsvNameGenerator()
99
    {
100
        return new CsvNameGenerator();
101
    }
102
103
    /**
104
     * @return \SprykerEco\Zed\Econda\Business\Collector\File\EcondaCategoryCollector
105
     */
106
    public function createFileCategoryCollector()
107
    {
108
        $storageCategoryNodeCollector = new EcondaCategoryCollector(
109
            $this->createCriteriaBuilder(),
110
            $this->createStoragePdoQueryAdapterByName('CategoryNodeEcondaQuery')
111
        );
112
113
        return $storageCategoryNodeCollector;
114
    }
115
116
    /**
117
     * @return \SprykerEco\Zed\Econda\Business\Collector\File\EcondaProductCollector
118
     */
119
    public function createFileProductCollector()
120
    {
121
        /**
122
         * @var \SprykerEco\Zed\Econda\Business\Collector\File\EcondaProductCollector $storageProductCollector
123
         */
124
        $storageProductCollector = new EcondaProductCollector(
125
            $this->createCriteriaBuilder(),
126
            $this->createStoragePdoQueryAdapterByName('ProductConcreteEcondaQuery'),
127
            $this->getProductCategoryQueryContainer(),
128
            $this->getProductImageQueryContainer(),
129
            $this->getPriceFacade(),
130
            $this->getConfig()
131
        );
132
133
        return $storageProductCollector;
134
    }
135
136
    /**
137
     * @return \SprykerEco\Zed\Econda\Business\Exporter\ExporterInterface
138
     */
139
    protected function createFileExporter()
140
    {
141
        $fileExporter = new FileExporter(
142
            $this->createFileWriter(),
143
            $this->createFailedResultModel(),
144
            $this->createBatchResultModel(),
145
            $this->createCsvNameGenerator(),
146
            $this->getConfig()->getFileExportPath(),
147
            $this->getCollectorFileExporterPlugins()
148
        );
149
150
        return $fileExporter;
151
    }
152
153
    /**
154
     * @return \SprykerEco\Zed\Econda\Dependency\Plugin\EcondaPluginInterface[]
155
     */
156
    protected function getCollectorFileExporterPlugins()
157
    {
158
        return $this->getProvidedDependency(EcondaDependencyProvider::FILE_PLUGINS);
159
    }
160
161
    /**
162
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToLocaleInterface
163
     */
164
    protected function getLocaleFacade()
165
    {
166
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_LOCALE);
167
    }
168
169
    /**
170
     * @return \SprykerEco\Zed\Econda\Persistence\EcondaQueryContainer
171
     */
172
    protected function getEcondaQueryContainer()
173
    {
174
        return new EcondaQueryContainer();
175
    }
176
177
    /**
178
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\Adapter\CsvAdapter
179
     */
180
    protected function createCsvFileWriterAdapter()
181
    {
182
        return new CsvAdapter($this->getConfig()->getFileExportPath());
183
    }
184
185
    /**
186
     * @return \Generated\Shared\Transfer\FailedResultTransfer
187
     */
188
    protected function createFailedResultModel()
189
    {
190
        return new FailedResultTransfer();
191
    }
192
193
    /**
194
     * @return string
195
     */
196
    protected function getCurrentDatabaseEngineName()
197
    {
198
        return $this->getPropelFacade()->getCurrentDatabaseEngineName();
199
    }
200
201
    /**
202
     * @return \Spryker\Zed\ProductImage\Persistence\ProductImageQueryContainerInterface
203
     */
204
    protected function getProductImageQueryContainer()
205
    {
206
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_IMAGE);
207
    }
208
209
    /**
210
     * @param string $name
211
     *
212
     * @throws \Exception
213
     *
214
     * @return \SprykerEco\Zed\Econda\Persistence\Econda\AbstractPdoEcondaQuery
215
     */
216
    protected function createStoragePdoQueryAdapterByName($name)
217
    {
218
        $classList = $this->getConfig()->getStoragePdoQueryAdapterClassNames(
219
            $this->getCurrentDatabaseEngineName()
220
        );
221
        if (!array_key_exists($name, $classList)) {
222
            throw new Exception('Invalid StoragePdoQueryAdapter name: ' . $name);
223
        }
224
225
        $queryBuilderClassName = $classList[$name];
226
227
        return new $queryBuilderClassName();
228
    }
229
230
    /**
231
     * @return \Spryker\Zed\Propel\Business\PropelFacadeInterface
232
     */
233
    protected function getPropelFacade()
234
    {
235
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PROPEL);
236
    }
237
238
    /**
239
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToPriceBridgeInterface
240
     */
241
    protected function getPriceFacade()
242
    {
243
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PRICE);
244
    }
245
246
    /**
247
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface
248
     */
249
    protected function createCriteriaBuilder()
250
    {
251
        $factory = new CriteriaBuilderFactory(
252
            $this->createCriteriaBuilderContainer()
253
        );
254
255
        $factory->registerWorkerCallback('CriteriaBuilderFactoryWorker', function () use ($factory) {
256
            return $factory->buildWorker(CriteriaBuilderFactoryWorker::class);
257
        });
258
259
        /** @var \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactoryWorker $factoryWorker */
260
        $factoryWorker = $factory->getWorkerByName('CriteriaBuilderFactoryWorker');
261
262
        return $factoryWorker->buildCriteriaBuilder();
263
    }
264
265
    /**
266
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderDependencyContainer
267
     */
268
    protected function createCriteriaBuilderContainer()
269
    {
270
        return new CriteriaBuilderDependencyContainer();
271
    }
272
273
    /**
274
     * @return \Spryker\Zed\ProductCategory\Persistence\ProductCategoryQueryContainerInterface
275
     */
276
    protected function getProductCategoryQueryContainer()
277
    {
278
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_CATEGORY);
279
    }
280
}
281