/**
  * {@inheritdoc}
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $configOptions = [];
     $connection = $input->getArgument('connection');
     if (false === strpos($connection, ':')) {
         //treat it as connection name
         $configOptions['propel']['reverse']['connection'] = $connection;
         if (!$input->getOption('database-name')) {
             $input->setOption('database-name', $connection);
         }
     } else {
         //probably a dsn
         $configOptions += $this->connectionToProperties('reverseconnection=' . $connection, 'reverse');
         $configOptions['propel']['reverse']['parserClass'] = sprintf('\\Propel\\Generator\\Reverse\\%sSchemaParser', ucfirst($configOptions['propel']['database']['connections']['reverseconnection']['adapter']));
         if (!$input->getOption('database-name')) {
             $input->setOption('database-name', self::DEFAULT_DATABASE_NAME);
         }
     }
     $generatorConfig = $this->getGeneratorConfig($configOptions, $input);
     $this->createDirectory($input->getOption('output-dir'));
     $manager = new ReverseManager(new XmlDumper());
     $manager->setGeneratorConfig($generatorConfig);
     $manager->setLoggerClosure(function ($message) use($input, $output) {
         if ($input->getOption('verbose')) {
             $output->writeln($message);
         }
     });
     $manager->setWorkingDirectory($input->getOption('output-dir'));
     $manager->setDatabaseName($input->getOption('database-name'));
     $manager->setSchemaName($input->getOption('schema-name'));
     $namespace = $input->getOption('namespace');
     if ($namespace) {
         $manager->setNamespace($namespace);
     }
     if (true === $manager->reverse()) {
         $output->writeln('<info>Schema reverse engineering finished.</info>');
     }
 }