Skip to content

Commit 8599357

Browse files
author
Paliarush, Alexander(apaliarush)
committed
Merge pull request #367 from magento-api/MAGETWO-36000-Join-Processors
[API] Sprint50 Join Processors
2 parents 6b5e713 + ad2bf72 commit 8599357

File tree

86 files changed

+2410
-772
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+2410
-772
lines changed

app/code/Magento/Backend/Helper/Dashboard/Data.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
class Data extends \Magento\Framework\App\Helper\AbstractHelper
1515
{
1616
/**
17-
* @var \MagentoFrameworkDataCollectionAbstractDb
17+
* @var \Magento\Framework\Data\Collection\AbstractDb
1818
*/
1919
protected $_stores;
2020

@@ -48,7 +48,7 @@ public function __construct(
4848
/**
4949
* Retrieve stores configured in system.
5050
*
51-
* @return \MagentoFrameworkDataCollectionAbstractDb
51+
* @return \Magento\Framework\Data\Collection\AbstractDb
5252
*/
5353
public function getStores()
5454
{

app/code/Magento/Bundle/Model/Product/OptionList.php

+10-1
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,30 @@ class OptionList
2828
*/
2929
protected $dataObjectHelper;
3030

31+
/**
32+
* @var \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface
33+
*/
34+
protected $extensionAttributesJoinProcessor;
35+
3136
/**
3237
* @param Type $type
3338
* @param \Magento\Bundle\Api\Data\OptionInterfaceFactory $optionFactory
3439
* @param LinksList $linkList
3540
* @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
41+
* @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
3642
*/
3743
public function __construct(
3844
\Magento\Bundle\Model\Product\Type $type,
3945
\Magento\Bundle\Api\Data\OptionInterfaceFactory $optionFactory,
4046
\Magento\Bundle\Model\Product\LinksList $linkList,
41-
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper
47+
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
48+
\Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
4249
) {
4350
$this->type = $type;
4451
$this->optionFactory = $optionFactory;
4552
$this->linkList = $linkList;
4653
$this->dataObjectHelper = $dataObjectHelper;
54+
$this->extensionAttributesJoinProcessor = $extensionAttributesJoinProcessor;
4755
}
4856

4957
/**
@@ -53,6 +61,7 @@ public function __construct(
5361
public function getItems(\Magento\Catalog\Api\Data\ProductInterface $product)
5462
{
5563
$optionCollection = $this->type->getOptionsCollection($product);
64+
$this->extensionAttributesJoinProcessor->process($optionCollection);
5665
$optionList = [];
5766
/** @var \Magento\Bundle\Model\Option $option */
5867
foreach ($optionCollection as $option) {

app/code/Magento/Bundle/Test/Unit/Model/Product/OptionListTest.php

+30-10
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ class OptionListTest extends \PHPUnit_Framework_TestCase
3333
*/
3434
protected $dataObjectHelperMock;
3535

36+
/**
37+
* @var \PHPUnit_Framework_MockObject_MockObject
38+
*/
39+
protected $extensionAttributesFactoryMock;
40+
41+
/**
42+
* @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
43+
*/
44+
protected $objectManager;
45+
3646
protected function setUp()
3747
{
3848
$this->typeMock = $this->getMock('\Magento\Bundle\Model\Product\Type', [], [], '', false);
@@ -43,15 +53,26 @@ protected function setUp()
4353
'',
4454
false
4555
);
46-
$this->dataObjectHelperMock = $this->getMockBuilder('\Magento\Framework\Api\DataObjectHelper')
47-
->disableOriginalConstructor()
48-
->getMock();
56+
$this->dataObjectHelperMock = $this->getMock('\Magento\Framework\Api\DataObjectHelper', [], [], '', false);
4957
$this->linkListMock = $this->getMock('\Magento\Bundle\Model\Product\LinksList', [], [], '', false);
50-
$this->model = new \Magento\Bundle\Model\Product\OptionList(
51-
$this->typeMock,
52-
$this->optionFactoryMock,
53-
$this->linkListMock,
54-
$this->dataObjectHelperMock
58+
$this->extensionAttributesFactoryMock = $this->getMock(
59+
'\Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface',
60+
[],
61+
[],
62+
'',
63+
false
64+
);
65+
66+
$this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
67+
$this->model = $this->objectManager->getObject(
68+
'Magento\Bundle\Model\Product\OptionList',
69+
[
70+
'type' => $this->typeMock,
71+
'optionFactory' => $this->optionFactoryMock,
72+
'linkList' => $this->linkListMock,
73+
'dataObjectHelper' => $this->dataObjectHelperMock,
74+
'extensionAttributesJoinProcessor' => $this->extensionAttributesFactoryMock
75+
]
5576
);
5677
}
5778

@@ -71,8 +92,7 @@ public function testGetItems()
7192
'',
7293
false
7394
);
74-
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
75-
$optionsCollMock = $objectManager->getCollectionMock(
95+
$optionsCollMock = $this->objectManager->getCollectionMock(
7696
'Magento\Bundle\Model\Resource\Option\Collection',
7797
[$optionMock]
7898
);

app/code/Magento/Catalog/Api/Data/ProductCustomOptionInterface.php

+18-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/**
1010
* @api
1111
*/
12-
interface ProductCustomOptionInterface
12+
interface ProductCustomOptionInterface extends \Magento\Framework\Api\ExtensibleDataInterface
1313
{
1414
/**
1515
* Get product SKU
@@ -201,4 +201,21 @@ public function getValues();
201201
* @return $this
202202
*/
203203
public function setValues(array $values = null);
204+
205+
/**
206+
* Retrieve existing extension attributes object or create a new one.
207+
*
208+
* @return \Magento\Catalog\Api\Data\ProductCustomOptionExtensionInterface|null
209+
*/
210+
public function getExtensionAttributes();
211+
212+
/**
213+
* Set an extension attributes object.
214+
*
215+
* @param \Magento\Catalog\Api\Data\ProductCustomOptionExtensionInterface $extensionAttributes
216+
* @return $this
217+
*/
218+
public function setExtensionAttributes(
219+
\Magento\Catalog\Api\Data\ProductCustomOptionExtensionInterface $extensionAttributes
220+
);
204221
}

app/code/Magento/Catalog/Model/Product.php

+11-1
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,11 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
317317
'group_price',
318318
];
319319

320+
/**
321+
* @var \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface
322+
*/
323+
protected $joinProcessor;
324+
320325
/**
321326
* @param \Magento\Framework\Model\Context $context
322327
* @param \Magento\Framework\Registry $registry
@@ -351,6 +356,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
351356
* @param \Magento\Catalog\Api\Data\ProductLinkExtensionFactory $productLinkExtensionFactory
352357
* @param \Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterfaceFactory $mediaGalleryEntryFactory
353358
* @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
359+
* @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
354360
* @param array $data
355361
*
356362
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -389,6 +395,7 @@ public function __construct(
389395
\Magento\Catalog\Api\Data\ProductLinkExtensionFactory $productLinkExtensionFactory,
390396
\Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterfaceFactory $mediaGalleryEntryFactory,
391397
\Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
398+
\Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor,
392399
array $data = []
393400
) {
394401
$this->metadataService = $metadataService;
@@ -417,6 +424,7 @@ public function __construct(
417424
$this->productLinkExtensionFactory = $productLinkExtensionFactory;
418425
$this->mediaGalleryEntryFactory = $mediaGalleryEntryFactory;
419426
$this->dataObjectHelper = $dataObjectHelper;
427+
$this->joinProcessor = $joinProcessor;
420428
parent::__construct(
421429
$context,
422430
$registry,
@@ -1961,7 +1969,9 @@ public function getOptionById($optionId)
19611969
public function getOptions()
19621970
{
19631971
if (empty($this->_options) && $this->getHasOptions() && !$this->optionsInitialized) {
1964-
foreach ($this->getProductOptionsCollection() as $option) {
1972+
$collection = $this->getProductOptionsCollection();
1973+
$this->joinProcessor->process($collection);
1974+
foreach ($collection as $option) {
19651975
$option->setProduct($this);
19661976
$this->addOption($option);
19671977
}

app/code/Magento/Catalog/Model/Product/Option.php

+31-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
use Magento\Catalog\Model\Product;
1313
use Magento\Catalog\Model\Resource\Product\Option\Value\Collection;
1414
use Magento\Catalog\Pricing\Price\BasePrice;
15-
use Magento\Framework\Model\AbstractModel;
1615
use Magento\Framework\Exception\LocalizedException;
1716

1817
/**
@@ -26,7 +25,8 @@
2625
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2726
* @SuppressWarnings(PHPMD.ExcessivePublicCount)
2827
*/
29-
class Option extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCustomOptionInterface
28+
class Option extends \Magento\Framework\Model\AbstractExtensibleModel
29+
implements \Magento\Catalog\Api\Data\ProductCustomOptionInterface
3030
{
3131
const OPTION_GROUP_TEXT = 'text';
3232

@@ -116,6 +116,8 @@ class Option extends AbstractModel implements \Magento\Catalog\Api\Data\ProductC
116116
/**
117117
* @param \Magento\Framework\Model\Context $context
118118
* @param \Magento\Framework\Registry $registry
119+
* @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
120+
* @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
119121
* @param Option\Value $productOptionValue
120122
* @param Option\Type\Factory $optionFactory
121123
* @param \Magento\Framework\Stdlib\String $string
@@ -128,6 +130,8 @@ class Option extends AbstractModel implements \Magento\Catalog\Api\Data\ProductC
128130
public function __construct(
129131
\Magento\Framework\Model\Context $context,
130132
\Magento\Framework\Registry $registry,
133+
\Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
134+
\Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
131135
Option\Value $productOptionValue,
132136
\Magento\Catalog\Model\Product\Option\Type\Factory $optionFactory,
133137
\Magento\Framework\Stdlib\String $string,
@@ -143,6 +147,8 @@ public function __construct(
143147
parent::__construct(
144148
$context,
145149
$registry,
150+
$extensionFactory,
151+
$customAttributeFactory,
146152
$resource,
147153
$resourceCollection,
148154
$data
@@ -406,7 +412,7 @@ public function saveOptions()
406412
}
407413

408414
/**
409-
* @return AbstractModel
415+
* @return \Magento\Framework\Model\AbstractModel
410416
* @throws \Magento\Framework\Exception\LocalizedException
411417
*/
412418
public function afterSave()
@@ -845,5 +851,27 @@ public function setValues(array $values = null)
845851
$this->_values = $values;
846852
return $this;
847853
}
854+
855+
/**
856+
* {@inheritdoc}
857+
*
858+
* @return \Magento\Catalog\Api\Data\ProductCustomOptionExtensionInterface|null
859+
*/
860+
public function getExtensionAttributes()
861+
{
862+
return $this->_getExtensionAttributes();
863+
}
864+
865+
/**
866+
* {@inheritdoc}
867+
*
868+
* @param \Magento\Catalog\Api\Data\ProductCustomOptionExtensionInterface $extensionAttributes
869+
* @return $this
870+
*/
871+
public function setExtensionAttributes(
872+
\Magento\Catalog\Api\Data\ProductCustomOptionExtensionInterface $extensionAttributes
873+
) {
874+
return $this->_setExtensionAttributes($extensionAttributes);
875+
}
848876
//@codeCoverageIgnoreEnd
849877
}

app/code/Magento/Catalog/Model/ProductRepository.php

+11-13
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use Magento\Catalog\Model\Resource\Product\Collection;
1212
use Magento\Framework\Api\Data\ImageContentInterface;
1313
use Magento\Framework\Api\Data\ImageContentInterfaceFactory;
14-
use Magento\Framework\Api\ExtensionAttributesFactory;
1514
use Magento\Framework\Api\ImageContentValidatorInterface;
1615
use Magento\Framework\Api\ImageProcessorInterface;
1716
use Magento\Framework\Api\SearchCriteriaInterface;
@@ -137,9 +136,9 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
137136
protected $imageProcessor;
138137

139138
/**
140-
* @var ExtensionAttributesFactory
139+
* @var \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface
141140
*/
142-
protected $extensionAttributesFactory;
141+
protected $extensionAttributesJoinProcessor;
143142

144143
/**
145144
* @param ProductFactory $productFactory
@@ -149,20 +148,20 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
149148
* @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
150149
* @param \Magento\Catalog\Api\ProductAttributeRepositoryInterface $attributeRepository
151150
* @param Resource\Product $resourceModel
152-
* @param \Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks $linkInitializer
153-
* @param \Magento\Catalog\Model\Product\LinkTypeProvider $linkTypeProvider
154-
* @param \Magento\Store\Model\StoreManagerInterface $storeManager ,
151+
* @param Product\Initialization\Helper\ProductLinks $linkInitializer
152+
* @param Product\LinkTypeProvider $linkTypeProvider
153+
* @param \Magento\Store\Model\StoreManagerInterface $storeManager
155154
* @param \Magento\Framework\Api\FilterBuilder $filterBuilder
156155
* @param \Magento\Catalog\Api\ProductAttributeRepositoryInterface $metadataServiceInterface
157156
* @param \Magento\Framework\Api\ExtensibleDataObjectConverter $extensibleDataObjectConverter
158-
* @param \Magento\Eav\Model\Config $eavConfig
159-
* @param \Magento\Catalog\Model\Product\Option\Converter $optionConverter
157+
* @param Product\Option\Converter $optionConverter
160158
* @param \Magento\Framework\Filesystem $fileSystem
161159
* @param ImageContentValidatorInterface $contentValidator
162160
* @param ImageContentInterfaceFactory $contentFactory
163161
* @param MimeTypeExtensionMap $mimeTypeExtensionMap
162+
* @param \Magento\Eav\Model\Config $eavConfig
164163
* @param ImageProcessorInterface $imageProcessor
165-
* @param ExtensionAttributesFactory $extensionAttributesFactory
164+
* @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
166165
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
167166
*/
168167
public function __construct(
@@ -186,7 +185,7 @@ public function __construct(
186185
MimeTypeExtensionMap $mimeTypeExtensionMap,
187186
\Magento\Eav\Model\Config $eavConfig,
188187
ImageProcessorInterface $imageProcessor,
189-
ExtensionAttributesFactory $extensionAttributesFactory
188+
\Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
190189
) {
191190
$this->productFactory = $productFactory;
192191
$this->collectionFactory = $collectionFactory;
@@ -208,7 +207,7 @@ public function __construct(
208207
$this->mimeTypeExtensionMap = $mimeTypeExtensionMap;
209208
$this->eavConfig = $eavConfig;
210209
$this->imageProcessor = $imageProcessor;
211-
$this->extensionAttributesFactory = $extensionAttributesFactory;
210+
$this->extensionAttributesJoinProcessor = $extensionAttributesJoinProcessor;
212211
}
213212

214213
/**
@@ -649,6 +648,7 @@ public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCr
649648
{
650649
/** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
651650
$collection = $this->collectionFactory->create();
651+
$this->extensionAttributesJoinProcessor->process($collection);
652652
$defaultAttributeSetId = $this->eavConfig
653653
->getEntityType(\Magento\Catalog\Api\Data\ProductAttributeInterface::ENTITY_TYPE_CODE)
654654
->getDefaultAttributeSetId();
@@ -681,8 +681,6 @@ public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCr
681681
}
682682
$collection->setCurPage($searchCriteria->getCurrentPage());
683683
$collection->setPageSize($searchCriteria->getPageSize());
684-
$productDataClass = 'Magento\Catalog\Model\Product';
685-
$this->extensionAttributesFactory->process($collection, $productDataClass);
686684
$collection->load();
687685

688686
$searchResult = $this->searchResultsFactory->create();

0 commit comments

Comments
 (0)