. */ require_once 'phing/TaskPhing.php'; include_once 'phing/tasks/system/PhingTask.php'; /** * task * * Task definition for the foreach task. This task takes a list with * delimited values, and executes a target with set param. * * Usage: * * * Attributes: * list --> The list of values to process, with the delimiter character, * indicated by the "delimiter" attribute, separating each value. * target --> The target to call for each token, passing the token as the * parameter with the name indicated by the "param" attribute. * param --> The name of the parameter to pass the tokens in as to the * target. * delimiter --> The delimiter string that separates the values in the "list" * parameter. The default is ",". * * @author Jason Hines * @author Hans Lellelid * @version $Revision: 1.9 $ * @package phing.tasks.system */ class ForeachTask extends TaskPhing { /** Delimter-separated list of values to process. */ private $list; /** Name of parameter to pass to callee */ private $param; /** Delimter that separates items in $list */ private $delimiter = ','; /** * PhingCallTask that will be invoked w/ calleeTarget. * @var PhingCallTask */ private $callee; /** * Target to execute. * @var string */ private $calleeTarget; function init() { $this->callee = $this->project->createTask("phingcall"); $this->callee->setOwningTarget($this->getOwningTarget()); $this->callee->setTaskName($this->getTaskName()); $this->callee->setLocation($this->getLocation()); $this->callee->init(); } /** * This method does the work. * @return void */ function main() { if ($this->list === null) { throw new BuildException("Missing list to iterate through"); } if (trim($this->list) === '') { return; } if ($this->param === null) { throw new BuildException("You must supply a property name to set on each iteration in param"); } if ($this->calleeTarget === null) { throw new BuildException("You must supply a target to perform"); } $callee = $this->callee; $callee->setTarget($this->calleeTarget); $callee->setInheritAll(true); $callee->setInheritRefs(true); $arr = explode($this->delimiter, $this->list); foreach ($arr as $value) { $this->log("Setting param '$this->param' to value '$value'", PROJECT_MSG_VERBOSE); $prop = $callee->createProperty(); $prop->setOverride(true); $prop->setName($this->param); $prop->setValue($value); $callee->main(); } } function setList($list) { $this->list = (string) $list; } function setTarget($target) { $this->calleeTarget = (string) $target; } function setParam($param) { $this->param = (string) $param; } function setDelimiter($delimiter) { $this->delimiter = (string) $delimiter; } /** * @return Property */ function createProperty() { return $this->callee->createProperty(); } }