From e6b4ae6c6c104152e7e91e58c64a74d4d406cc66 Mon Sep 17 00:00:00 2001 From: Vinai Kopp Date: Wed, 25 Nov 2020 11:46:51 +0100 Subject: [PATCH] Merge DataTypeGuesser and DataTypeToString into one to avoid duplication --- Api/DataTypeInterface.php | 8 ++++ Model/DataType/ArrayDataType.php | 8 ++-- Model/DataType/CategoryLinkDataType.php | 5 +- Model/DataType/CompositeDataTypeGuesser.php | 34 ------------- Model/DataType/CustomerAddressDataType.php | 5 +- Model/DataType/DataTypeFacade.php | 48 +++++++++++++++++++ ...serPool.php => DataTypeGuesserFactory.php} | 2 +- .../DataTypeToStringConverterLocator.php | 33 ------------- ...aTypeToStringConverterLocatorInterface.php | 10 ++++ Model/DataType/DateTimeDataTypeConverter.php | 5 +- Model/DataType/ProductDataType.php | 5 +- Model/DataType/ProductGalleryDataType.php | 5 +- .../DataType/ProductGalleryEntryDataType.php | 5 +- Model/DataType/ProductLinkDataType.php | 9 ++-- Model/DataType/ScalarAndNullDataType.php | 5 +- Model/DataType/StockItemDataType.php | 9 ++-- Model/DataType/TextDataType.php | 5 +- Model/DataType/UnknownDataType.php | 5 +- ViewModel/HyvaGrid/Cell.php | 6 +-- etc/adminhtml/di.xml | 26 ++-------- 20 files changed, 105 insertions(+), 133 deletions(-) create mode 100644 Api/DataTypeInterface.php delete mode 100644 Model/DataType/CompositeDataTypeGuesser.php create mode 100644 Model/DataType/DataTypeFacade.php rename Model/DataType/{DataTypeGuesserPool.php => DataTypeGuesserFactory.php} (94%) delete mode 100644 Model/DataType/DataTypeToStringConverterLocator.php create mode 100644 Model/DataType/DataTypeToStringConverterLocatorInterface.php diff --git a/Api/DataTypeInterface.php b/Api/DataTypeInterface.php new file mode 100644 index 00000000..ef8db88d --- /dev/null +++ b/Api/DataTypeInterface.php @@ -0,0 +1,8 @@ +toStringConverterLocator = $toStringConverterLocator; diff --git a/Model/DataType/CategoryLinkDataType.php b/Model/DataType/CategoryLinkDataType.php index 00df2872..70cf3a6e 100644 --- a/Model/DataType/CategoryLinkDataType.php +++ b/Model/DataType/CategoryLinkDataType.php @@ -2,11 +2,10 @@ namespace Hyva\Admin\Model\DataType; -use Hyva\Admin\Api\DataTypeGuesserInterface; -use Hyva\Admin\Api\DataTypeValueToStringConverterInterface; +use Hyva\Admin\Api\DataTypeInterface; use Magento\Catalog\Api\Data\CategoryLinkInterface; -class CategoryLinkDataType implements DataTypeGuesserInterface, DataTypeValueToStringConverterInterface +class CategoryLinkDataType implements DataTypeInterface { const TYPE_MAGENTO_CATEGORY_LINK = 'magento_category_link'; diff --git a/Model/DataType/CompositeDataTypeGuesser.php b/Model/DataType/CompositeDataTypeGuesser.php deleted file mode 100644 index ec4784de..00000000 --- a/Model/DataType/CompositeDataTypeGuesser.php +++ /dev/null @@ -1,34 +0,0 @@ -dataTypeGuessers = $dataTypeGuessers; - $this->dataTypeGuesserPool = $dataTypeGuesserPool; - } - - public function valueToTypeCode($value): ?string - { - return reduce($this->dataTypeGuessers, function (?string $type, string $class) use ($value): ?string { - return $type ?? $this->dataTypeGuesserPool->get($class)->valueToTypeCode($value); - }, null); - } - - public function typeToTypeCode(string $type): ?string - { - return reduce($this->dataTypeGuessers, function (?string $typeCode, string $class) use ($type): ?string { - return $typeCode ?? $this->dataTypeGuesserPool->get($class)->typeToTypeCode($type); - }, null); - } -} diff --git a/Model/DataType/CustomerAddressDataType.php b/Model/DataType/CustomerAddressDataType.php index c928e4b4..ac3dcd89 100644 --- a/Model/DataType/CustomerAddressDataType.php +++ b/Model/DataType/CustomerAddressDataType.php @@ -2,13 +2,12 @@ namespace Hyva\Admin\Model\DataType; -use Hyva\Admin\Api\DataTypeGuesserInterface; -use Hyva\Admin\Api\DataTypeValueToStringConverterInterface; +use Hyva\Admin\Api\DataTypeInterface; use Magento\Customer\Api\Data\AddressInterface; use function array_filter as filter; -class CustomerAddressDataType implements DataTypeGuesserInterface, DataTypeValueToStringConverterInterface +class CustomerAddressDataType implements DataTypeInterface { const TYPE_MAGENTO_CUSTOMER_ADDRESS = 'magento_customer_address'; diff --git a/Model/DataType/DataTypeFacade.php b/Model/DataType/DataTypeFacade.php new file mode 100644 index 00000000..776ca236 --- /dev/null +++ b/Model/DataType/DataTypeFacade.php @@ -0,0 +1,48 @@ +dataTypeClassMap = $dataTypeClassMap; + $this->dataTypeGuesserFactory = $dataTypeGuesserFactory; + $this->dataTypeValueToStringConverterFactory = $dataTypeValueToStringConverterFactory; + } + + public function valueToTypeCode($value): ?string + { + return reduce($this->dataTypeClassMap, function (?string $type, string $class) use ($value): ?string { + return $type ?? $this->dataTypeGuesserFactory->get($class)->valueToTypeCode($value); + }, null); + } + + public function typeToTypeCode(string $type): ?string + { + return reduce($this->dataTypeClassMap, function (?string $typeCode, string $class) use ($type): ?string { + return $typeCode ?? $this->dataTypeGuesserFactory->get($class)->typeToTypeCode($type); + }, null); + } + + public function forTypeCode(string $typeCode): ?DataTypeValueToStringConverterInterface + { + return isset($this->dataTypeClassMap[$typeCode]) + ? $this->dataTypeValueToStringConverterFactory->get($this->dataTypeClassMap[$typeCode]) + : null; + } +} diff --git a/Model/DataType/DataTypeGuesserPool.php b/Model/DataType/DataTypeGuesserFactory.php similarity index 94% rename from Model/DataType/DataTypeGuesserPool.php rename to Model/DataType/DataTypeGuesserFactory.php index f1ef8890..b9701891 100644 --- a/Model/DataType/DataTypeGuesserPool.php +++ b/Model/DataType/DataTypeGuesserFactory.php @@ -5,7 +5,7 @@ use Hyva\Admin\Api\DataTypeGuesserInterface; use Magento\Framework\ObjectManagerInterface; -class DataTypeGuesserPool +class DataTypeGuesserFactory { private ObjectManagerInterface $objectManager; diff --git a/Model/DataType/DataTypeToStringConverterLocator.php b/Model/DataType/DataTypeToStringConverterLocator.php deleted file mode 100644 index ac714c21..00000000 --- a/Model/DataType/DataTypeToStringConverterLocator.php +++ /dev/null @@ -1,33 +0,0 @@ -valueToStringConverters = $valueToStringConverterClasses; - $this->dataTypeValueToStringConverterFactory = $dataTypeValueToStringConverterFactory; - } - - public function forTypeCode(string $typeCode): ?DataTypeValueToStringConverterInterface - { - return isset($this->valueToStringConverters[$typeCode]) - ? $this->dataTypeValueToStringConverterFactory->get($this->valueToStringConverters[$typeCode]) - : null; - } -} diff --git a/Model/DataType/DataTypeToStringConverterLocatorInterface.php b/Model/DataType/DataTypeToStringConverterLocatorInterface.php new file mode 100644 index 00000000..b6edada4 --- /dev/null +++ b/Model/DataType/DataTypeToStringConverterLocatorInterface.php @@ -0,0 +1,10 @@ +dataObjectProcessor = $dataObjectProcessor; $this->toStringConverterLocator = $toStringConverterLocator; diff --git a/Model/DataType/ScalarAndNullDataType.php b/Model/DataType/ScalarAndNullDataType.php index 92699693..208fb2fc 100644 --- a/Model/DataType/ScalarAndNullDataType.php +++ b/Model/DataType/ScalarAndNullDataType.php @@ -2,10 +2,9 @@ namespace Hyva\Admin\Model\DataType; -use Hyva\Admin\Api\DataTypeGuesserInterface; -use Hyva\Admin\Api\DataTypeValueToStringConverterInterface; +use Hyva\Admin\Api\DataTypeInterface; -class ScalarAndNullDataType implements DataTypeGuesserInterface, DataTypeValueToStringConverterInterface +class ScalarAndNullDataType implements DataTypeInterface { const TYPE_SCALAR_NULL = 'scalar_null'; diff --git a/Model/DataType/StockItemDataType.php b/Model/DataType/StockItemDataType.php index de8887fd..a3b7eb7e 100644 --- a/Model/DataType/StockItemDataType.php +++ b/Model/DataType/StockItemDataType.php @@ -2,22 +2,21 @@ namespace Hyva\Admin\Model\DataType; -use Hyva\Admin\Api\DataTypeGuesserInterface; -use Hyva\Admin\Api\DataTypeValueToStringConverterInterface; +use Hyva\Admin\Api\DataTypeInterface; use Magento\CatalogInventory\Api\Data\StockItemInterface; use Magento\Framework\Reflection\DataObjectProcessor; -class StockItemDataType implements DataTypeGuesserInterface, DataTypeValueToStringConverterInterface +class StockItemDataType implements DataTypeInterface { const TYPE_MAGENTO_STOCK_ITEM = 'magento_stock_item'; private DataObjectProcessor $dataObjectProcessor; - private DataTypeToStringConverterLocator $toStringConverterLocator; + private DataTypeToStringConverterLocatorInterface $toStringConverterLocator; public function __construct( DataObjectProcessor $dataObjectProcessor, - DataTypeToStringConverterLocator $toStringConverterLocator + DataTypeToStringConverterLocatorInterface $toStringConverterLocator ) { $this->dataObjectProcessor = $dataObjectProcessor; $this->toStringConverterLocator = $toStringConverterLocator; diff --git a/Model/DataType/TextDataType.php b/Model/DataType/TextDataType.php index a8cd52e5..e03bc58f 100644 --- a/Model/DataType/TextDataType.php +++ b/Model/DataType/TextDataType.php @@ -2,10 +2,9 @@ namespace Hyva\Admin\Model\DataType; -use Hyva\Admin\Api\DataTypeGuesserInterface; -use Hyva\Admin\Api\DataTypeValueToStringConverterInterface; +use Hyva\Admin\Api\DataTypeInterface; -class TextDataType implements DataTypeGuesserInterface, DataTypeValueToStringConverterInterface +class TextDataType implements DataTypeInterface { const TYPE_TEXT = 'text'; const LONG_TEXT_MIN_LENGTH = 200; diff --git a/Model/DataType/UnknownDataType.php b/Model/DataType/UnknownDataType.php index ff6c13d2..e34aeb94 100644 --- a/Model/DataType/UnknownDataType.php +++ b/Model/DataType/UnknownDataType.php @@ -2,11 +2,10 @@ namespace Hyva\Admin\Model\DataType; -use Hyva\Admin\Api\DataTypeGuesserInterface; -use Hyva\Admin\Api\DataTypeValueToStringConverterInterface; +use Hyva\Admin\Api\DataTypeInterface; use Hyva\Admin\Exception\UnableToCastToStringException; -class UnknownDataType implements DataTypeGuesserInterface, DataTypeValueToStringConverterInterface +class UnknownDataType implements DataTypeInterface { const TYPE_UNKNOWN = 'unknown'; diff --git a/ViewModel/HyvaGrid/Cell.php b/ViewModel/HyvaGrid/Cell.php index 01d01c6a..32cd2a0e 100644 --- a/ViewModel/HyvaGrid/Cell.php +++ b/ViewModel/HyvaGrid/Cell.php @@ -3,7 +3,7 @@ namespace Hyva\Admin\ViewModel\HyvaGrid; use Hyva\Admin\Exception\UnableToCastToStringException; -use Hyva\Admin\Model\DataType\DataTypeToStringConverterLocator; +use Hyva\Admin\Model\DataType\DataTypeToStringConverterLocatorInterface; use Magento\Framework\Escaper; use Magento\Framework\View\Element\AbstractBlock; use Magento\Framework\View\Element\Template; @@ -18,7 +18,7 @@ class Cell implements CellInterface private ColumnDefinitionInterface $columnDefinition; - private DataTypeToStringConverterLocator $dataTypeToStringConverterLocator; + private DataTypeToStringConverterLocatorInterface $dataTypeToStringConverterLocator; private LayoutInterface $layout; @@ -30,7 +30,7 @@ class Cell implements CellInterface public function __construct( $value, ColumnDefinitionInterface $columnDefinition, - DataTypeToStringConverterLocator $dataTypeToStringConverter, + DataTypeToStringConverterLocatorInterface $dataTypeToStringConverter, LayoutInterface $layout, Escaper $escaper ) { diff --git a/etc/adminhtml/di.xml b/etc/adminhtml/di.xml index 2c0c2446..867afd79 100644 --- a/etc/adminhtml/di.xml +++ b/etc/adminhtml/di.xml @@ -18,33 +18,17 @@ + type="Hyva\Admin\Model\DataType\DataTypeFacade"/> + Hyva_Admin::grid.phtml - + - - Hyva\Admin\Model\DataType\TextDataType - Hyva\Admin\Model\DataType\ScalarAndNullDataType - Hyva\Admin\Model\DataType\ArrayDataType - Hyva\Admin\Model\DataType\DateTimeDataTypeConverter - Hyva\Admin\Model\DataType\ProductDataType - Hyva\Admin\Model\DataType\CategoryLinkDataType - Hyva\Admin\Model\DataType\StockItemDataType - Hyva\Admin\Model\DataType\ProductLinkDataType - Hyva\Admin\Model\DataType\ProductGalleryDataType - Hyva\Admin\Model\DataType\ProductGalleryEntryDataType - Hyva\Admin\Model\DataType\CustomerAddressDataType - Hyva\Admin\Model\DataType\UnknownDataType - - - - - - + Hyva\Admin\Model\DataType\TextDataType Hyva\Admin\Model\DataType\ScalarAndNullDataType Hyva\Admin\Model\DataType\ArrayDataType