src/Propel/Generator/Command/GraphvizGenerateCommand.php
<?php
/**
* MIT License. This file is part of the Propel package.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Propel\Generator\Command;
use Propel\Generator\Manager\GraphvizManager;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @author William Durand <william.durand1@gmail.com>
*/
class GraphvizGenerateCommand extends AbstractCommand
{
/**
* @var string
*/
public const DEFAULT_OUTPUT_DIRECTORY = 'generated-graphviz';
/**
* @inheritDoc
*/
protected function configure()
{
parent::configure();
$this
->addOption('output-dir', null, InputOption::VALUE_REQUIRED, 'The output directory', self::DEFAULT_OUTPUT_DIRECTORY)
->addOption('schema-dir', null, InputOption::VALUE_REQUIRED, 'The directory where the schema files are placed')
->setName('graphviz:generate')
->setAliases(['graphviz'])
->setDescription('Generate Graphviz files (.dot)');
}
/**
* @inheritDoc
*/
protected function execute(InputInterface $input, OutputInterface $output): int
{
$configOptions = [];
if ($this->hasInputOption('schema-dir', $input)) {
$configOptions['propel']['paths']['schemaDir'] = $input->getOption('schema-dir');
}
$generatorConfig = $this->getGeneratorConfig($configOptions, $input);
$this->createDirectory($input->getOption('output-dir'));
$manager = new GraphvizManager();
$manager->setGeneratorConfig($generatorConfig);
$manager->setSchemas($this->getSchemas($generatorConfig->getSection('paths')['schemaDir'], $generatorConfig->getSection('generator')['recursive']));
$manager->setLoggerClosure(function ($message) use ($input, $output): void {
if ($input->getOption('verbose')) {
$output->writeln($message);
}
});
$manager->setWorkingDirectory($input->getOption('output-dir'));
$manager->build();
return static::CODE_SUCCESS;
}
}