attributeMetadataFactory = $attributeMetadataFactory; $this->optionFactory = $optionFactory; $this->validationRuleFactory = $validationRuleFactory; $this->dataObjectProcessor = $dataObjectProcessor; } /** * Convert array to AttributeMetadataInterface * * @param array $data * @return AttributeMetadataInterface */ public function hydrate(array $data) { if (isset($data[AttributeMetadataInterface::OPTIONS])) { $data[AttributeMetadataInterface::OPTIONS] = $this->createOptions( $data[AttributeMetadataInterface::OPTIONS] ); } if (isset($data[AttributeMetadataInterface::VALIDATION_RULES])) { $data[AttributeMetadataInterface::VALIDATION_RULES] = $this->createValidationRules( $data[AttributeMetadataInterface::VALIDATION_RULES] ); } return $this->attributeMetadataFactory->create(['data' => $data]); } /** * Populate options with data * * @param array $data * @return OptionInterface[] */ private function createOptions(array $data) { foreach ($data as $key => $optionData) { if (isset($optionData[OptionInterface::OPTIONS])) { $optionData[OptionInterface::OPTIONS] = $this->createOptions($optionData[OptionInterface::OPTIONS]); } $data[$key] = $this->optionFactory->create(['data' => $optionData]); } return $data; } /** * Populate validation rules with data * * @param array $data * @return ValidationRuleInterface[] */ private function createValidationRules(array $data) { foreach ($data as $key => $validationRuleData) { $data[$key] = $this->validationRuleFactory->create(['data' => $validationRuleData]); } return $data; } /** * Convert AttributeMetadataInterface to array * * @param AttributeMetadataInterface $attributeMetadata * @return array */ public function extract($attributeMetadata) { return $this->dataObjectProcessor->buildOutputDataArray( $attributeMetadata, AttributeMetadata::class ); } }