Commit f3014420 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Classe Config : ajout des classes CodeGenerator associées à chaque classe de plateforme de bdd

parent 3d49e7fb
Loading
Loading
Loading
Loading
+25 −1
Changes for src/UnicaenDbImport/Config/Config.php: 25 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -4,7 +4,6 @@ namespace UnicaenDbImport\Config;

use UnicaenDbImport\Domain\ImportInterface;
use UnicaenDbImport\Domain\SynchroInterface;
use UnicaenDbImport\Runner;

/**
 * Config du module.
@@ -13,6 +12,12 @@ use UnicaenDbImport\Runner;
 */
class Config
{
    /**
     * platform's class => code generator's class
     * @var array
     */
    protected $codeGeneratorsConfig = [];

    /**
     * @var ImportInterface[]
     */
@@ -23,6 +28,25 @@ class Config
     */
    protected $synchros = [];

    /**
     * @param array $codeGeneratorsConfig
     * @return Config
     */
    public function setCodeGeneratorsConfig(array $codeGeneratorsConfig): Config
    {
        $this->codeGeneratorsConfig = $codeGeneratorsConfig;

        return $this;
    }

    /**
     * @return array
     */
    public function getCodeGeneratorsConfig(): array
    {
        return $this->codeGeneratorsConfig;
    }

    /**
     * @param ImportInterface[] $imports
     * @return static
+5 −0
Changes for src/UnicaenDbImport/Config/ConfigException.php: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -25,4 +25,9 @@ class ConfigException extends RuntimeException
    {
        return new static("La clé de config '$key' n'est pas autorisée");
    }

    public static function invalidValueForKey($key, string $expected)
    {
        return new static("La valeur associée à la clé de config '$key' n'est pas valide. Attendu : $expected.");
    }
}
 No newline at end of file
+24 −0
Changes for src/UnicaenDbImport/Config/ConfigFactory.php: 24 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@

namespace UnicaenDbImport\Config;

use Assert\Assertion;
use Assert\AssertionFailedException;
use Doctrine\DBAL\Connection;
use Interop\Container\ContainerInterface;
use UnicaenDbImport\Domain\Destination;
@@ -31,10 +33,12 @@ class ConfigFactory

        $moduleConfig = $appConfig[$key];

        $codeGeneratorsConfig = $this->getCodeGeneratorsConfig($moduleConfig);
        $imports = $this->createImports($moduleConfig);
        $synchros = $this->createSynchros($moduleConfig);

        $config = new Config();
        $config->setCodeGeneratorsConfig($codeGeneratorsConfig);
        $config->setImports($imports);
        $config->setSynchros($synchros);

@@ -120,4 +124,24 @@ class ConfigFactory

        return Destination::fromConfig($destinationConfig);
    }

    /**
     * @param array $moduleConfig
     * @return array
     */
    private function getCodeGeneratorsConfig(array $moduleConfig)
    {
        try {
            Assertion::keyExists($moduleConfig, $key = 'code_generators');
        } catch (AssertionFailedException $e) {
            throw ConfigException::missingKey($key);
        }
        try {
            Assertion::isArray($moduleConfig[$key]);
        } catch (AssertionFailedException $e) {
            throw ConfigException::invalidValueForKey($key, 'array');
        }

        return $moduleConfig[$key];
    }
}
 No newline at end of file
+6 −21
Changes for src/UnicaenDbImport/Service/DatabaseServiceFactory.php: 6 added lines, 21 removed lines.
Original line number Diff line number Diff line
@@ -2,10 +2,8 @@

namespace UnicaenDbImport\Service;

use Assert\Assertion;
use Assert\AssertionFailedException;
use Interop\Container\ContainerInterface;
use UnicaenDbImport\Config\ConfigException;
use UnicaenDbImport\Config\Config;
use UnicaenDbImport\QueryExecutor;

class DatabaseServiceFactory
@@ -16,33 +14,20 @@ class DatabaseServiceFactory
     */
    public function __invoke(ContainerInterface $container)
    {
        /** @var Config $config */
        $config = $container->get(Config::class);

        /** @var CodeGeneratorPluginManager $codeGeneratorPluginManager */
        $codeGeneratorPluginManager = $container->get(CodeGeneratorPluginManager::class);

        $codeGeneratorByPlatformConfig = $this->getCodeGeneratorByPlatformConfig($container);
        $codeGeneratorsConfig = $config->getCodeGeneratorsConfig();

        $databaseService = new DatabaseService(
            $codeGeneratorPluginManager,
            $codeGeneratorByPlatformConfig,
            $codeGeneratorsConfig,
            new QueryExecutor()
        );

        return $databaseService;
    }

    /**
     * @param ContainerInterface $container
     * @return array
     */
    private function getCodeGeneratorByPlatformConfig(ContainerInterface $container)
    {
        $config = $container->get('config');
        try {
            Assertion::keyExists($config, $key = 'code_generators');
        } catch (AssertionFailedException $e) {
            throw ConfigException::missingKey($key);
        }

        return $config[$key];
    }
}
 No newline at end of file