protected function execute(InputInterface $input, OutputInterface $output)
 {
     $configArgument = $input->getArgument('config');
     if (false === file_exists($configArgument)) {
         throw new FileNotFoundException(sprintf('configuration file : "%s" can not be found', $configArgument));
     }
     $output->write('1 - Parse config file : ');
     $parser = new Parser();
     $config = $parser->parse(file_get_contents($configArgument));
     unset($parser);
     $output->writeln('<info>Ok</info>');
     $output->write('2 - Load Resolver and Generators : ');
     $processor = new Processor();
     $workerConfiguration = $processor->process($this->configurationTree->getWorkerTree(), ['root' => $config]);
     $generators = $this->generatorChain->getGenerators($workerConfiguration['generators']);
     $resolvers = $this->resolverChain->getResolvers($workerConfiguration['resolvers']);
     $output->writeln('<info>Ok</info>');
     $output->write('3 - Build configuration tree : ');
     foreach (array_merge($generators, $resolvers) as $worker) {
         if ($worker instanceof TreeConfiguratorInterface) {
             $this->configurationTree->addTreeConfigurator($worker);
         }
     }
     $output->writeln('<info>Ok</info>');
     $dumper = new YamlReferenceDumper();
     echo $dumper->dump($this->configurationTree);
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $configArgument = $input->getArgument('config');
     if (false === file_exists($configArgument)) {
         throw new FileNotFoundException(sprintf('configuration file : "%s" can not be found', $configArgument));
     }
     $output->write('1 - Parse config file : ');
     $parser = new Parser();
     $config = $parser->parse(file_get_contents($configArgument));
     unset($parser);
     $output->writeln('<info>Ok</info>');
     $output->write('2 - Load Resolver and Generators : ');
     $processor = new Processor();
     $workerConfiguration = $processor->process($this->configurationTree->getWorkerTree(), ['root' => $config]);
     $generators = $this->generatorChain->getGenerators($workerConfiguration['generators']);
     $resolvers = $this->resolverChain->getResolvers($workerConfiguration['resolvers']);
     $fileContainer = new FileContainer();
     $output->writeln('<info>Ok</info>');
     $output->write('3 - Check configuration : ');
     foreach (array_merge($generators, $resolvers) as $worker) {
         if ($worker instanceof TreeConfiguratorInterface) {
             $this->configurationTree->addTreeConfigurator($worker);
         }
     }
     $processedConfiguration = $processor->processConfiguration($this->configurationTree, ['root' => $config]);
     $output->writeln('<info>Ok</info>');
     $output->writeln('4 - Process each resolver');
     foreach ($resolvers as $resolver) {
         $output->write('  |-' . basename(get_class($resolver)) . ' : ');
         $processedConfiguration = $resolver->resolve($processedConfiguration);
         $output->writeln('<info>Ok</info>');
     }
     $output->write('5 - Check resolved configuration : ');
     $finalConfiguration = $processor->processConfiguration($this->configurationTree, ['root' => $processedConfiguration]);
     $output->writeln('<info>Ok</info>');
     $output->writeln('6 - Process each Generator');
     foreach ($generators as $generator) {
         $output->write('  |-' . basename(get_class($generator)) . ' : ');
         $generator->generate($finalConfiguration, $fileContainer);
         $output->writeln('<info>Ok</info>');
     }
     $output->write('7 - Create File : ');
     foreach ($fileContainer->getFiles() as $file) {
         //todo : do somethings to manage how file is render (twig is not only way)
         $fileContent = $this->twig->render($file->getRenderTemplate(), ['globalConfig' => $finalConfiguration, 'file' => $file]);
         $this->generateDirecory(dirname($file->getFilePath()));
         file_put_contents($file->getFilePath(), $fileContent);
     }
     $output->writeln('<info>Ok</info>');
     $output->write('8 - Fix Coding style : ');
     $this->fixCs($fileContainer);
     $output->writeln('<info>Ok</info>');
     $output->writeln('<comment>Warning : Coding style fixer is partial, use your IDE to fix correctly.</comment>');
 }