. */ /** * Doctrine_Cli_Task * * @package Doctrine * @subpackage Cli * @license http://www.opensource.org/licenses/lgpl-license.php LGPL * @link www.phpdoctrine.com * @since 1.0 * @version $Revision: 2761 $ * @author Jonathan H. Wage */ abstract class Doctrine_Cli_Task { public $taskName = null, $description = null, $arguments = array(), $requiredArguments = array(), $optionalArguments = array(); abstract function execute(); public function validate($args) { $requiredArguments = $this->getRequiredArguments(); foreach ($requiredArguments as $arg) { if (!isset($args[$arg])) { throw new Doctrine_Cli_Exception('Required arguments missing. The follow arguments are required: ' . implode(', ', $requiredArguments)); } } return true; } public function prepareArgs($args) { $args = array_values($args); $prepared = array(); $requiredArguments = $this->getRequiredArguments(); $count = 0; foreach ($requiredArguments as $key => $arg) { if (isset($args[$count])) { $prepared[$arg] = $args[$count]; } $count++; } $optionalArguments = $this->getOptionalArguments(); foreach ($optionalArguments as $key => $arg) { if (isset($args[$count])) { $prepared[$arg] = $args[$count]; } else { $prepared[$arg] = null; } $count++; } $this->arguments = $prepared; return $prepared; } public function getArgument($name) { return $this->arguments[$name]; } public function getArguments() { return $this->arguments; } public function getTaskName() { return $this->taskName; } public function getDescription() { return $this->description; } public function getRequiredArguments() { return array_keys($this->requiredArguments); } public function getOptionalArguments() { return array_keys($this->optionalArguments); } public function getRequiredArgumentsDescriptions() { return $this->requiredArguments; } public function getOptionalArgumentsDescriptions() { return $this->optionalArguments; } public function getSyntax() { $syntax = './cli ' . $this->getTaskName(); if ($required = $this->getRequiredArguments()) { $syntax .= ' <' . implode('> <', $required) . '>'; } if ($optional = $this->getOptionalArguments()) { $syntax .= ' <' . implode('> <', $optional) . '>'; } return $syntax; } }