diff --git a/Api/ExportInterface.php b/Api/ExportInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..43e82e25513d1ae41796654d6bcb49d9807bb4fe --- /dev/null +++ b/Api/ExportInterface.php @@ -0,0 +1,16 @@ +<?php +declare(strict_types=1); + +namespace Firegento\ContentProvisioning\Api; + +use Firegento\ContentProvisioning\Api\Data\EntryInterface; + +interface ExportInterface +{ + /** + * @param StrategyInterface $strategy + * @param EntryInterface $entry + * @return void + */ + public function execute(StrategyInterface $strategy, EntryInterface $entry): void; +} \ No newline at end of file diff --git a/Api/StrategyInterface.php b/Api/StrategyInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..f628b53784a54e038f0d92eec3e10e38b24a4684 --- /dev/null +++ b/Api/StrategyInterface.php @@ -0,0 +1,12 @@ +<?php +declare(strict_types=1); + +namespace Firegento\ContentProvisioning\Api; + +interface StrategyInterface +{ + /** + * @return string + */ + public function getTargetPath(): string; +} diff --git a/Api/StrategyProviderInterface.php b/Api/StrategyProviderInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..0e7519ed40704511a257ea442b8a75c05bd4610d --- /dev/null +++ b/Api/StrategyProviderInterface.php @@ -0,0 +1,17 @@ +<?php +declare(strict_types=1); + +namespace Firegento\ContentProvisioning\Api; + +use Magento\Framework\Exception\NotFoundException; + +interface StrategyProviderInterface +{ + /** + * @param string $strategyCode + * @return StrategyInterface + * + * @throws NotFoundException + */ + public function get(string $strategyCode): StrategyInterface; +} diff --git a/Model/Strategy/ExportToModule.php b/Model/Strategy/ExportToModule.php new file mode 100644 index 0000000000000000000000000000000000000000..489ec21e1e9243dda2bb1758743e090c66d4486d --- /dev/null +++ b/Model/Strategy/ExportToModule.php @@ -0,0 +1,18 @@ +<?php +declare(strict_types=1); + +namespace Firegento\ContentProvisioning\Model\Strategy; + +use Firegento\ContentProvisioning\Api\StrategyInterface; + +class ExportToModule implements StrategyInterface +{ + + /** + * @return string + */ + public function getTargetPath(): string + { + // TODO: Implement getTargetPath() method. + } +} diff --git a/Model/Strategy/ExportToVar.php b/Model/Strategy/ExportToVar.php new file mode 100644 index 0000000000000000000000000000000000000000..89073321b22bcde31f1822efe807b5c0a2c8d33c --- /dev/null +++ b/Model/Strategy/ExportToVar.php @@ -0,0 +1,18 @@ +<?php +declare(strict_types=1); + +namespace Firegento\ContentProvisioning\Model\Strategy; + +use Firegento\ContentProvisioning\Api\StrategyInterface; + +class ExportToVar implements StrategyInterface +{ + + /** + * @return string + */ + public function getTargetPath(): string + { + // TODO: Implement getTargetPath() method. + } +} diff --git a/Model/Strategy/Provider.php b/Model/Strategy/Provider.php new file mode 100644 index 0000000000000000000000000000000000000000..372e96f82a87deed0d7c04ff6708ada10ed3ac8e --- /dev/null +++ b/Model/Strategy/Provider.php @@ -0,0 +1,42 @@ +<?php +declare(strict_types=1); + +namespace Firegento\ContentProvisioning\Model\Strategy; + +use Firegento\ContentProvisioning\Api\StrategyInterface; +use Firegento\ContentProvisioning\Api\StrategyProviderInterface; +use Magento\Framework\Exception\NotFoundException; + +class Provider implements StrategyProviderInterface +{ + /** + * @var array|StrategyInterface[] + */ + private $strategies; + + /** + * Provider constructor. + * @param StrategyInterface[] $strategies + */ + public function __construct(array $strategies) + { + $this->strategies = $strategies; + } + + /** + * @param string $strategyCode + * @return StrategyInterface + * + * @throws NotFoundException + */ + public function get(string $strategyCode): StrategyInterface + { + $strategy = $this->strategies[$strategyCode] ?? null; + + if (!$strategy) { + throw new NotFoundException(__('Strategy %s not found.', $strategyCode)); + } + + return $strategy; + } +} diff --git a/etc/di.xml b/etc/di.xml index a00e2d47caec5122b9cef8ed1b8df0c8107854ff..8243449ee6fc4123fef8954e3bd11b104779f91f 100644 --- a/etc/di.xml +++ b/etc/di.xml @@ -107,4 +107,24 @@ </argument> </arguments> </type> + + <preference + for="Firegento\ContentProvisioning\Api\StrategyProviderInterface" + type="Firegento\ContentProvisioning\Model\Strategy\Provider" + /> + + <preference + for="Firegento\ContentProvisioning\Api\ExportInterface" + type="Firegento\ContentProvisioning\Model\Command\ExportEntry" + /> + + <type name="Firegento\ContentProvisioning\Model\Strategy\Provider"> + <arguments> + <argument name="strategies" xsi:type="array"> + <item name="export_to_module" xsi:type="object">Firegento\ContentProvisioning\Model\Strategy\ExportToModule</item> + <item name="export_to_var" xsi:type="object">Firegento\ContentProvisioning\Model\Strategy\ExportToVar</item> + </argument> + </arguments> + </type> + </config>