. */ require_once 'phing/ProjectComponent.php'; include_once 'phing/Project.php'; include_once 'phing/tasks/system/AvailableTask.php'; include_once 'phing/tasks/system/condition/Condition.php'; /** * Abstract baseclass for the task as well as several * conditions - ensures that the types of conditions inside the task * and the "container" conditions are in sync. * * @author Hans Lellelid * @author Andreas Aderhold * @copyright © 2001,2002 THYRELL. All rights reserved * @version $Revision: 905 $ * @package phing.tasks.system.condition */ abstract class ConditionBase extends ProjectComponent implements IteratorAggregate { public $conditions = array(); // needs to be public for "inner" class access function countConditions() { return count($this->conditions); } /** * Required for IteratorAggregate */ function getIterator() { return new ConditionEnumeration($this); } function getConditions() { return $this->conditions; } /** * @return void */ function addAvailable(AvailableTask $a) { $this->conditions[] = $a; } /** * @return NotCondition */ function createNot() { include_once 'phing/tasks/system/condition/NotCondition.php'; $num = array_push($this->conditions, new NotCondition()); return $this->conditions[$num-1]; } /** * @return AndCondition */ function createAnd() { include_once 'phing/tasks/system/condition/AndCondition.php'; $num = array_push($this->conditions, new AndCondition()); return $this->conditions[$num-1]; } /** * @return OrCondition */ function createOr() { include_once 'phing/tasks/system/condition/OrCondition.php'; $num = array_push($this->conditions, new OrCondition()); return $this->conditions[$num-1]; } /** * @return EqualsCondition */ function createEquals() { include_once 'phing/tasks/system/condition/EqualsCondition.php'; $num = array_push($this->conditions, new EqualsCondition()); return $this->conditions[$num-1]; } /** * @return OsCondition */ function createOs() { include_once 'phing/tasks/system/condition/OsCondition.php'; $num = array_push($this->conditions, new OsCondition()); return $this->conditions[$num-1]; } /** * @return IsFalseCondition */ function createIsFalse() { include_once 'phing/tasks/system/condition/IsFalseCondition.php'; $num = array_push($this->conditions, new IsFalseCondition()); return $this->conditions[$num-1]; } /** * @return IsTrueCondition */ function createIsTrue() { include_once 'phing/tasks/system/condition/IsTrueCondition.php'; $num = array_push($this->conditions, new IsTrueCondition()); return $this->conditions[$num-1]; } /** * @return ContainsCondition */ function createContains() { include_once 'phing/tasks/system/condition/ContainsCondition.php'; $num = array_push($this->conditions, new ContainsCondition()); return $this->conditions[$num-1]; } /** * @return IsSetCondition */ function createIsSet() { include_once 'phing/tasks/system/condition/IsSetCondition.php'; $num = array_push($this->conditions, new IsSetCondition()); return $this->conditions[$num-1]; } /** * @return ReferenceExistsCondition */ function createReferenceExists() { include_once 'phing/tasks/system/condition/ReferenceExistsCondition.php'; $num = array_push($this->conditions, new ReferenceExistsCondition()); return $this->conditions[$num-1]; } } /** * "Inner" class for handling enumerations. * Uses build-in PHP5 iterator support. * * @package phing.tasks.system.condition */ class ConditionEnumeration implements Iterator { /** Current element number */ private $num = 0; /** "Outer" ConditionBase class. */ private $outer; function __construct(ConditionBase $outer) { $this->outer = $outer; } public function valid() { return $this->outer->countConditions() > $this->num; } function current() { $o = $this->outer->conditions[$this->num]; if ($o instanceof ProjectComponent) { $o->setProject($this->outer->getProject()); } return $o; } function next() { $this->num++; } function key() { return $this->num; } function rewind() { $this->num = 0; } }