Passed
Branch development (62ef01)
by Theodoros
06:18
created

getProductImageQueryContainer()   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\EcondaCsvFileReader
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\Runner
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\CollectorManager
60
     */
61
    public function createCollectorManager()
62
    {
63
        $criteriaBuilder = $this->createCriteriaBuilder();
64
        $queryContainer = $this->getQueryContainer();
65
        $progressBarHelper = $this->createProgressBarHelper();
66
        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

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