Skip to content

Commit 4067591

Browse files
authored
Merge pull request #1779 from magento-honey-badgers/MAGETWO-83859-MetadataService-Attribute-Type-Resolver
[honey] MAGETWO-83859: Metadata service and Attribute type resolver
2 parents 56d88cd + 4510780 commit 4067591

File tree

114 files changed

+3190
-888
lines changed

Some content is hidden

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

114 files changed

+3190
-888
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\ServiceTypeToEntityTypeMap">
676+
<arguments>
677+
<argument name="serviceTypeToEntityTypeMap" 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\ServiceTypeToEntityTypeMap">
149149
<arguments>
150-
<argument name="serviceEntityTypeMap" xsi:type="array">
150+
<argument name="serviceTypeToEntityTypeMap" 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: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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\ServiceTypeListInterface;
11+
use Magento\Framework\Webapi\CustomAttributeTypeLocatorInterface;
12+
13+
/**
14+
* Class to locate types for Eav custom attributes
15+
*/
16+
class TypeLocator implements CustomAttributeTypeLocatorInterface
17+
{
18+
/**
19+
* @var \Magento\Framework\Webapi\CustomAttributeTypeLocatorInterface[]
20+
*/
21+
private $typeLocators;
22+
23+
/**
24+
* @var ServiceTypeListInterface
25+
*/
26+
private $serviceTypeList;
27+
28+
/**
29+
* Initialize TypeLocator
30+
*
31+
* @param ServiceTypeListInterface $serviceTypeList
32+
* @param \Magento\Framework\Webapi\CustomAttributeTypeLocatorInterface[] $typeLocators
33+
*/
34+
public function __construct(
35+
ServiceTypeListInterface $serviceTypeList,
36+
array $typeLocators = []
37+
) {
38+
$this->typeLocators = $typeLocators;
39+
$this->serviceTypeList = $serviceTypeList;
40+
}
41+
42+
/**
43+
* {@inheritdoc}
44+
*/
45+
public function getType($attributeCode, $entityType)
46+
{
47+
foreach ($this->typeLocators as $typeLocator) {
48+
$type = $typeLocator->getType($attributeCode, $entityType);
49+
if ($type !== TypeProcessor::NORMALIZED_ANY_TYPE) {
50+
return $type;
51+
}
52+
}
53+
54+
return TypeProcessor::NORMALIZED_ANY_TYPE;
55+
}
56+
57+
/**
58+
* {@inheritDoc}
59+
*/
60+
public function getAllServiceDataInterfaces()
61+
{
62+
return $this->serviceTypeList->getDataTypes();
63+
}
64+
}

0 commit comments

Comments
 (0)