.
*/
/**
* Wrapper class that holds the attributes of a Task (or elements
* nested below that level) and takes care of configuring that element
* at runtime.
*
* SMART-UP INLINE DOCS
*
* @author Andreas Aderhold
* @author Hans Lellelid
* @version $Revision: 905 $
* @package phing
*/
class RuntimeConfigurable {
private $elementTag = null;
private $children = array();
private $wrappedObject = null;
private $attributes = array();
private $characters = "";
/** @param proxy The element to wrap. */
function __construct($proxy, $elementTag) {
$this->wrappedObject = $proxy;
$this->elementTag = $elementTag;
}
function setProxy($proxy) {
$this->wrappedObject = $proxy;
}
/** Set's the attributes for the wrapped element. */
function setAttributes($attributes) {
$this->attributes = $attributes;
}
/** Returns the AttributeList of the wrapped element. */
function getAttributes() {
return $this->attributes;
}
/** Adds child elements to the wrapped element. */
function addChild(RuntimeConfigurable $child) {
$this->children[] = $child;
}
/** Returns the child with index */
function getChild($index) {
return $this->children[(int)$index];
}
/** Add characters from #PCDATA areas to the wrapped element. */
function addText($data) {
$this->characters .= (string) $data;
}
function getElementTag() {
return $this->elementTag;
}
/** Configure the wrapped element and all children. */
function maybeConfigure(Project $project) {
$id = null;
// DataType configured in ProjectConfigurator
// if ( is_a($this->wrappedObject, "DataType") )
// return;
if ($this->attributes || $this->characters) {
ProjectConfigurator::configure($this->wrappedObject, $this->attributes, $project);
if (isset($this->attributes["id"])) {
$id = $this->attributes["id"];
}
$this->attributes = null;
if ($this->characters) {
ProjectConfigurator::addText($project, $this->wrappedObject, (string) $this->characters);
$this->characters="";
}
if ($id !== null) {
$project->addReference($id, $this->wrappedObject);
}
}
if ( is_array($this->children) && !empty($this->children) ) {
// Configure all child of this object ...
foreach($this->children as $child) {
$child->maybeConfigure($project);
ProjectConfigurator::storeChild($project, $this->wrappedObject, $child->wrappedObject, strtolower($child->getElementTag()));
}
}
}
}