* @copyright Since 2007 PrestaShop SA and Contributors * @license https://opensource.org/licenses/AFL-3.0 Academic Free License version 3.0 */ declare(strict_types=1); namespace PrestaShop\Module\Mbo\Api\Service; use PrestaShop\Module\Mbo\Api\Exception\UnknownServiceException; final class Factory { private const ALLOWED_SERVICES = [ ModuleTransitionExecutor::SERVICE, ConfigApplyExecutor::SERVICE, ]; /** * @param ServiceExecutorInterface[] $executors */ public function __construct(array $executors) { $this->executors = $executors; } /** * @var ServiceExecutorInterface[] */ private $executors; public function build(string $service): ServiceExecutorInterface { $this->assertServiceIsAllowed($service); foreach ($this->executors as $executor) { if ($executor->canExecute($service)) { return $executor; } } throw new UnknownServiceException('No executor have been found for that service'); } private function assertServiceIsAllowed(string $service): void { if (!in_array($service, self::ALLOWED_SERVICES)) { throw new UnknownServiceException(sprintf('Unknown service given : %s', $service)); } } }