Completed
Pull Request — development (#2)
by Oleksandr
07:00
created

EcondaBusinessFactory::getPriceProductFacade()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 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 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\File\CsvFileReader;
24
use SprykerEco\Zed\Econda\EcondaDependencyProvider;
25
26
/**
27
 * @method \SprykerEco\Zed\Econda\EcondaConfig getConfig()
28
 * @method \SprykerEco\Zed\Econda\Persistence\EcondaQueryContainerInterface getQueryContainer()
29
 */
30
class EcondaBusinessFactory extends AbstractBusinessFactory
31
{
32
    const CRITERIA_BUILDER_FACTORY_WORKER = 'CriteriaBuilderFactoryWorker';
33
34
    /**
35
     * @return \SprykerEco\Zed\Econda\Business\Reader\File\FileReaderInterface
36
     */
37
    public function createEcondaCsvFileReader()
38
    {
39
        $nameGenerator = $this->createCsvNameGenerator();
40
41
        return new CsvFileReader($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);
65
    }
66
67
    /**
68
     * @return \SprykerEco\Zed\Econda\Business\Exporter\Writer\File\FileWriterInterface
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->getPriceProductFacade(),
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\EcondaToLocaleFacadeInterface
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(
154
            $this->getConfig()->getFileExportPath(),
155
            $this->getConfig()->getFileExportDelimiter()
156
        );
157
    }
158
159
    /**
160
     * @return \Spryker\Zed\ProductImage\Persistence\ProductImageQueryContainerInterface
161
     */
162
    protected function getProductImageQueryContainer()
163
    {
164
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_IMAGE);
165
    }
166
167
    /**
168
     * @param string $pdoEcondaQueryName
169
     *
170
     * @return \SprykerEco\Zed\Econda\Persistence\Econda\AbstractPdoEcondaQuery
171
     */
172
    protected function createPdoEcondaQuery($pdoEcondaQueryName)
173
    {
174
        $pdoEcondaQuery = $this->getConfig()->getPdoEcondaQueryClassName(
175
            $pdoEcondaQueryName,
176
            $this->getPropelFacade()->getCurrentDatabaseEngineName()
177
        );
178
179
        return new $pdoEcondaQuery();
180
    }
181
182
    /**
183
     * @return \Spryker\Zed\Propel\Business\PropelFacadeInterface
184
     */
185
    protected function getPropelFacade()
186
    {
187
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PROPEL);
188
    }
189
190
    /**
191
     * @return \SprykerEco\Zed\Econda\Dependency\Facade\EcondaToPriceProductFacadeInterface
192
     */
193
    protected function getPriceProductFacade()
194
    {
195
        return $this->getProvidedDependency(EcondaDependencyProvider::FACADE_PRICE_PRODUCT);
196
    }
197
198
    /**
199
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderInterface
200
     */
201
    protected function createCriteriaBuilder()
202
    {
203
        $factory = new CriteriaBuilderFactory(
204
            $this->createCriteriaBuilderContainer()
205
        );
206
207
        $factory->registerWorkerCallback(self::CRITERIA_BUILDER_FACTORY_WORKER, function () use ($factory) {
208
            return $factory->buildWorker(CriteriaBuilderFactoryWorker::class);
209
        });
210
211
        /** @var \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderFactoryWorker $factoryWorker */
212
        $factoryWorker = $factory->getWorkerByName(self::CRITERIA_BUILDER_FACTORY_WORKER);
213
214
        return $factoryWorker->buildCriteriaBuilder();
215
    }
216
217
    /**
218
     * @return \Spryker\Shared\SqlCriteriaBuilder\CriteriaBuilder\CriteriaBuilderDependencyContainer
219
     */
220
    protected function createCriteriaBuilderContainer()
221
    {
222
        return new CriteriaBuilderDependencyContainer();
223
    }
224
225
    /**
226
     * @return \Spryker\Zed\ProductCategory\Persistence\ProductCategoryQueryContainerInterface
227
     */
228
    protected function getProductCategoryQueryContainer()
229
    {
230
        return $this->getProvidedDependency(EcondaDependencyProvider::QUERY_CONTAINER_PRODUCT_CATEGORY);
231
    }
232
}
233