Skip to content

Commit 5d17951

Browse files
author
Alex Paliarush
committed
MAGETWO-83859: EAV metadata service and Attribute type resolver
1 parent ec81bc3 commit 5d17951

File tree

38 files changed

+1323
-578
lines changed

38 files changed

+1323
-578
lines changed

app/code/Magento/Catalog/etc/di.xml

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -672,15 +672,21 @@
672672
</argument>
673673
</arguments>
674674
</type>
675-
<type name="Magento\Eav\Model\EavCustomAttributeTypeLocator">
676-
<arguments>
677-
<argument name="serviceEntityTypeMap" xsi:type="array">
675+
<type name="Magento\Framework\Webapi\ServiceInputProcessor">
676+
<arguments>
677+
<argument name="dataInterfaceToEntityTypeMap" xsi:type="array">
678678
<item name="Magento\Catalog\Api\Data\ProductInterface" xsi:type="const">Magento\Catalog\Api\Data\ProductAttributeInterface::ENTITY_TYPE_CODE</item>
679+
<item name="Magento\Catalog\Api\Data\CategoryInterface" xsi:type="const">Magento\Catalog\Api\Data\CategoryAttributeInterface::ENTITY_TYPE_CODE</item>
679680
</argument>
680-
<argument name="serviceBackendModelDataInterfaceMap" xsi:type="array">
681-
<item name="Magento\Catalog\Api\Data\ProductInterface" xsi:type="array">
682-
<item name="Magento\Catalog\Model\Product\Attribute\Backend\Media" xsi:type="string">Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterface</item>
683-
</item>
681+
</arguments>
682+
</type>
683+
<type name="Magento\Eav\Model\TypeLocator\ComplexType">
684+
<arguments>
685+
<argument name="backendModelToAttributeTypeMap" xsi:type="array">
686+
<item name="Magento\Catalog\Model\Product\Attribute\Backend\Sku" xsi:type="string">string</item>
687+
<item name="Magento\Catalog\Model\Product\Attribute\Backend\Category" xsi:type="string">int[]</item>
688+
<item name="Magento\Catalog\Model\Product\Attribute\Backend\Stock" xsi:type="string">Magento\CatalogInventory\Api\Data\StockItemInterface[]</item>
689+
<item name="Magento\Catalog\Model\Category\Attribute\Backend\Sortby" xsi:type="string">Magento\Eav\Api\Data\AttributeOptionInterface</item>
684690
</argument>
685691
</arguments>
686692
</type>

app/code/Magento/Customer/etc/di.xml

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,28 @@
145145
</type>
146146
<preference for="Magento\Customer\CustomerData\JsLayoutDataProviderPoolInterface"
147147
type="Magento\Customer\CustomerData\JsLayoutDataProviderPool"/>
148-
<type name="Magento\Eav\Model\EavCustomAttributeTypeLocator">
148+
<type name="Magento\Framework\Webapi\ServiceInputProcessor">
149149
<arguments>
150-
<argument name="serviceEntityTypeMap" xsi:type="array">
150+
<argument name="dataInterfaceToEntityTypeMap" xsi:type="array">
151151
<item name="Magento\Customer\Api\Data\CustomerInterface" xsi:type="const">Magento\Customer\Api\CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER</item>
152+
<item name="Magento\Customer\Api\Data\AddressInterface" xsi:type="const">Magento\Customer\Api\AddressMetadataInterface::ENTITY_TYPE_ADDRESS</item>
152153
</argument>
153-
<argument name="serviceBackendModelDataInterfaceMap" xsi:type="array">
154+
</arguments>
155+
</type>
156+
<type name="Magento\Eav\Model\TypeLocator\ComplexType">
157+
<arguments>
158+
<argument name="backendModelToAttributeTypeMap" xsi:type="array">
154159
<item name="Magento\Customer\Api\Data\CustomerInterface" xsi:type="array">
155160
<item name="Magento\Eav\Model\Attribute\Data\Image" xsi:type="string">Magento\Framework\Api\Data\ImageContentInterface</item>
156161
</item>
162+
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Website" xsi:type="string">int</item>
163+
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Store" xsi:type="string">int</item>
164+
<item name="Magento\Customer\Model\Attribute\Backend\Data\Boolean" xsi:type="string">boolean</item>
165+
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Password" xsi:type="string">string</item>
166+
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Billing" xsi:type="string">Magento\Customer\Api\Data\AddressInterface</item>
167+
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Shipping" xsi:type="string">Magento\Customer\Api\Data\AddressInterface</item>
168+
<item name="Magento\Eav\Model\Entity\Attribute\Backend\Datetime" xsi:type="string">string</item>
169+
<item name="Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region" xsi:type="string">Magento\Customer\Api\Data\RegionInterface</item>
157170
</argument>
158171
</arguments>
159172
</type>

app/code/Magento/Eav/Model/EavCustomAttributeTypeLocator.php

Lines changed: 0 additions & 152 deletions
This file was deleted.

app/code/Magento/Eav/Model/EavCustomAttributeTypeLocator/ComplexType.php

Lines changed: 0 additions & 57 deletions
This file was deleted.

app/code/Magento/Eav/Model/EavCustomAttributeTypeLocator/SimpleType.php

Lines changed: 0 additions & 50 deletions
This file was deleted.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
namespace Magento\Eav\Model;
8+
9+
use Magento\Framework\Reflection\TypeProcessor;
10+
use Magento\Framework\Webapi\CustomAttribute\TypeLocatorInterface;
11+
12+
/**
13+
* Class to locate types for Eav custom attributes
14+
*/
15+
class TypeLocator implements TypeLocatorInterface
16+
{
17+
/**
18+
* @var \Magento\Framework\Webapi\CustomAttribute\TypeLocatorInterface[]
19+
*/
20+
private $typeLocators;
21+
22+
/**
23+
* Initialize CustomAttributeTypeLocator
24+
*
25+
* @param \Magento\Framework\Webapi\CustomAttribute\TypeLocatorInterface[] $typeLocators
26+
*/
27+
public function __construct(
28+
array $typeLocators = []
29+
) {
30+
$this->typeLocators = $typeLocators;
31+
}
32+
33+
/**
34+
* {@inheritdoc}
35+
*/
36+
public function getType($attributeCode, $entityType)
37+
{
38+
foreach ($this->typeLocators as $typeLocator) {
39+
$type = $typeLocator->getType($attributeCode, $entityType);
40+
if ($type !== TypeProcessor::NORMALIZED_ANY_TYPE) {
41+
return $type;
42+
}
43+
}
44+
45+
return TypeProcessor::NORMALIZED_ANY_TYPE;
46+
}
47+
}

0 commit comments

Comments
 (0)