Passed
Push — development ( ab5019...4bd81a )
by Theodoros
03:34
created

EcondaBusinessFactory   A

Complexity

Total Complexity 22

Size/Duplication

Total Lines 222
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 222
rs 10
c 2
b 0
f 0
wmc 22

21 Methods

Rating   Name   Duplication   Size   Complexity  
A getLocaleFacade() 0 3 1
A getCollectorFileExporterPlugins() 0 3 1
A getPriceFacade() 0 3 1
A createRunner() 0 5 1
A createFileWriter() 0 6 1
A createCriteriaBuilderContainer() 0 3 1
A createFileExporter() 0 9 1
A getPropelFacade() 0 3 1
A createCollectorManager() 0 6 1
A createEcondaProductCollector() 0 9 1
A createCsvNameGenerator() 0 3 1
A createStoragePdoQueryAdapterByName() 0 12 2
A createBatchResultModel() 0 3 1
A createEcondaCsvFileReader() 0 5 1
A createCriteriaBuilder() 0 14 1
A getProductImageQueryContainer() 0 3 1
A createCsvFileWriterAdapter() 0 3 1
A createEcondaCategoryCollector() 0 5 1
A getCurrentDatabaseEngineName() 0 3 1
A getProductCategoryQueryContainer() 0 3 1
A createProgressBarHelper() 0 3 1
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
    const CRITERIA_BUILDER_FACTORY_WORKER = 'CriteriaBuilderFactoryWorker';
37
38
    /**
39
     * @return \SprykerEco\Zed\Econda\Business\Reader\EcondaCsvFileReader
40
     */
41
    public function createEcondaCsvFileReader()
42
    {
43
        $nameGenerator = $this->createCsvNameGenerator();
44
45
        return new EcondaCsvFileReader($this->getConfig(), $nameGenerator);
46
    }
47
48
    /**
49
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Runner
50
     */
51
    public function createRunner()
52
    {
53
        return new Runner(
54
            $this->getLocaleFacade(),
55
            $this->createFileExporter()
56
        );
57
    }
58
59
    /**
60
     * @return \SprykerEco\Zed\Econda\Business\Manager\CollectorManager
61
     */
62
    public function createCollectorManager()
63
    {
64
        $criteriaBuilder = $this->createCriteriaBuilder();
65
        $queryContainer = $this->getQueryContainer();
66
        $progressBarHelper = $this->createProgressBarHelper();
67
        return new CollectorManager($criteriaBuilder, $queryContainer, $progressBarHelper);
0 ignored issues
show
Bug introduced by
$queryContainer of type SprykerEco\Zed\Econda\EcondaConfig is incompatible with the type SprykerEco\Zed\Econda\Pe...QueryContainerInterface expected by parameter $queryContainer of SprykerEco\Zed\Econda\Bu...rManager::__construct(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

67
        return new CollectorManager($criteriaBuilder, /** @scrutinizer ignore-type */ $queryContainer, $progressBarHelper);
Loading history...
68
    }
69
70
    /**
71
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\FileWriter
72
     */
73
    protected function createFileWriter()
74
    {
75
        $csvFileWriterAdapter = $this->createCsvFileWriterAdapter();
76
        $fileWriter = new FileWriter($csvFileWriterAdapter);
77
78
        return $fileWriter;
79
    }
80
81
    /**
82
     * @return \Generated\Shared\Transfer\BatchResultTransfer
83
     */
84
    protected function createBatchResultModel()
85
    {
86
        return new BatchResultTransfer();
87
    }
88
89
    /**
90
     * @return \SprykerEco\Zed\Econda\Business\Helper\ProgressBarHelper
91
     */
92
    protected function createProgressBarHelper()
93
    {
94
        return new ProgressBarHelper();
95
    }
96
97
    /**
98
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\NameGenerator\CsvNameGenerator
99
     */
100
    protected function createCsvNameGenerator()
101
    {
102
        return new CsvNameGenerator();
103
    }
104
105
    /**
106
     * @return \SprykerEco\Zed\Econda\Business\Collector\File\EcondaCategoryCollector
107
     */
108
    public function createEcondaCategoryCollector()
109
    {
110
        return new EcondaCategoryCollector(
111
            $this->createCriteriaBuilder(),
112
            $this->createStoragePdoQueryAdapterByName('CategoryNodeEcondaQuery')
113
        );
114
    }
115
116
    /**
117
     * @return \SprykerEco\Zed\Econda\Business\Collector\File\EcondaProductCollector
118
     */
119
    public function createEcondaProductCollector()
120
    {
121
        return new EcondaProductCollector(
122
            $this->createCriteriaBuilder(),
123
            $this->createStoragePdoQueryAdapterByName('ProductConcreteEcondaQuery'),
124
            $this->getProductCategoryQueryContainer(),
125
            $this->getProductImageQueryContainer(),
126
            $this->getPriceFacade(),
127
            $this->getConfig()
128
        );
129
    }
130
131
    /**
132
     * @return \SprykerEco\Zed\Econda\Business\Exporter\ExporterInterface
133
     */
134
    protected function createFileExporter()
135
    {
136
        return new FileExporter(
137
            $this->createFileWriter(),
138
            new FailedResultTransfer(),
139
            $this->createBatchResultModel(),
140
            $this->createCsvNameGenerator(),
141
            $this->getConfig()->getFileExportPath(),
142
            $this->getCollectorFileExporterPlugins()
143
        );
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\Business\Exporter\Writer\File\Adapter\CsvAdapter
164
     */
165
    protected function createCsvFileWriterAdapter()
166
    {
167
        return new CsvAdapter($this->getConfig()->getFileExportPath());
168
    }
169
170
    /**
171
     * @return string
172
     */
173
    protected function getCurrentDatabaseEngineName()
174
    {
175
        return $this->getPropelFacade()->getCurrentDatabaseEngineName();
176
    }
177
178
    /**
179
     * @return \Spryker\Zed\ProductImage\Persistence\ProductImageQueryContainerInterface
180
     */
181
    protected function getProductImageQueryContainer()
182
    {
183
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_IMAGE);
184
    }
185
186
    /**
187
     * @param string $name
188
     *
189
     * @throws \Exception
190
     *
191
     * @return \SprykerEco\Zed\Econda\Persistence\Econda\AbstractPdoEcondaQuery
192
     */
193
    protected function createStoragePdoQueryAdapterByName($name)
194
    {
195
        $classList = $this->getConfig()->getStoragePdoQueryAdapterClassNames(
196
            $this->getCurrentDatabaseEngineName()
197
        );
198
        if (!array_key_exists($name, $classList)) {
199
            throw new Exception('Invalid StoragePdoQueryAdapter name: ' . $name);
200
        }
201
202
        $queryBuilderClassName = $classList[$name];
203
204
        return new $queryBuilderClassName();
205
    }
206
207
    /**
208
     * @return \Spryker\Zed\Propel\Business\PropelFacadeInterface
209
     */
210
    protected function getPropelFacade()
211
    {
212
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PROPEL);
213
    }
214
215
    /**
216
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToPriceBridgeInterface
217
     */
218
    protected function getPriceFacade()
219
    {
220
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PRICE);
221
    }
222
223
    /**
224
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface
225
     */
226
    protected function createCriteriaBuilder()
227
    {
228
        $factory = new CriteriaBuilderFactory(
229
            $this->createCriteriaBuilderContainer()
230
        );
231
232
        $factory->registerWorkerCallback(self::CRITERIA_BUILDER_FACTORY_WORKER, function () use ($factory) {
233
            return $factory->buildWorker(CriteriaBuilderFactoryWorker::class);
234
        });
235
236
        /** @var \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactoryWorker $factoryWorker */
237
        $factoryWorker = $factory->getWorkerByName(self::CRITERIA_BUILDER_FACTORY_WORKER);
238
239
        return $factoryWorker->buildCriteriaBuilder();
240
    }
241
242
    /**
243
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderDependencyContainer
244
     */
245
    protected function createCriteriaBuilderContainer()
246
    {
247
        return new CriteriaBuilderDependencyContainer();
248
    }
249
250
    /**
251
     * @return \Spryker\Zed\ProductCategory\Persistence\ProductCategoryQueryContainerInterface
252
     */
253
    protected function getProductCategoryQueryContainer()
254
    {
255
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_CATEGORY);
256
    }
257
}
258