Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
46.67% |
7 / 15 |
CRAP | |
70.00% |
35 / 50 |
| Siesta | |
0.00% |
0 / 1 |
|
46.67% |
7 / 15 |
24.80 | |
70.00% |
35 / 50 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
8 / 8 |
|||
| setLogger | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| addFile | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| addFileType | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setGenericGeneratorConfig | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getConnection | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
| setConnection | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setup | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
| prepareModel | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
|||
| generateClasses | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| migrateDirect | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| migrateToFile | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| checkValidationError | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
| setTableNamingStrategy | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setColumnNamingStrategy | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| <?php | |
| declare(strict_types = 1); | |
| namespace Siesta\Main; | |
| use Psr\Log\LoggerAwareInterface; | |
| use Psr\Log\LoggerInterface; | |
| use Siesta\Config\GenericConfigLoader; | |
| use Siesta\Database\Connection; | |
| use Siesta\Database\ConnectionFactory; | |
| use Siesta\Exception\InvalidConfigurationException; | |
| use Siesta\Generator\MainGenerator; | |
| use Siesta\Migration\Migrator; | |
| use Siesta\Model\DataModel; | |
| use Siesta\Model\ValidationLogger; | |
| use Siesta\NamingStrategy\NamingStrategy; | |
| use Siesta\NamingStrategy\NamingStrategyRegistry; | |
| use Siesta\Util\File; | |
| use Siesta\Validator\Validator; | |
| use Siesta\XML\XMLDirectoryScanner; | |
| /** | |
| * @author Gregor Müller | |
| */ | |
| class Siesta implements LoggerAwareInterface | |
| { | |
| /** | |
| * @var ValidationLogger | |
| */ | |
| protected $validationLogger; | |
| /** | |
| * @var XMLDirectoryScanner | |
| */ | |
| protected $directoryScanner; | |
| /** | |
| * @var DataModel | |
| */ | |
| protected $dataModel; | |
| /** | |
| * @var GenericConfigLoader | |
| */ | |
| protected $genericConfigLoader; | |
| /** | |
| * @var Validator | |
| */ | |
| protected $validator; | |
| /** | |
| * @var MainGenerator | |
| */ | |
| protected $mainGenerator; | |
| /** | |
| * @var Migrator | |
| */ | |
| protected $migrator; | |
| /** | |
| * @var Connection | |
| */ | |
| protected $connection; | |
| /** | |
| * Siesta constructor. | |
| */ | |
| public function __construct() | |
| { | |
| $this->validationLogger = new ValidationLogger(); | |
| $this->directoryScanner = new XMLDirectoryScanner($this->validationLogger); | |
| $this->dataModel = new DataModel(); | |
| $this->genericConfigLoader = new GenericConfigLoader(); | |
| $this->validator = new Validator(); | |
| $this->mainGenerator = new MainGenerator(); | |
| $this->migrator = new Migrator(); | |
| } | |
| /** | |
| * @param LoggerInterface $logger | |
| */ | |
| public function setLogger(LoggerInterface $logger) | |
| { | |
| $this->validationLogger->setLogger($logger); | |
| $this->migrator->setLogger($logger); | |
| } | |
| /** | |
| * @param File $file | |
| */ | |
| public function addFile(File $file) | |
| { | |
| $this->directoryScanner->addFile($file); | |
| } | |
| /** | |
| * @param string $extension | |
| * @param string|null $baseDir | |
| */ | |
| public function addFileType(string $extension, string $baseDir = null) | |
| { | |
| $this->directoryScanner->addFileExtension($extension, $baseDir); | |
| } | |
| /** | |
| * @param File $file | |
| */ | |
| public function setGenericGeneratorConfig(File $file) | |
| { | |
| $this->genericConfigLoader->setConfigFile($file); | |
| } | |
| /** | |
| * @return Connection | |
| */ | |
| public function getConnection() | |
| { | |
| if ($this->connection !== null) { | |
| return $this->connection; | |
| } | |
| return ConnectionFactory::getConnection(); | |
| } | |
| /** | |
| * @param Connection $connection | |
| */ | |
| public function setConnection(Connection $connection) | |
| { | |
| $this->connection = $connection; | |
| } | |
| /** | |
| * @throws InvalidConfigurationException | |
| */ | |
| protected function setup() | |
| { | |
| $genericConfig = $this->genericConfigLoader->loadAndValidate($this->validationLogger); | |
| $this->checkValidationError(); | |
| $this->validator->setup($genericConfig); | |
| $this->mainGenerator->setup($genericConfig); | |
| } | |
| /** | |
| * @throws InvalidConfigurationException | |
| */ | |
| protected function prepareModel() | |
| { | |
| $xmlEntityList = $this->directoryScanner->getXmlEntityList(); | |
| $this->dataModel->addXMLEntityList($xmlEntityList); | |
| $this->dataModel->update(); | |
| $this->validator->validateDataModel($this->dataModel, $this->validationLogger); | |
| $this->checkValidationError(); | |
| } | |
| /** | |
| * @param string $baseDir | |
| * @param bool $dropUnusedTables | |
| * | |
| * @throws InvalidConfigurationException | |
| */ | |
| protected function generateClasses(string $baseDir, bool $dropUnusedTables = true) | |
| { | |
| $this->setup(); | |
| $this->prepareModel(); | |
| $this->mainGenerator->generate($this->dataModel, $baseDir); | |
| } | |
| /** | |
| * @param string $baseDir | |
| * @param bool $dropUnusedTables | |
| * | |
| * @throws InvalidConfigurationException | |
| */ | |
| public function migrateDirect(string $baseDir, bool $dropUnusedTables = true) | |
| { | |
| $this->generateClasses($baseDir, $dropUnusedTables); | |
| $this->migrator->migrateDirect($this->dataModel, $this->getConnection(), $dropUnusedTables); | |
| } | |
| /** | |
| * @param string $baseDir | |
| * @param File $targetFile | |
| * @param bool $dropUnusedTables | |
| * | |
| * @throws InvalidConfigurationException | |
| */ | |
| public function migrateToFile(string $baseDir, File $targetFile, bool $dropUnusedTables = true) | |
| { | |
| $this->generateClasses($baseDir, $dropUnusedTables); | |
| $this->migrator->migrateToSQLFile($this->dataModel, $this->getConnection(), $targetFile, $dropUnusedTables); | |
| } | |
| /** | |
| * @throws InvalidConfigurationException | |
| */ | |
| protected function checkValidationError() | |
| { | |
| if (!$this->validationLogger->hasError()) { | |
| return; | |
| } | |
| throw new InvalidConfigurationException(); | |
| } | |
| /** | |
| * @param NamingStrategy $strategy | |
| */ | |
| public function setTableNamingStrategy(NamingStrategy $strategy) | |
| { | |
| NamingStrategyRegistry::setTableNamingStrategy($strategy); | |
| } | |
| /** | |
| * @param NamingStrategy $strategy | |
| */ | |
| public function setColumnNamingStrategy(NamingStrategy $strategy) | |
| { | |
| NamingStrategyRegistry::setColumnNamingStrategy($strategy); | |
| } | |
| } |