Passed
Push — development ( db1519...ab5019 )
by Theodoros
03:45
created

createEcondaProductCollector()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 7
nc 1
nop 0
dl 0
loc 9
rs 9.6666
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 createEcondaCategoryCollector()
107
    {
108
        return new EcondaCategoryCollector(
109
            $this->createCriteriaBuilder(),
110
            $this->createStoragePdoQueryAdapterByName('CategoryNodeEcondaQuery')
111
        );
112
    }
113
114
    /**
115
     * @return \SprykerEco\Zed\Econda\Business\Collector\File\EcondaProductCollector
116
     */
117
    public function createEcondaProductCollector()
118
    {
119
        return new EcondaProductCollector(
120
            $this->createCriteriaBuilder(),
121
            $this->createStoragePdoQueryAdapterByName('ProductConcreteEcondaQuery'),
122
            $this->getProductCategoryQueryContainer(),
123
            $this->getProductImageQueryContainer(),
124
            $this->getPriceFacade(),
125
            $this->getConfig()
126
        );
127
    }
128
129
    /**
130
     * @return \SprykerEco\Zed\Econda\Business\Exporter\ExporterInterface
131
     */
132
    protected function createFileExporter()
133
    {
134
        $fileExporter = new FileExporter(
135
            $this->createFileWriter(),
136
            $this->createFailedResultModel(),
137
            $this->createBatchResultModel(),
138
            $this->createCsvNameGenerator(),
139
            $this->getConfig()->getFileExportPath(),
140
            $this->getCollectorFileExporterPlugins()
141
        );
142
143
        return $fileExporter;
144
    }
145
146
    /**
147
     * @return \SprykerEco\Zed\Econda\Dependency\Plugin\EcondaPluginInterface[]
148
     */
149
    protected function getCollectorFileExporterPlugins()
150
    {
151
        return $this->getProvidedDependency(EcondaDependencyProvider::FILE_PLUGINS);
152
    }
153
154
    /**
155
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToLocaleInterface
156
     */
157
    protected function getLocaleFacade()
158
    {
159
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_LOCALE);
160
    }
161
162
    /**
163
     * @return \SprykerEco\Zed\Econda\Persistence\EcondaQueryContainer
164
     */
165
    protected function getEcondaQueryContainer()
166
    {
167
        return new EcondaQueryContainer();
168
    }
169
170
    /**
171
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\Adapter\CsvAdapter
172
     */
173
    protected function createCsvFileWriterAdapter()
174
    {
175
        return new CsvAdapter($this->getConfig()->getFileExportPath());
176
    }
177
178
    /**
179
     * @return \Generated\Shared\Transfer\FailedResultTransfer
180
     */
181
    protected function createFailedResultModel()
182
    {
183
        return new FailedResultTransfer();
184
    }
185
186
    /**
187
     * @return string
188
     */
189
    protected function getCurrentDatabaseEngineName()
190
    {
191
        return $this->getPropelFacade()->getCurrentDatabaseEngineName();
192
    }
193
194
    /**
195
     * @return \Spryker\Zed\ProductImage\Persistence\ProductImageQueryContainerInterface
196
     */
197
    protected function getProductImageQueryContainer()
198
    {
199
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_IMAGE);
200
    }
201
202
    /**
203
     * @param string $name
204
     *
205
     * @throws \Exception
206
     *
207
     * @return \SprykerEco\Zed\Econda\Persistence\Econda\AbstractPdoEcondaQuery
208
     */
209
    protected function createStoragePdoQueryAdapterByName($name)
210
    {
211
        $classList = $this->getConfig()->getStoragePdoQueryAdapterClassNames(
212
            $this->getCurrentDatabaseEngineName()
213
        );
214
        if (!array_key_exists($name, $classList)) {
215
            throw new Exception('Invalid StoragePdoQueryAdapter name: ' . $name);
216
        }
217
218
        $queryBuilderClassName = $classList[$name];
219
220
        return new $queryBuilderClassName();
221
    }
222
223
    /**
224
     * @return \Spryker\Zed\Propel\Business\PropelFacadeInterface
225
     */
226
    protected function getPropelFacade()
227
    {
228
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PROPEL);
229
    }
230
231
    /**
232
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToPriceBridgeInterface
233
     */
234
    protected function getPriceFacade()
235
    {
236
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PRICE);
237
    }
238
239
    /**
240
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface
241
     */
242
    protected function createCriteriaBuilder()
243
    {
244
        $factory = new CriteriaBuilderFactory(
245
            $this->createCriteriaBuilderContainer()
246
        );
247
248
        $factory->registerWorkerCallback('CriteriaBuilderFactoryWorker', function () use ($factory) {
249
            return $factory->buildWorker(CriteriaBuilderFactoryWorker::class);
250
        });
251
252
        /** @var \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactoryWorker $factoryWorker */
253
        $factoryWorker = $factory->getWorkerByName('CriteriaBuilderFactoryWorker');
254
255
        return $factoryWorker->buildCriteriaBuilder();
256
    }
257
258
    /**
259
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderDependencyContainer
260
     */
261
    protected function createCriteriaBuilderContainer()
262
    {
263
        return new CriteriaBuilderDependencyContainer();
264
    }
265
266
    /**
267
     * @return \Spryker\Zed\ProductCategory\Persistence\ProductCategoryQueryContainerInterface
268
     */
269
    protected function getProductCategoryQueryContainer()
270
    {
271
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_CATEGORY);
272
    }
273
}
274