Completed
Push — master ( 0766c8...bb8d70 )
by Tim
02:36
created

ProductBunchProcessorFactory   C

Complexity

Total Complexity 2

Size/Duplication

Total Lines 179
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 31

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
c 1
b 0
f 0
lcom 0
cbo 31
dl 0
loc 179
ccs 0
cts 129
cp 0
rs 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getProcessorType() 0 4 1
B factory() 0 157 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\Repositories\EavAttributeOptionValueRepository;
25
use TechDivision\Import\Product\Actions\ProductAction;
26
use TechDivision\Import\Product\Actions\ProductCategoryAction;
27
use TechDivision\Import\Product\Actions\StockItemAction;
28
use TechDivision\Import\Product\Actions\StockStatusAction;
29
use TechDivision\Import\Product\Actions\ProductWebsiteAction;
30
use TechDivision\Import\Product\Actions\ProductVarcharAction;
31
use TechDivision\Import\Product\Actions\ProductTextAction;
32
use TechDivision\Import\Product\Actions\ProductIntAction;
33
use TechDivision\Import\Product\Actions\ProductDecimalAction;
34
use TechDivision\Import\Product\Actions\ProductDatetimeAction;
35
use TechDivision\Import\Product\Actions\Processors\ProductRemoveProcessor;
36
use TechDivision\Import\Product\Actions\Processors\ProductPersistProcessor;
37
use TechDivision\Import\Product\Actions\Processors\ProductCategoryRemoveProcessor;
38
use TechDivision\Import\Product\Actions\Processors\ProductCategoryPersistProcessor;
39
use TechDivision\Import\Product\Actions\Processors\ProductDatetimePersistProcessor;
40
use TechDivision\Import\Product\Actions\Processors\ProductDecimalPersistProcessor;
41
use TechDivision\Import\Product\Actions\Processors\ProductIntPersistProcessor;
42
use TechDivision\Import\Product\Actions\Processors\ProductTextPersistProcessor;
43
use TechDivision\Import\Product\Actions\Processors\ProductVarcharPersistProcessor;
44
use TechDivision\Import\Product\Actions\Processors\ProductWebsiteRemoveProcessor;
45
use TechDivision\Import\Product\Actions\Processors\ProductWebsitePersistProcessor;
46
use TechDivision\Import\Product\Actions\Processors\StockItemRemoveProcessor;
47
use TechDivision\Import\Product\Actions\Processors\StockItemPersistProcessor;
48
use TechDivision\Import\Product\Actions\Processors\StockStatusRemoveProcessor;
49
use TechDivision\Import\Product\Actions\Processors\StockStatusPersistProcessor;
50
use TechDivision\Import\Product\Repositories\UrlRewriteRepository;
51
use TechDivision\Import\Product\Actions\UrlRewriteAction;
52
use TechDivision\Import\Product\Actions\Processors\UrlRewritePersistProcessor;
53
use TechDivision\Import\Product\Actions\Processors\UrlRewriteRemoveProcessor;
54
55
/**
56
 * Factory to create a new product bunch processor.
57
 *
58
 * @author    Tim Wagner <[email protected]>
59
 * @copyright 2016 TechDivision GmbH <[email protected]>
60
 * @license   http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
61
 * @link      https://github.com/techdivision/import-cli-simple
62
 * @link      http://www.techdivision.com
63
 */
64
class ProductBunchProcessorFactory extends AbstractProductProcessorFactory
65
{
66
67
    /**
68
     * Return's the processor class name.
69
     *
70
     * @return string The processor class name
71
     */
72
    protected static function getProcessorType()
73
    {
74
        return 'TechDivision\Import\Product\Services\ProductBunchProcessor';
75
    }
76
77
    /**
78
     * Factory method to create a new product processor instance.
79
     *
80
     * @param \PDO                                               $connection    The PDO connection to use
81
     * @param TechDivision\Import\Configuration\SubjectInterface $configuration The subject configuration
82
     *
83
     * @return \TechDivision\Import\Product\Services\ProductProcessor The processor instance
84
     */
85
    public static function factory(\PDO $connection, SubjectInterface $configuration)
86
    {
87
88
        // load the utility class name
89
        $utilityClassName = $configuration->getUtilityClassName();
90
91
        // initialize the repository that provides EAV attribute option value query functionality
92
        $eavAttributeOptionValueRepository = new EavAttributeOptionValueRepository();
93
        $eavAttributeOptionValueRepository->setUtilityClassName($utilityClassName);
94
        $eavAttributeOptionValueRepository->setConnection($connection);
95
        $eavAttributeOptionValueRepository->init();
96
97
        // initialize the repository that provides URL rewrite query functionality
98
        $urlRewriteRepository = new UrlRewriteRepository();
99
        $urlRewriteRepository->setUtilityClassName($utilityClassName);
100
        $urlRewriteRepository->setConnection($connection);
101
        $urlRewriteRepository->init();
102
103
        // initialize the action that provides product category CRUD functionality
104
        $productCategoryPersistProcessor = new ProductCategoryPersistProcessor();
105
        $productCategoryPersistProcessor->setUtilityClassName($utilityClassName);
106
        $productCategoryPersistProcessor->setConnection($connection);
107
        $productCategoryPersistProcessor->init();
108
        $productCategoryRemoveProcessor = new ProductCategoryRemoveProcessor();
109
        $productCategoryRemoveProcessor->setUtilityClassName($utilityClassName);
110
        $productCategoryRemoveProcessor->setConnection($connection);
111
        $productCategoryRemoveProcessor->init();
112
        $productCategoryAction = new ProductCategoryAction();
113
        $productCategoryAction->setPersistProcessor($productCategoryPersistProcessor);
114
        $productCategoryAction->setRemoveProcessor($productCategoryRemoveProcessor);
115
116
        // initialize the action that provides product datetime attribute CRUD functionality
117
        $productDatetimePersistProcessor = new ProductDatetimePersistProcessor();
118
        $productDatetimePersistProcessor->setUtilityClassName($utilityClassName);
119
        $productDatetimePersistProcessor->setConnection($connection);
120
        $productDatetimePersistProcessor->init();
121
        $productDatetimeAction = new ProductDatetimeAction();
122
        $productDatetimeAction->setPersistProcessor($productDatetimePersistProcessor);
123
124
        // initialize the action that provides product decimal attribute CRUD functionality
125
        $productDecimalPersistProcessor = new ProductDecimalPersistProcessor();
126
        $productDecimalPersistProcessor->setUtilityClassName($utilityClassName);
127
        $productDecimalPersistProcessor->setConnection($connection);
128
        $productDecimalPersistProcessor->init();
129
        $productDecimalAction = new ProductDecimalAction();
130
        $productDecimalAction->setPersistProcessor($productDecimalPersistProcessor);
131
132
        // initialize the action that provides product integer attribute CRUD functionality
133
        $productIntPersistProcessor = new ProductIntPersistProcessor();
134
        $productIntPersistProcessor->setUtilityClassName($utilityClassName);
135
        $productIntPersistProcessor->setConnection($connection);
136
        $productIntPersistProcessor->init();
137
        $productIntAction = new ProductIntAction();
138
        $productIntAction->setPersistProcessor($productIntPersistProcessor);
139
140
        // initialize the action that provides product CRUD functionality
141
        $productPersistProcessor = new ProductPersistProcessor();
142
        $productPersistProcessor->setUtilityClassName($utilityClassName);
143
        $productPersistProcessor->setConnection($connection);
144
        $productPersistProcessor->init();
145
        $productRemoveProcessor = new ProductRemoveProcessor();
146
        $productRemoveProcessor->setUtilityClassName($utilityClassName);
147
        $productRemoveProcessor->setConnection($connection);
148
        $productRemoveProcessor->init();
149
        $productAction = new ProductAction();
150
        $productAction->setPersistProcessor($productPersistProcessor);
151
        $productAction->setRemoveProcessor($productRemoveProcessor);
152
153
        // initialize the action that provides product text attribute CRUD functionality
154
        $productTextPersistProcessor = new ProductTextPersistProcessor();
155
        $productTextPersistProcessor->setUtilityClassName($utilityClassName);
156
        $productTextPersistProcessor->setConnection($connection);
157
        $productTextPersistProcessor->init();
158
        $productTextAction = new ProductTextAction();
159
        $productTextAction->setPersistProcessor($productTextPersistProcessor);
160
161
        // initialize the action that provides product varchar attribute CRUD functionality
162
        $productVarcharPersistProcessor = new ProductVarcharPersistProcessor();
163
        $productVarcharPersistProcessor->setUtilityClassName($utilityClassName);
164
        $productVarcharPersistProcessor->setConnection($connection);
165
        $productVarcharPersistProcessor->init();
166
        $productVarcharAction = new ProductVarcharAction();
167
        $productVarcharAction->setPersistProcessor($productVarcharPersistProcessor);
168
169
        // initialize the action that provides provides product website CRUD functionality
170
        $productWebsitePersistProcessor = new ProductWebsitePersistProcessor();
171
        $productWebsitePersistProcessor->setUtilityClassName($utilityClassName);
172
        $productWebsitePersistProcessor->setConnection($connection);
173
        $productWebsitePersistProcessor->init();
174
        $productWebsiteRemoveProcessor = new ProductWebsiteRemoveProcessor();
175
        $productWebsiteRemoveProcessor->setUtilityClassName($utilityClassName);
176
        $productWebsiteRemoveProcessor->setConnection($connection);
177
        $productWebsiteRemoveProcessor->init();
178
        $productWebsiteAction = new ProductWebsiteAction();
179
        $productWebsiteAction->setPersistProcessor($productWebsitePersistProcessor);
180
        $productWebsiteAction->setRemoveProcessor($productWebsiteRemoveProcessor);
181
182
        // initialize the action that provides stock item CRUD functionality
183
        $stockItemPersistProcessor = new StockItemPersistProcessor();
184
        $stockItemPersistProcessor->setUtilityClassName($utilityClassName);
185
        $stockItemPersistProcessor->setConnection($connection);
186
        $stockItemPersistProcessor->init();
187
        $stockItemRemoveProcessor = new StockItemRemoveProcessor();
188
        $stockItemRemoveProcessor->setUtilityClassName($utilityClassName);
189
        $stockItemRemoveProcessor->setConnection($connection);
190
        $stockItemRemoveProcessor->init();
191
        $stockItemAction = new StockItemAction();
192
        $stockItemAction->setPersistProcessor($stockItemPersistProcessor);
193
        $stockItemAction->setRemoveProcessor($stockItemRemoveProcessor);
194
195
        // initialize the action that provides stock status CRUD functionality
196
        $stockStatusPersistProcessor = new StockStatusPersistProcessor();
197
        $stockStatusPersistProcessor->setUtilityClassName($utilityClassName);
198
        $stockStatusPersistProcessor->setConnection($connection);
199
        $stockStatusPersistProcessor->init();
200
        $stockStatusRemoveProcessor = new StockItemRemoveProcessor();
201
        $stockStatusRemoveProcessor->setUtilityClassName($utilityClassName);
202
        $stockStatusRemoveProcessor->setConnection($connection);
203
        $stockStatusRemoveProcessor->init();
204
        $stockStatusAction = new StockStatusAction();
205
        $stockStatusAction->setPersistProcessor($stockStatusPersistProcessor);
206
        $stockStatusAction->setRemoveProcessor($stockStatusRemoveProcessor);
207
208
        // initialize the action that provides URL rewrite CRUD functionality
209
        $urlRewritePersistProcessor = new UrlRewritePersistProcessor();
210
        $urlRewritePersistProcessor->setUtilityClassName($utilityClassName);
211
        $urlRewritePersistProcessor->setConnection($connection);
212
        $urlRewritePersistProcessor->init();
213
        $urlRewriteRemoveProcessor = new UrlRewriteRemoveProcessor();
214
        $urlRewriteRemoveProcessor->setUtilityClassName($utilityClassName);
215
        $urlRewriteRemoveProcessor->setConnection($connection);
216
        $urlRewriteRemoveProcessor->init();
217
        $urlRewriteAction = new UrlRewriteAction();
218
        $urlRewriteAction->setPersistProcessor($urlRewritePersistProcessor);
219
        $urlRewriteAction->setRemoveProcessor($urlRewriteRemoveProcessor);
220
221
        // initialize the product processor
222
        $processorType = static::getProcessorType();
223
        $productBunchProcessor = new $processorType();
224
        $productBunchProcessor->setConnection($connection);
225
        $productBunchProcessor->setEavAttributeOptionValueRepository($eavAttributeOptionValueRepository);
226
        $productBunchProcessor->setUrlRewriteRepository($urlRewriteRepository);
227
        $productBunchProcessor->setProductCategoryAction($productCategoryAction);
228
        $productBunchProcessor->setProductDatetimeAction($productDatetimeAction);
229
        $productBunchProcessor->setProductDecimalAction($productDecimalAction);
230
        $productBunchProcessor->setProductIntAction($productIntAction);
231
        $productBunchProcessor->setProductAction($productAction);
232
        $productBunchProcessor->setProductTextAction($productTextAction);
233
        $productBunchProcessor->setProductVarcharAction($productVarcharAction);
234
        $productBunchProcessor->setProductWebsiteAction($productWebsiteAction);
235
        $productBunchProcessor->setStockItemAction($stockItemAction);
236
        $productBunchProcessor->setStockStatusAction($stockStatusAction);
237
        $productBunchProcessor->setUrlRewriteAction($urlRewriteAction);
238
239
        // return the instance
240
        return $productBunchProcessor;
241
    }
242
}
243