Completed
Pull Request — master (#13)
by Tim
05:57
created

ProductBunchProcessorFactory   C

Complexity

Total Complexity 2

Size/Duplication

Total Lines 299
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 52

Test Coverage

Coverage 0%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 2
c 2
b 0
f 0
lcom 0
cbo 52
dl 0
loc 299
ccs 0
cts 229
cp 0
rs 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getProcessorType() 0 4 1
B factory() 0 277 1
1
<?php
2
3
/**
4
 * TechDivision\Import\Cli\Services\ProductBunchProcessorFactory
5
 *
6
 * NOTICE OF LICENSE
7
 *
8
 * This source file is subject to the Open Software License (OSL 3.0)
9
 * that is available through the world-wide-web at this URL:
10
 * http://opensource.org/licenses/osl-3.0.php
11
 *
12
 * PHP version 5
13
 *
14
 * @author    Tim Wagner <[email protected]>
15
 * @copyright 2016 TechDivision GmbH <[email protected]>
16
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
17
 * @link      https://github.com/techdivision/import-cli-simple
18
 * @link      http://www.techdivision.com
19
 */
20
21
namespace TechDivision\Import\Cli\Services;
22
23
use TechDivision\Import\Configuration\SubjectInterface;
24
use TechDivision\Import\Product\Repositories\ProductRepository;
25
use TechDivision\Import\Product\Repositories\ProductWebsiteRepository;
26
use TechDivision\Import\Product\Repositories\ProductDatetimeRepository;
27
use TechDivision\Import\Product\Repositories\ProductDecimalRepository;
28
use TechDivision\Import\Product\Repositories\ProductIntRepository;
29
use TechDivision\Import\Product\Repositories\ProductTextRepository;
30
use TechDivision\Import\Product\Repositories\ProductVarcharRepository;
31
use TechDivision\Import\Product\Repositories\CategoryProductRepository;
32
use TechDivision\Import\Product\Repositories\StockStatusRepository;
33
use TechDivision\Import\Product\Repositories\StockItemRepository;
34
use TechDivision\Import\Product\Repositories\UrlRewriteRepository;
35
use TechDivision\Import\Repositories\EavAttributeOptionValueRepository;
36
use TechDivision\Import\Product\Actions\UrlRewriteAction;
37
use TechDivision\Import\Product\Actions\ProductAction;
38
use TechDivision\Import\Product\Actions\CategoryProductAction;
39
use TechDivision\Import\Product\Actions\StockItemAction;
40
use TechDivision\Import\Product\Actions\StockStatusAction;
41
use TechDivision\Import\Product\Actions\ProductWebsiteAction;
42
use TechDivision\Import\Product\Actions\ProductVarcharAction;
43
use TechDivision\Import\Product\Actions\ProductTextAction;
44
use TechDivision\Import\Product\Actions\ProductIntAction;
45
use TechDivision\Import\Product\Actions\ProductDecimalAction;
46
use TechDivision\Import\Product\Actions\ProductDatetimeAction;
47
use TechDivision\Import\Product\Actions\Processors\ProductDeleteProcessor;
48
use TechDivision\Import\Product\Actions\Processors\ProductUpdateProcessor;
49
use TechDivision\Import\Product\Actions\Processors\ProductCreateProcessor;
50
use TechDivision\Import\Product\Actions\Processors\CategoryProductDeleteProcessor;
51
use TechDivision\Import\Product\Actions\Processors\CategoryProductCreateProcessor;
52
use TechDivision\Import\Product\Actions\Processors\CategoryProductUpdateProcessor;
53
use TechDivision\Import\Product\Actions\Processors\ProductDatetimeCreateProcessor;
54
use TechDivision\Import\Product\Actions\Processors\ProductDatetimeUpdateProcessor;
55
use TechDivision\Import\Product\Actions\Processors\ProductDecimalCreateProcessor;
56
use TechDivision\Import\Product\Actions\Processors\ProductDecimalUpdateProcessor;
57
use TechDivision\Import\Product\Actions\Processors\ProductIntCreateProcessor;
58
use TechDivision\Import\Product\Actions\Processors\ProductIntUpdateProcessor;
59
use TechDivision\Import\Product\Actions\Processors\ProductTextCreateProcessor;
60
use TechDivision\Import\Product\Actions\Processors\ProductTextUpdateProcessor;
61
use TechDivision\Import\Product\Actions\Processors\ProductVarcharCreateProcessor;
62
use TechDivision\Import\Product\Actions\Processors\ProductVarcharUpdateProcessor;
63
use TechDivision\Import\Product\Actions\Processors\ProductWebsiteDeleteProcessor;
64
use TechDivision\Import\Product\Actions\Processors\ProductWebsiteCreateProcessor;
65
use TechDivision\Import\Product\Actions\Processors\StockItemDeleteProcessor;
66
use TechDivision\Import\Product\Actions\Processors\StockItemCreateProcessor;
67
use TechDivision\Import\Product\Actions\Processors\StockItemUpdateProcessor;
68
use TechDivision\Import\Product\Actions\Processors\StockStatusDeleteProcessor;
69
use TechDivision\Import\Product\Actions\Processors\StockStatusCreateProcessor;
70
use TechDivision\Import\Product\Actions\Processors\StockStatusUpdateProcessor;
71
use TechDivision\Import\Product\Actions\Processors\UrlRewriteCreateProcessor;
72
use TechDivision\Import\Product\Actions\Processors\UrlRewriteDeleteProcessor;
73
use TechDivision\Import\Product\Actions\Processors\UrlRewriteUpdateProcessor;
74
75
/**
76
 * Factory to create a new product bunch processor.
77
 *
78
 * @author    Tim Wagner <[email protected]>
79
 * @copyright 2016 TechDivision GmbH <[email protected]>
80
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
81
 * @link      https://github.com/techdivision/import-cli-simple
82
 * @link      http://www.techdivision.com
83
 */
84
class ProductBunchProcessorFactory extends AbstractProductProcessorFactory
85
{
86
87
    /**
88
     * Return's the processor class name.
89
     *
90
     * @return string The processor class name
91
     */
92
    protected static function getProcessorType()
93
    {
94
        return 'TechDivision\Import\Product\Services\ProductBunchProcessor';
95
    }
96
97
    /**
98
     * Factory method to create a new product processor instance.
99
     *
100
     * @param \PDO                                               $connection    The PDO connection to use
101
     * @param TechDivision\Import\Configuration\SubjectInterface $configuration The subject configuration
102
     *
103
     * @return \TechDivision\Import\Product\Services\ProductProcessor The processor instance
104
     */
105
    public static function factory(\PDO $connection, SubjectInterface $configuration)
106
    {
107
108
        // load the utility class name
109
        $utilityClassName = $configuration->getUtilityClassName();
110
111
        // initialize the repository that provides EAV attribute option value query functionality
112
        $eavAttributeOptionValueRepository = new EavAttributeOptionValueRepository();
113
        $eavAttributeOptionValueRepository->setUtilityClassName($utilityClassName);
114
        $eavAttributeOptionValueRepository->setConnection($connection);
115
        $eavAttributeOptionValueRepository->init();
116
117
        // initialize the repository that provides product query functionality
118
        $productRepository = new ProductRepository();
119
        $productRepository->setUtilityClassName($utilityClassName);
120
        $productRepository->setConnection($connection);
121
        $productRepository->init();
122
123
        // initialize the repository that provides product website relation query functionality
124
        $productWebsiteRepository = new ProductWebsiteRepository();
125
        $productWebsiteRepository->setUtilityClassName($utilityClassName);
126
        $productWebsiteRepository->setConnection($connection);
127
        $productWebsiteRepository->init();
128
129
        // initialize the repository that provides product datetime attribute query functionality
130
        $productDatetimeRepository = new ProductDatetimeRepository();
131
        $productDatetimeRepository->setUtilityClassName($utilityClassName);
132
        $productDatetimeRepository->setConnection($connection);
133
        $productDatetimeRepository->init();
134
135
        // initialize the repository that provides product decimal attribute query functionality
136
        $productDecimalRepository = new ProductDecimalRepository();
137
        $productDecimalRepository->setUtilityClassName($utilityClassName);
138
        $productDecimalRepository->setConnection($connection);
139
        $productDecimalRepository->init();
140
141
        // initialize the repository that provides product integer attribute query functionality
142
        $productIntRepository = new ProductIntRepository();
143
        $productIntRepository->setUtilityClassName($utilityClassName);
144
        $productIntRepository->setConnection($connection);
145
        $productIntRepository->init();
146
147
        // initialize the repository that provides product text attribute query functionality
148
        $productTextRepository = new ProductTextRepository();
149
        $productTextRepository->setUtilityClassName($utilityClassName);
150
        $productTextRepository->setConnection($connection);
151
        $productTextRepository->init();
152
153
        // initialize the repository that provides product varchar attribute query functionality
154
        $productVarcharRepository = new ProductVarcharRepository();
155
        $productVarcharRepository->setUtilityClassName($utilityClassName);
156
        $productVarcharRepository->setConnection($connection);
157
        $productVarcharRepository->init();
158
159
        // initialize the repository that provides category product relation query functionality
160
        $categoryProductRepository = new CategoryProductRepository();
161
        $categoryProductRepository->setUtilityClassName($utilityClassName);
162
        $categoryProductRepository->setConnection($connection);
163
        $categoryProductRepository->init();
164
165
        // initialize the repository that provides stock status query functionality
166
        $stockStatusRepository = new StockStatusRepository();
167
        $stockStatusRepository->setUtilityClassName($utilityClassName);
168
        $stockStatusRepository->setConnection($connection);
169
        $stockStatusRepository->init();
170
171
        // initialize the repository that provides stock item query functionality
172
        $stockItemRepository = new StockItemRepository();
173
        $stockItemRepository->setUtilityClassName($utilityClassName);
174
        $stockItemRepository->setConnection($connection);
175
        $stockItemRepository->init();
176
177
        // initialize the repository that provides URL rewrite query functionality
178
        $urlRewriteRepository = new UrlRewriteRepository();
179
        $urlRewriteRepository->setUtilityClassName($utilityClassName);
180
        $urlRewriteRepository->setConnection($connection);
181
        $urlRewriteRepository->init();
182
183
        // initialize the action that provides category product relation CRUD functionality
184
        $categoryProductCreateProcessor = new CategoryProductCreateProcessor();
185
        $categoryProductCreateProcessor->setUtilityClassName($utilityClassName);
186
        $categoryProductCreateProcessor->setConnection($connection);
187
        $categoryProductCreateProcessor->init();
188
        $categoryProductDeleteProcessor = new CategoryProductDeleteProcessor();
189
        $categoryProductDeleteProcessor->setUtilityClassName($utilityClassName);
190
        $categoryProductDeleteProcessor->setConnection($connection);
191
        $categoryProductDeleteProcessor->init();
192
        $categoryProductUpdateProcessor = new CategoryProductUpdateProcessor();
193
        $categoryProductUpdateProcessor->setUtilityClassName($utilityClassName);
194
        $categoryProductUpdateProcessor->setConnection($connection);
195
        $categoryProductUpdateProcessor->init();
196
        $categoryProductAction = new CategoryProductAction();
197
        $categoryProductAction->setCreateProcessor($categoryProductCreateProcessor);
198
        $categoryProductAction->setDeleteProcessor($categoryProductDeleteProcessor);
199
        $categoryProductAction->setUpdateProcessor($categoryProductUpdateProcessor);
200
201
        // initialize the action that provides product datetime attribute CRUD functionality
202
        $productDatetimeCreateProcessor = new ProductDatetimeCreateProcessor();
203
        $productDatetimeCreateProcessor->setUtilityClassName($utilityClassName);
204
        $productDatetimeCreateProcessor->setConnection($connection);
205
        $productDatetimeCreateProcessor->init();
206
        $productDatetimeUpdateProcessor = new ProductDatetimeUpdateProcessor();
207
        $productDatetimeUpdateProcessor->setUtilityClassName($utilityClassName);
208
        $productDatetimeUpdateProcessor->setConnection($connection);
209
        $productDatetimeUpdateProcessor->init();
210
        $productDatetimeAction = new ProductDatetimeAction();
211
        $productDatetimeAction->setCreateProcessor($productDatetimeCreateProcessor);
212
        $productDatetimeAction->setUpdateProcessor($productDatetimeUpdateProcessor);
213
214
        // initialize the action that provides product decimal attribute CRUD functionality
215
        $productDecimalCreateProcessor = new ProductDecimalCreateProcessor();
216
        $productDecimalCreateProcessor->setUtilityClassName($utilityClassName);
217
        $productDecimalCreateProcessor->setConnection($connection);
218
        $productDecimalCreateProcessor->init();
219
        $productDecimalUpdateProcessor = new ProductDecimalUpdateProcessor();
220
        $productDecimalUpdateProcessor->setUtilityClassName($utilityClassName);
221
        $productDecimalUpdateProcessor->setConnection($connection);
222
        $productDecimalUpdateProcessor->init();
223
        $productDecimalAction = new ProductDecimalAction();
224
        $productDecimalAction->setCreateProcessor($productDecimalCreateProcessor);
225
        $productDecimalAction->setUpdateProcessor($productDecimalUpdateProcessor);
226
227
        // initialize the action that provides product integer attribute CRUD functionality
228
        $productIntCreateProcessor = new ProductIntCreateProcessor();
229
        $productIntCreateProcessor->setUtilityClassName($utilityClassName);
230
        $productIntCreateProcessor->setConnection($connection);
231
        $productIntCreateProcessor->init();
232
        $productIntUpdateProcessor = new ProductIntUpdateProcessor();
233
        $productIntUpdateProcessor->setUtilityClassName($utilityClassName);
234
        $productIntUpdateProcessor->setConnection($connection);
235
        $productIntUpdateProcessor->init();
236
        $productIntAction = new ProductIntAction();
237
        $productIntAction->setCreateProcessor($productIntCreateProcessor);
238
        $productIntAction->setUpdateProcessor($productIntUpdateProcessor);
239
240
        // initialize the action that provides product text attribute CRUD functionality
241
        $productTextCreateProcessor = new ProductTextCreateProcessor();
242
        $productTextCreateProcessor->setUtilityClassName($utilityClassName);
243
        $productTextCreateProcessor->setConnection($connection);
244
        $productTextCreateProcessor->init();
245
        $productTextUpdateProcessor = new ProductTextUpdateProcessor();
246
        $productTextUpdateProcessor->setUtilityClassName($utilityClassName);
247
        $productTextUpdateProcessor->setConnection($connection);
248
        $productTextUpdateProcessor->init();
249
        $productTextAction = new ProductTextAction();
250
        $productTextAction->setCreateProcessor($productTextCreateProcessor);
251
        $productTextAction->setUpdateProcessor($productTextUpdateProcessor);
252
253
        // initialize the action that provides product varchar attribute CRUD functionality
254
        $productVarcharCreateProcessor = new ProductVarcharCreateProcessor();
255
        $productVarcharCreateProcessor->setUtilityClassName($utilityClassName);
256
        $productVarcharCreateProcessor->setConnection($connection);
257
        $productVarcharCreateProcessor->init();
258
        $productVarcharUpdateProcessor = new ProductVarcharUpdateProcessor();
259
        $productVarcharUpdateProcessor->setUtilityClassName($utilityClassName);
260
        $productVarcharUpdateProcessor->setConnection($connection);
261
        $productVarcharUpdateProcessor->init();
262
        $productVarcharAction = new ProductVarcharAction();
263
        $productVarcharAction->setCreateProcessor($productVarcharCreateProcessor);
264
        $productVarcharAction->setUpdateProcessor($productVarcharUpdateProcessor);
265
266
        // initialize the action that provides product CRUD functionality
267
        $productCreateProcessor = new ProductCreateProcessor();
268
        $productCreateProcessor->setUtilityClassName($utilityClassName);
269
        $productCreateProcessor->setConnection($connection);
270
        $productCreateProcessor->init();
271
        $productDeleteProcessor = new ProductDeleteProcessor();
272
        $productDeleteProcessor->setUtilityClassName($utilityClassName);
273
        $productDeleteProcessor->setConnection($connection);
274
        $productDeleteProcessor->init();
275
        $productUpdateProcessor = new ProductUpdateProcessor();
276
        $productUpdateProcessor->setUtilityClassName($utilityClassName);
277
        $productUpdateProcessor->setConnection($connection);
278
        $productUpdateProcessor->init();
279
        $productAction = new ProductAction();
280
        $productAction->setCreateProcessor($productCreateProcessor);
281
        $productAction->setDeleteProcessor($productDeleteProcessor);
282
        $productAction->setUpdateProcessor($productUpdateProcessor);
283
284
        // initialize the action that provides provides product website CRUD functionality
285
        $productWebsiteCreateProcessor = new ProductWebsiteCreateProcessor();
286
        $productWebsiteCreateProcessor->setUtilityClassName($utilityClassName);
287
        $productWebsiteCreateProcessor->setConnection($connection);
288
        $productWebsiteCreateProcessor->init();
289
        $productWebsiteDeleteProcessor = new ProductWebsiteDeleteProcessor();
290
        $productWebsiteDeleteProcessor->setUtilityClassName($utilityClassName);
291
        $productWebsiteDeleteProcessor->setConnection($connection);
292
        $productWebsiteDeleteProcessor->init();
293
        $productWebsiteAction = new ProductWebsiteAction();
294
        $productWebsiteAction->setCreateProcessor($productWebsiteCreateProcessor);
295
        $productWebsiteAction->setDeleteProcessor($productWebsiteDeleteProcessor);
296
297
        // initialize the action that provides stock item CRUD functionality
298
        $stockItemCreateProcessor = new StockItemCreateProcessor();
299
        $stockItemCreateProcessor->setUtilityClassName($utilityClassName);
300
        $stockItemCreateProcessor->setConnection($connection);
301
        $stockItemCreateProcessor->init();
302
        $stockItemDeleteProcessor = new StockItemDeleteProcessor();
303
        $stockItemDeleteProcessor->setUtilityClassName($utilityClassName);
304
        $stockItemDeleteProcessor->setConnection($connection);
305
        $stockItemDeleteProcessor->init();
306
        $stockItemUpdateProcessor = new StockItemUpdateProcessor();
307
        $stockItemUpdateProcessor->setUtilityClassName($utilityClassName);
308
        $stockItemUpdateProcessor->setConnection($connection);
309
        $stockItemUpdateProcessor->init();
310
        $stockItemAction = new StockItemAction();
311
        $stockItemAction->setCreateProcessor($stockItemCreateProcessor);
312
        $stockItemAction->setDeleteProcessor($stockItemDeleteProcessor);
313
        $stockItemAction->setUpdateProcessor($stockItemUpdateProcessor);
314
315
        // initialize the action that provides stock status CRUD functionality
316
        $stockStatusCreateProcessor = new StockStatusCreateProcessor();
317
        $stockStatusCreateProcessor->setUtilityClassName($utilityClassName);
318
        $stockStatusCreateProcessor->setConnection($connection);
319
        $stockStatusCreateProcessor->init();
320
        $stockStatusDeleteProcessor = new StockStatusDeleteProcessor();
321
        $stockStatusDeleteProcessor->setUtilityClassName($utilityClassName);
322
        $stockStatusDeleteProcessor->setConnection($connection);
323
        $stockStatusDeleteProcessor->init();
324
        $stockStatusUpdateProcessor = new StockStatusUpdateProcessor();
325
        $stockStatusUpdateProcessor->setUtilityClassName($utilityClassName);
326
        $stockStatusUpdateProcessor->setConnection($connection);
327
        $stockStatusUpdateProcessor->init();
328
        $stockStatusAction = new StockStatusAction();
329
        $stockStatusAction->setCreateProcessor($stockStatusCreateProcessor);
330
        $stockStatusAction->setDeleteProcessor($stockStatusDeleteProcessor);
331
        $stockStatusAction->setUpdateProcessor($stockStatusUpdateProcessor);
332
333
        // initialize the action that provides URL rewrite CRUD functionality
334
        $urlRewriteCreateProcessor = new UrlRewriteCreateProcessor();
335
        $urlRewriteCreateProcessor->setUtilityClassName($utilityClassName);
336
        $urlRewriteCreateProcessor->setConnection($connection);
337
        $urlRewriteCreateProcessor->init();
338
        $urlRewriteDeleteProcessor = new UrlRewriteDeleteProcessor();
339
        $urlRewriteDeleteProcessor->setUtilityClassName($utilityClassName);
340
        $urlRewriteDeleteProcessor->setConnection($connection);
341
        $urlRewriteDeleteProcessor->init();
342
        $urlRewriteUpdateProcessor = new UrlRewriteUpdateProcessor();
343
        $urlRewriteUpdateProcessor->setUtilityClassName($utilityClassName);
344
        $urlRewriteUpdateProcessor->setConnection($connection);
345
        $urlRewriteUpdateProcessor->init();
346
        $urlRewriteAction = new UrlRewriteAction();
347
        $urlRewriteAction->setCreateProcessor($urlRewriteCreateProcessor);
348
        $urlRewriteAction->setDeleteProcessor($urlRewriteDeleteProcessor);
349
        $urlRewriteAction->setUpdateProcessor($urlRewriteUpdateProcessor);
350
351
        // initialize the product processor
352
        $processorType = static::getProcessorType();
353
        $productBunchProcessor = new $processorType();
354
        $productBunchProcessor->setConnection($connection);
355
        $productBunchProcessor->setProductRepository($productRepository);
356
        $productBunchProcessor->setProductWebsiteRepository($productWebsiteRepository);
357
        $productBunchProcessor->setProductDatetimeRepository($productDatetimeRepository);
358
        $productBunchProcessor->setProductDecimalRepository($productDecimalRepository);
359
        $productBunchProcessor->setProductIntRepository($productIntRepository);
360
        $productBunchProcessor->setProductTextRepository($productTextRepository);
361
        $productBunchProcessor->setProductVarcharRepository($productVarcharRepository);
362
        $productBunchProcessor->setCategoryProductRepository($categoryProductRepository);
363
        $productBunchProcessor->setStockStatusRepository($stockStatusRepository);
364
        $productBunchProcessor->setStockItemRepository($stockItemRepository);
365
        $productBunchProcessor->setUrlRewriteRepository($urlRewriteRepository);
366
        $productBunchProcessor->setEavAttributeOptionValueRepository($eavAttributeOptionValueRepository);
367
        $productBunchProcessor->setCategoryProductAction($categoryProductAction);
368
        $productBunchProcessor->setProductDatetimeAction($productDatetimeAction);
369
        $productBunchProcessor->setProductDecimalAction($productDecimalAction);
370
        $productBunchProcessor->setProductIntAction($productIntAction);
371
        $productBunchProcessor->setProductAction($productAction);
372
        $productBunchProcessor->setProductTextAction($productTextAction);
373
        $productBunchProcessor->setProductVarcharAction($productVarcharAction);
374
        $productBunchProcessor->setProductWebsiteAction($productWebsiteAction);
375
        $productBunchProcessor->setStockItemAction($stockItemAction);
376
        $productBunchProcessor->setStockStatusAction($stockStatusAction);
377
        $productBunchProcessor->setUrlRewriteAction($urlRewriteAction);
378
379
        // return the instance
380
        return $productBunchProcessor;
381
    }
382
}
383