Completed
Push — development ( aa14f4...eba539 )
by Ivan
05:22
created

EcondaBusinessFactory::createPdoEcondaQuery()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 1
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
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 Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderDependencyContainer;
11
use Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactory;
12
use Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactoryWorker;
13
use Spryker\Zed\Kernel\Business\AbstractBusinessFactory;
14
use SprykerEco\Zed\Econda\Business\Collector\DatabaseCollectorInterface;
15
use SprykerEco\Zed\Econda\Business\Collector\File\EcondaCategoryCollector;
16
use SprykerEco\Zed\Econda\Business\Collector\File\EcondaProductCollector;
17
use SprykerEco\Zed\Econda\Business\Exporter\ExporterInterface;
18
use SprykerEco\Zed\Econda\Business\Exporter\FileExporter;
19
use SprykerEco\Zed\Econda\Business\Exporter\Runner;
20
use SprykerEco\Zed\Econda\Business\Exporter\RunnerInterface;
21
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\Adapter\AdapterInterface;
22
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\Adapter\CsvAdapter;
23
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\FileWriter;
24
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\FileWriterInterface;
25
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\NameGenerator\CsvNameGenerator;
26
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\NameGenerator\NameGeneratorInterface;
27
use SprykerEco\Zed\Econda\Business\Helper\ProgressBarHelper;
28
use SprykerEco\Zed\Econda\Business\Helper\ProgressBarHelperInterface;
29
use SprykerEco\Zed\Econda\Business\Manager\CollectorManager;
30
use SprykerEco\Zed\Econda\Business\Manager\CollectorManagerInterface;
31
use SprykerEco\Zed\Econda\Business\Reader\File\CsvFileReader;
32
use SprykerEco\Zed\Econda\Business\Reader\File\FileReaderInterface;
33
use SprykerEco\Zed\Econda\Dependency\Facade\EcondaToLocaleFacadeInterface;
34
use SprykerEco\Zed\Econda\Dependency\Plugin\ExporterPluginInterface;
35
use SprykerEco\Zed\Econda\EcondaDependencyProvider;
36
use Spryker\Zed\ProductImage\Persistence\ProductImageQueryContainerInterface;
37
use SprykerEco\Zed\Econda\Persistence\Econda\AbstractEcondaPdoQuery;
38
use Spryker\Zed\Propel\Business\PropelFacadeInterface;
39
use SprykerEco\Zed\Econda\Dependency\Facade\EcondaToPriceProductFacadeInterface;
40
use Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface;
41
use Spryker\Zed\ProductCategory\Persistence\ProductCategoryQueryContainerInterface;
42
43
/**
44
 * @method \SprykerEco\Zed\Econda\EcondaConfig getConfig()
45
 * @method \SprykerEco\Zed\Econda\Persistence\EcondaQueryContainerInterface getQueryContainer()
46
 */
47
class EcondaBusinessFactory extends AbstractBusinessFactory
48
{
49
    protected const CATEGORY_NODE_ECONDA_QUERY = 'CategoryNodeEcondaQuery';
50
    protected const CRITERIA_BUILDER_FACTORY_WORKER = 'CriteriaBuilderFactoryWorker';
51
52
    /**
53
     * @return \SprykerEco\Zed\Econda\Business\Reader\File\FileReaderInterface
54
     */
55
    public function createEcondaCsvFileReader(): FileReaderInterface
56
    {
57
        $nameGenerator = $this->createCsvNameGenerator();
58
59
        return new CsvFileReader($this->getConfig(), $nameGenerator);
60
    }
61
62
    /**
63
     * @return \SprykerEco\Zed\Econda\Business\Exporter\RunnerInterface
64
     */
65
    public function createRunner(): RunnerInterface
66
    {
67
        return new Runner(
68
            $this->getLocaleFacade(),
69
            $this->createFileExporter()
70
        );
71
    }
72
73
    /**
74
     * @return \SprykerEco\Zed\Econda\Business\Manager\CollectorManagerInterface
75
     */
76
    public function createCollectorManager(): CollectorManagerInterface
77
    {
78
        return new CollectorManager(
79
            $this->createCriteriaBuilder(),
80
            $this->getQueryContainer(),
81
            $this->createProgressBarHelper()
82
        );
83
    }
84
85
    /**
86
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\FileWriterInterface
87
     */
88
    protected function createFileWriter(): FileWriterInterface
89
    {
90
        $csvFileWriterAdapter = $this->createCsvFileWriterAdapter();
91
92
        return new FileWriter($csvFileWriterAdapter);
93
    }
94
95
    /**
96
     * @return \SprykerEco\Zed\Econda\Business\Helper\ProgressBarHelperInterface
97
     */
98
    protected function createProgressBarHelper(): ProgressBarHelperInterface
99
    {
100
        return new ProgressBarHelper();
101
    }
102
103
    /**
104
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\NameGenerator\NameGeneratorInterface
105
     */
106
    protected function createCsvNameGenerator(): NameGeneratorInterface
107
    {
108
        return new CsvNameGenerator();
109
    }
110
111
    /**
112
     * @return \SprykerEco\Zed\Econda\Business\Collector\DatabaseCollectorInterface
113
     */
114
    public function createEcondaCategoryCollector(): DatabaseCollectorInterface
115
    {
116
        return new EcondaCategoryCollector(
117
            $this->createCriteriaBuilder(),
118
            $this->createEcondaPdoQuery(static::CATEGORY_NODE_ECONDA_QUERY)
119
        );
120
    }
121
122
    /**
123
     * @return \SprykerEco\Zed\Econda\Business\Collector\DatabaseCollectorInterface
124
     */
125
    public function createEcondaProductCollector(): DatabaseCollectorInterface
126
    {
127
        return new EcondaProductCollector(
128
            $this->createCriteriaBuilder(),
129
            $this->createEcondaPdoQuery('ProductConcreteEcondaQuery'),
130
            $this->getProductCategoryQueryContainer(),
131
            $this->getProductImageQueryContainer(),
132
            $this->getPriceProductFacade(),
133
            $this->getConfig()
134
        );
135
    }
136
137
    /**
138
     * @return \SprykerEco\Zed\Econda\Business\Exporter\ExporterInterface
139
     */
140
    protected function createFileExporter(): ExporterInterface
141
    {
142
        return new FileExporter(
143
            $this->createFileWriter(),
144
            $this->createCsvNameGenerator(),
145
            $this->getConfig()->getFileExportPath(),
146
            $this->getCollectorFileExporterPlugins()
147
        );
148
    }
149
150
    /**
151
     * @return \SprykerEco\Zed\Econda\Dependency\Plugin\ExporterPluginInterface[]
152
     */
153
    protected function getCollectorFileExporterPlugins(): array
154
    {
155
        return $this->getProvidedDependency(EcondaDependencyProvider::FILE_PLUGINS);
156
    }
157
158
    /**
159
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToLocaleFacadeInterface
160
     */
161
    protected function getLocaleFacade(): EcondaToLocaleFacadeInterface
162
    {
163
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_LOCALE);
164
    }
165
166
    /**
167
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\Adapter\AdapterInterface
168
     */
169
    protected function createCsvFileWriterAdapter(): AdapterInterface
170
    {
171
        return new CsvAdapter(
172
            $this->getConfig()->getFileExportPath(),
173
            $this->getConfig()->getCsvDelimiter()
174
        );
175
    }
176
177
    /**
178
     * @return \Spryker\Zed\ProductImage\Persistence\ProductImageQueryContainerInterface
179
     */
180
    protected function getProductImageQueryContainer(): ProductImageQueryContainerInterface
181
    {
182
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_IMAGE);
183
    }
184
185
    /**
186
     * @param string $econdaPdoQueryName
187
     *
188
     * @return \SprykerEco\Zed\Econda\Persistence\Econda\AbstractEcondaPdoQuery
189
     */
190
    protected function createEcondaPdoQuery($econdaPdoQueryName): AbstractEcondaPdoQuery
191
    {
192
        $econdaPdoQuery = $this->getConfig()->getEcondaPdoQueryClassName(
193
            $this->getPropelFacade()->getCurrentDatabaseEngineName(),
194
            $econdaPdoQueryName
195
        );
196
197
        return new $econdaPdoQuery();
198
    }
199
200
    /**
201
     * @return \Spryker\Zed\Propel\Business\PropelFacadeInterface
202
     */
203
    protected function getPropelFacade(): PropelFacadeInterface
204
    {
205
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PROPEL);
206
    }
207
208
    /**
209
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToPriceProductFacadeInterface
210
     */
211
    protected function getPriceProductFacade(): EcondaToPriceProductFacadeInterface
212
    {
213
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PRICE_PRODUCT);
214
    }
215
216
    /**
217
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface
218
     */
219
    protected function createCriteriaBuilder(): CriteriaBuilderInterface
220
    {
221
        $factory = new CriteriaBuilderFactory(
222
            $this->createCriteriaBuilderContainer()
223
        );
224
225
        $factory->registerWorkerCallback(static::CRITERIA_BUILDER_FACTORY_WORKER, function () use ($factory) {
226
            return $factory->buildWorker(CriteriaBuilderFactoryWorker::class);
227
        });
228
229
        /** @var \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactoryWorker $factoryWorker */
230
        $factoryWorker = $factory->getWorkerByName(static::CRITERIA_BUILDER_FACTORY_WORKER);
231
232
        return $factoryWorker->buildCriteriaBuilder();
233
    }
234
235
    /**
236
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderDependencyContainer
237
     */
238
    protected function createCriteriaBuilderContainer(): CriteriaBuilderDependencyContainer
239
    {
240
        return new CriteriaBuilderDependencyContainer();
241
    }
242
243
    /**
244
     * @return \Spryker\Zed\ProductCategory\Persistence\ProductCategoryQueryContainerInterface
245
     */
246
    protected function getProductCategoryQueryContainer(): ProductCategoryQueryContainerInterface
247
    {
248
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_CATEGORY);
249
    }
250
}
251