Passed
Push — development ( 5c1522...f7b72f )
by Theodoros
03:50
created

EcondaBusinessFactory::createEcondaCsvFileReader()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 0
dl 0
loc 5
rs 9.4285
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 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\File\EcondaCategoryCollector;
15
use SprykerEco\Zed\Econda\Business\Collector\File\EcondaProductCollector;
16
use SprykerEco\Zed\Econda\Business\Exporter\FileExporter;
17
use SprykerEco\Zed\Econda\Business\Exporter\Runner;
18
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\Adapter\CsvAdapter;
19
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\FileWriter;
20
use SprykerEco\Zed\Econda\Business\Exporter\Writer\File\NameGenerator\CsvNameGenerator;
21
use SprykerEco\Zed\Econda\Business\Helper\ProgressBarHelper;
22
use SprykerEco\Zed\Econda\Business\Manager\CollectorManager;
23
use SprykerEco\Zed\Econda\Business\Reader\EcondaCsvFileReader;
24
use SprykerEco\Zed\Econda\EcondaDependencyProvider;
25
26
/**
27
 * @method \SprykerEco\Zed\Econda\EcondaConfig getConfig()
28
 * @method \SprykerEco\Zed\Econda\Persistence\EcondaQueryContainer getQueryContainer()
29
 */
30
class EcondaBusinessFactory extends AbstractBusinessFactory
31
{
32
    const CRITERIA_BUILDER_FACTORY_WORKER = 'CriteriaBuilderFactoryWorker';
33
34
    /**
35
     * @return \SprykerEco\Zed\Econda\Business\Reader\EcondaCsvFileReaderInterface
36
     */
37
    public function createEcondaCsvFileReader()
38
    {
39
        $nameGenerator = $this->createCsvNameGenerator();
40
41
        return new EcondaCsvFileReader($this->getConfig(), $nameGenerator);
42
    }
43
44
    /**
45
     * @return \SprykerEco\Zed\Econda\Business\Exporter\RunnerInterface
46
     */
47
    public function createRunner()
48
    {
49
        return new Runner(
50
            $this->getLocaleFacade(),
51
            $this->createFileExporter()
52
        );
53
    }
54
55
    /**
56
     * @return \SprykerEco\Zed\Econda\Business\Manager\CollectorManagerInterface
57
     */
58
    public function createCollectorManager()
59
    {
60
        $criteriaBuilder = $this->createCriteriaBuilder();
61
        $queryContainer = $this->getQueryContainer();
62
        $progressBarHelper = $this->createProgressBarHelper();
63
64
        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

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