File: //usr/share/php/Doctrine/Bundle/DoctrineBundle/Command/Proxy/DelegateCommand.php
<?php
namespace Doctrine\Bundle\DoctrineBundle\Command\Proxy;
use RuntimeException;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Command Delegate.
*/
abstract class DelegateCommand extends Command
{
/** @var Command */
protected $command;
/**
* @return Command
*/
abstract protected function createCommand();
/**
* @return string
*/
protected function getMinimalVersion()
{
return '2.3.0-DEV';
}
/**
* {@inheritDoc}
*/
public function isEnabled()
{
return $this->isVersionCompatible();
}
/**
* @param string $entityManagerName
*
* @return Command
*/
protected function wrapCommand($entityManagerName)
{
if (! $this->isVersionCompatible()) {
throw new RuntimeException(sprintf('"%s" requires doctrine-orm "%s" or newer', $this->getName(), $this->getMinimalVersion()));
}
DoctrineCommandHelper::setApplicationEntityManager($this->getApplication(), $entityManagerName);
$this->command->setApplication($this->getApplication());
return $this->command;
}
/**
* {@inheritDoc}
*/
protected function configure()
{
if ($this->isVersionCompatible()) {
$this->command = $this->createCommand();
$this->setHelp($this->command->getHelp());
$this->setDefinition($this->command->getDefinition());
$this->setDescription($this->command->getDescription());
}
$this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command');
}
/**
* {@inheritDoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
return $this->wrapCommand($input->getOption('em'))->execute($input, $output);
}
/**
* {@inheritDoc}
*/
protected function interact(InputInterface $input, OutputInterface $output)
{
$this->wrapCommand($input->getOption('em'))->interact($input, $output);
}
/**
* {@inheritDoc}
*/
protected function initialize(InputInterface $input, OutputInterface $output)
{
$this->wrapCommand($input->getOption('em'))->initialize($input, $output);
}
}