Skip to content

Commit

Permalink
Merge pull request #1779 from magento-honey-badgers/MAGETWO-83859-Met…
Browse files Browse the repository at this point in the history
…adataService-Attribute-Type-Resolver

[honey] MAGETWO-83859: Metadata service and Attribute type resolver
  • Loading branch information
cpartica committed Dec 2, 2017
2 parents 56d88cd + 4510780 commit 4067591
Show file tree
Hide file tree
Showing 114 changed files with 3,190 additions and 888 deletions.
20 changes: 13 additions & 7 deletions app/code/Magento/Catalog/etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -672,15 +672,21 @@
</argument>
</arguments>
</type>
<type name="Magento\Eav\Model\EavCustomAttributeTypeLocator">
<arguments>
<argument name="serviceEntityTypeMap" xsi:type="array">
<type name="Magento\Framework\Webapi\ServiceTypeToEntityTypeMap">
<arguments>
<argument name="serviceTypeToEntityTypeMap" xsi:type="array">
<item name="Magento\Catalog\Api\Data\ProductInterface" xsi:type="const">Magento\Catalog\Api\Data\ProductAttributeInterface::ENTITY_TYPE_CODE</item>
<item name="Magento\Catalog\Api\Data\CategoryInterface" xsi:type="const">Magento\Catalog\Api\Data\CategoryAttributeInterface::ENTITY_TYPE_CODE</item>
</argument>
<argument name="serviceBackendModelDataInterfaceMap" xsi:type="array">
<item name="Magento\Catalog\Api\Data\ProductInterface" xsi:type="array">
<item name="Magento\Catalog\Model\Product\Attribute\Backend\Media" xsi:type="string">Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterface</item>
</item>
</arguments>
</type>
<type name="Magento\Eav\Model\TypeLocator\ComplexType">
<arguments>
<argument name="backendModelToAttributeTypeMap" xsi:type="array">
<item name="Magento\Catalog\Model\Product\Attribute\Backend\Sku" xsi:type="string">string</item>
<item name="Magento\Catalog\Model\Product\Attribute\Backend\Category" xsi:type="string">int[]</item>
<item name="Magento\Catalog\Model\Product\Attribute\Backend\Stock" xsi:type="string">Magento\CatalogInventory\Api\Data\StockItemInterface[]</item>
<item name="Magento\Catalog\Model\Category\Attribute\Backend\Sortby" xsi:type="string">Magento\Eav\Api\Data\AttributeOptionInterface</item>
</argument>
</arguments>
</type>
Expand Down
19 changes: 16 additions & 3 deletions app/code/Magento/Customer/etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -145,15 +145,28 @@
</type>
<preference for="Magento\Customer\CustomerData\JsLayoutDataProviderPoolInterface"
type="Magento\Customer\CustomerData\JsLayoutDataProviderPool"/>
<type name="Magento\Eav\Model\EavCustomAttributeTypeLocator">
<type name="Magento\Framework\Webapi\ServiceTypeToEntityTypeMap">
<arguments>
<argument name="serviceEntityTypeMap" xsi:type="array">
<argument name="serviceTypeToEntityTypeMap" xsi:type="array">
<item name="Magento\Customer\Api\Data\CustomerInterface" xsi:type="const">Magento\Customer\Api\CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER</item>
<item name="Magento\Customer\Api\Data\AddressInterface" xsi:type="const">Magento\Customer\Api\AddressMetadataInterface::ENTITY_TYPE_ADDRESS</item>
</argument>
<argument name="serviceBackendModelDataInterfaceMap" xsi:type="array">
</arguments>
</type>
<type name="Magento\Eav\Model\TypeLocator\ComplexType">
<arguments>
<argument name="backendModelToAttributeTypeMap" xsi:type="array">
<item name="Magento\Customer\Api\Data\CustomerInterface" xsi:type="array">
<item name="Magento\Eav\Model\Attribute\Data\Image" xsi:type="string">Magento\Framework\Api\Data\ImageContentInterface</item>
</item>
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Website" xsi:type="string">int</item>
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Store" xsi:type="string">int</item>
<item name="Magento\Customer\Model\Attribute\Backend\Data\Boolean" xsi:type="string">boolean</item>
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Password" xsi:type="string">string</item>
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Billing" xsi:type="string">Magento\Customer\Api\Data\AddressInterface</item>
<item name="Magento\Customer\Model\Customer\Attribute\Backend\Shipping" xsi:type="string">Magento\Customer\Api\Data\AddressInterface</item>
<item name="Magento\Eav\Model\Entity\Attribute\Backend\Datetime" xsi:type="string">string</item>
<item name="Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region" xsi:type="string">Magento\Customer\Api\Data\RegionInterface</item>
</argument>
</arguments>
</type>
Expand Down
152 changes: 0 additions & 152 deletions app/code/Magento/Eav/Model/EavCustomAttributeTypeLocator.php

This file was deleted.

This file was deleted.

This file was deleted.

64 changes: 64 additions & 0 deletions app/code/Magento/Eav/Model/TypeLocator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

namespace Magento\Eav\Model;

use Magento\Framework\Reflection\TypeProcessor;
use Magento\Framework\Webapi\CustomAttribute\ServiceTypeListInterface;
use Magento\Framework\Webapi\CustomAttributeTypeLocatorInterface;

/**
* Class to locate types for Eav custom attributes
*/
class TypeLocator implements CustomAttributeTypeLocatorInterface
{
/**
* @var \Magento\Framework\Webapi\CustomAttributeTypeLocatorInterface[]
*/
private $typeLocators;

/**
* @var ServiceTypeListInterface
*/
private $serviceTypeList;

/**
* Initialize TypeLocator
*
* @param ServiceTypeListInterface $serviceTypeList
* @param \Magento\Framework\Webapi\CustomAttributeTypeLocatorInterface[] $typeLocators
*/
public function __construct(
ServiceTypeListInterface $serviceTypeList,
array $typeLocators = []
) {
$this->typeLocators = $typeLocators;
$this->serviceTypeList = $serviceTypeList;
}

/**
* {@inheritdoc}
*/
public function getType($attributeCode, $entityType)
{
foreach ($this->typeLocators as $typeLocator) {
$type = $typeLocator->getType($attributeCode, $entityType);
if ($type !== TypeProcessor::NORMALIZED_ANY_TYPE) {
return $type;
}
}

return TypeProcessor::NORMALIZED_ANY_TYPE;
}

/**
* {@inheritDoc}
*/
public function getAllServiceDataInterfaces()
{
return $this->serviceTypeList->getDataTypes();
}
}

0 comments on commit 4067591

Please sign in to comment.