getDataResourceModel = $getDataResourceModel; $this->getDefaultValues = $getDefaultValues; $this->sourceItemConfigurationFactory = $sourceItemConfigurationFactory; $this->dataObjectHelper = $dataObjectHelper; $this->logger = $logger; } /** * @inheritdoc */ public function execute(string $sourceCode, string $sku): SourceItemConfigurationInterface { if (empty($sourceCode) || empty($sku)) { throw new InputException(__('Wrong input data')); } try { return $this->getConfiguration($sourceCode, $sku); } catch (\Exception $e) { $this->logger->error($e->getMessage()); throw new LocalizedException(__('Could not load Source Item Configuration.'), $e); } } /** * @param string $sourceCode * @param string $sku * @return SourceItemConfigurationInterface */ private function getConfiguration(string $sourceCode, string $sku): SourceItemConfigurationInterface { $sourceItemConfigurationData = $this->getDataResourceModel->execute($sourceCode, $sku); if (null === $sourceItemConfigurationData) { $sourceItemConfigurationData = $this->getDefaultValues->execute($sourceCode, $sku); } /** @var SourceItemConfigurationInterface $sourceItem */ $sourceItemConfiguration = $this->sourceItemConfigurationFactory->create(); $this->dataObjectHelper->populateWithArray( $sourceItemConfiguration, $sourceItemConfigurationData, SourceItemConfigurationInterface::class ); return $sourceItemConfiguration; } }