attributeMetadataConverter = $attributeMetadataConverter; $this->attributeMetadataDataProvider = $attributeMetadataDataProvider; } /** * {@inheritdoc} */ public function getAttributes($formCode) { $attributes = []; $attributesFormCollection = $this->attributeMetadataDataProvider->loadAttributesCollection( AddressMetadataInterface::ENTITY_TYPE_ADDRESS, $formCode ); foreach ($attributesFormCollection as $attribute) { $attributes[$attribute->getAttributeCode()] = $this->attributeMetadataConverter ->createMetadataAttribute($attribute); } if (empty($attributes)) { throw NoSuchEntityException::singleField('formCode', $formCode); } return $attributes; } /** * {@inheritdoc} */ public function getAttributeMetadata($attributeCode) { /** @var AbstractAttribute $attribute */ $attribute = $this->attributeMetadataDataProvider ->getAttribute(AddressMetadataInterface::ENTITY_TYPE_ADDRESS, $attributeCode); if ($attribute && ($attributeCode === 'id' || $attribute->getId() !== null)) { $attributeMetadata = $this->attributeMetadataConverter->createMetadataAttribute($attribute); return $attributeMetadata; } else { throw new NoSuchEntityException( __( 'No such entity with %fieldName = %fieldValue, %field2Name = %field2Value', [ 'fieldName' => 'entityType', 'fieldValue' => AddressMetadataInterface::ENTITY_TYPE_ADDRESS, 'field2Name' => 'attributeCode', 'field2Value' => $attributeCode ] ) ); } } /** * {@inheritdoc} */ public function getAllAttributesMetadata() { /** @var AbstractAttribute[] $attribute */ $attributeCodes = $this->attributeMetadataDataProvider->getAllAttributeCodes( AddressMetadataInterface::ENTITY_TYPE_ADDRESS, AddressMetadataInterface::ATTRIBUTE_SET_ID_ADDRESS ); $allAttributesMetadata = []; foreach ($attributeCodes as $attributeCode) { try { $allAttributesMetadata[] = $this->getAttributeMetadata($attributeCode); } catch (NoSuchEntityException $e) { //If no such entity, skip } } return $allAttributesMetadata; } /** * {@inheritdoc} */ public function getCustomAttributesMetadata($dataObjectClassName = AddressMetadataInterface::DATA_INTERFACE_NAME) { if (!$this->addressDataObjectMethods) { $dataObjectMethods = array_flip(get_class_methods($dataObjectClassName)); $baseClassDataObjectMethods = array_flip( get_class_methods(\Magento\Framework\Api\AbstractExtensibleObject::class) ); $this->addressDataObjectMethods = array_diff_key($dataObjectMethods, $baseClassDataObjectMethods); } $customAttributes = []; foreach ($this->getAllAttributesMetadata() as $attributeMetadata) { $attributeCode = $attributeMetadata->getAttributeCode(); $camelCaseKey = SimpleDataObjectConverter::snakeCaseToUpperCamelCase($attributeCode); $isDataObjectMethod = isset($this->addressDataObjectMethods['get' . $camelCaseKey]) || isset($this->addressDataObjectMethods['is' . $camelCaseKey]); if (!$isDataObjectMethod && !$attributeMetadata->isSystem()) { $customAttributes[] = $attributeMetadata; } } return $customAttributes; } }