Passed
Push — development ( 0c7860...3cbc8c )
by Theodoros
04:00
created

EcondaBusinessFactory::createBatchResultModel()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
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
29
/**
30
 * @method \SprykerEco\Zed\Econda\EcondaConfig getConfig()
31
 * @method \SprykerEco\Zed\Econda\Persistence\EcondaQueryContainer getQueryContainer()
32
 */
33
class EcondaBusinessFactory extends AbstractBusinessFactory
34
{
35
    const CRITERIA_BUILDER_FACTORY_WORKER = 'CriteriaBuilderFactoryWorker';
36
37
    /**
38
     * @return \SprykerEco\Zed\Econda\Business\Reader\EcondaCsvFileReaderInterface
39
     */
40
    public function createEcondaCsvFileReader()
41
    {
42
        $nameGenerator = $this->createCsvNameGenerator();
43
44
        return new EcondaCsvFileReader($this->getConfig(), $nameGenerator);
45
    }
46
47
    /**
48
     * @return \SprykerEco\Zed\Econda\Business\Exporter\RunnerInterface
49
     */
50
    public function createRunner()
51
    {
52
        return new Runner(
53
            $this->getLocaleFacade(),
54
            $this->createFileExporter()
55
        );
56
    }
57
58
    /**
59
     * @return \SprykerEco\Zed\Econda\Business\Manager\CollectorManagerInterface
60
     */
61
    public function createCollectorManager()
62
    {
63
        $criteriaBuilder = $this->createCriteriaBuilder();
64
        $queryContainer = $this->getQueryContainer();
65
        $progressBarHelper = $this->createProgressBarHelper();
66
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\WriterInterface
72
     */
73
    protected function createFileWriter()
74
    {
75
        $csvFileWriterAdapter = $this->createCsvFileWriterAdapter();
76
77
        return new FileWriter($csvFileWriterAdapter);
78
    }
79
80
    /**
81
     * @return \SprykerEco\Zed\Econda\Business\Helper\ProgressBarHelperInterface
82
     */
83
    protected function createProgressBarHelper()
84
    {
85
        return new ProgressBarHelper();
86
    }
87
88
    /**
89
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\NameGenerator\NameGeneratorInterface
90
     */
91
    protected function createCsvNameGenerator()
92
    {
93
        return new CsvNameGenerator();
94
    }
95
96
    /**
97
     * @return \SprykerEco\Zed\Econda\Business\Collector\DatabaseCollectorInterface
98
     */
99
    public function createEcondaCategoryCollector()
100
    {
101
        return new EcondaCategoryCollector(
102
            $this->createCriteriaBuilder(),
103
            $this->createStoragePdoQueryAdapterByName('CategoryNodeEcondaQuery')
104
        );
105
    }
106
107
    /**
108
     * @return \SprykerEco\Zed\Econda\Business\Collector\DatabaseCollectorInterface
109
     */
110
    public function createEcondaProductCollector()
111
    {
112
        return new EcondaProductCollector(
113
            $this->createCriteriaBuilder(),
114
            $this->createStoragePdoQueryAdapterByName('ProductConcreteEcondaQuery'),
115
            $this->getProductCategoryQueryContainer(),
116
            $this->getProductImageQueryContainer(),
117
            $this->getPriceFacade(),
118
            $this->getConfig()
119
        );
120
    }
121
122
    /**
123
     * @return \SprykerEco\Zed\Econda\Business\Exporter\ExporterInterface
124
     */
125
    protected function createFileExporter()
126
    {
127
        return new FileExporter(
128
            $this->createFileWriter(),
129
            new FailedResultTransfer(),
130
            new BatchResultTransfer(),
131
            $this->createCsvNameGenerator(),
132
            $this->getConfig()->getFileExportPath(),
133
            $this->getCollectorFileExporterPlugins()
134
        );
135
    }
136
137
    /**
138
     * @return \SprykerEco\Zed\Econda\Dependency\Plugin\EcondaPluginInterface[]
139
     */
140
    protected function getCollectorFileExporterPlugins()
141
    {
142
        return $this->getProvidedDependency(EcondaDependencyProvider::FILE_PLUGINS);
143
    }
144
145
    /**
146
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToLocaleInterface
147
     */
148
    protected function getLocaleFacade()
149
    {
150
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_LOCALE);
151
    }
152
153
    /**
154
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\Adapter\AdapterInterface
155
     */
156
    protected function createCsvFileWriterAdapter()
157
    {
158
        return new CsvAdapter($this->getConfig()->getFileExportPath());
159
    }
160
161
    /**
162
     * @return string
163
     */
164
    protected function getCurrentDatabaseEngineName()
165
    {
166
        return $this->getPropelFacade()->getCurrentDatabaseEngineName();
167
    }
168
169
    /**
170
     * @return \Spryker\Zed\ProductImage\Persistence\ProductImageQueryContainerInterface
171
     */
172
    protected function getProductImageQueryContainer()
173
    {
174
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_IMAGE);
175
    }
176
177
    /**
178
     * @param string $name
179
     *
180
     * @throws \Exception
181
     *
182
     * @return \SprykerEco\Zed\Econda\Persistence\Econda\AbstractPdoEcondaQuery
183
     */
184
    protected function createStoragePdoQueryAdapterByName($name)
185
    {
186
        $classList = $this->getConfig()->getStoragePdoQueryAdapterClassNames(
187
            $this->getCurrentDatabaseEngineName()
188
        );
189
        if (!array_key_exists($name, $classList)) {
190
            throw new Exception('Invalid StoragePdoQueryAdapter name: ' . $name);
191
        }
192
193
        $queryBuilderClassName = $classList[$name];
194
195
        return new $queryBuilderClassName();
196
    }
197
198
    /**
199
     * @return \Spryker\Zed\Propel\Business\PropelFacadeInterface
200
     */
201
    protected function getPropelFacade()
202
    {
203
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PROPEL);
204
    }
205
206
    /**
207
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToPriceBridgeInterface
208
     */
209
    protected function getPriceFacade()
210
    {
211
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PRICE);
212
    }
213
214
    /**
215
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface
216
     */
217
    protected function createCriteriaBuilder()
218
    {
219
        $factory = new CriteriaBuilderFactory(
220
            $this->createCriteriaBuilderContainer()
221
        );
222
223
        $factory->registerWorkerCallback(self::CRITERIA_BUILDER_FACTORY_WORKER, function () use ($factory) {
224
            return $factory->buildWorker(CriteriaBuilderFactoryWorker::class);
225
        });
226
227
        /** @var \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactoryWorker $factoryWorker */
228
        $factoryWorker = $factory->getWorkerByName(self::CRITERIA_BUILDER_FACTORY_WORKER);
229
230
        return $factoryWorker->buildCriteriaBuilder();
231
    }
232
233
    /**
234
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderDependencyContainer
235
     */
236
    protected function createCriteriaBuilderContainer()
237
    {
238
        return new CriteriaBuilderDependencyContainer();
239
    }
240
241
    /**
242
     * @return \Spryker\Zed\ProductCategory\Persistence\ProductCategoryQueryContainerInterface
243
     */
244
    protected function getProductCategoryQueryContainer()
245
    {
246
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_CATEGORY);
247
    }
248
}
249