home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / phing / RuntimeConfigurable.php < prev    next >
Encoding:
PHP Script  |  2006-09-14  |  3.8 KB  |  119 lines

  1. <?php
  2. /*
  3.  *  $Id: RuntimeConfigurable.php 123 2006-09-14 20:19:08Z mrook $
  4.  *
  5.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  6.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  7.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  8.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  9.  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15.  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16.  *
  17.  * This software consists of voluntary contributions made by many individuals
  18.  * and is licensed under the LGPL. For more information please see
  19.  * <http://phing.info>.
  20.  */
  21.  
  22. /**
  23.  *  Wrapper class that holds the attributes of a Task (or elements
  24.  *  nested below that level) and takes care of configuring that element
  25.  *  at runtime.
  26.  *
  27.  *  <strong>SMART-UP INLINE DOCS</strong>
  28.  *
  29.  * @author    Andreas Aderhold <andi@binarycloud.com>
  30.  * @author    Hans Lellelid <hans@xmpl.org>
  31.  * @version   $Revision: 1.6 $
  32.  * @package   phing
  33.  */
  34. class RuntimeConfigurable {
  35.  
  36.     private $elementTag = null;
  37.     private $children = array();
  38.     private $wrappedObject = null;
  39.     private $attributes = array();
  40.     private $characters = "";
  41.  
  42.  
  43.     /** @param proxy The element to wrap. */
  44.     function __construct($proxy, $elementTag) {
  45.         $this->wrappedObject = $proxy;
  46.         $this->elementTag = $elementTag;
  47.     }
  48.  
  49.     function setProxy($proxy) {
  50.         $this->wrappedObject = $proxy;
  51.     }
  52.  
  53.     /** Set's the attributes for the wrapped element. */
  54.     function setAttributes($attributes) {
  55.         $this->attributes = $attributes;
  56.     }
  57.  
  58.     /** Returns the AttributeList of the wrapped element. */
  59.     function getAttributes() {
  60.         return $this->attributes;
  61.     }
  62.  
  63.     /** Adds child elements to the wrapped element. */
  64.     function addChild(RuntimeConfigurable $child) {
  65.         $this->children[] = $child;
  66.     }
  67.  
  68.     /** Returns the child with index */
  69.     function getChild($index) {
  70.         return $this->children[(int)$index];
  71.     }
  72.  
  73.     /** Add characters from #PCDATA areas to the wrapped element. */
  74.     function addText($data) {
  75.         $this->characters .= (string) $data;
  76.     }
  77.  
  78.     function getElementTag() {
  79.         return $this->elementTag;
  80.     }
  81.  
  82.  
  83.     /** Configure the wrapped element and all children. */
  84.     function maybeConfigure(Project $project) {
  85.         $id = null;
  86.  
  87.         // DataType configured in ProjectConfigurator
  88.         //        if ( is_a($this->wrappedObject, "DataType") )
  89.         //            return;
  90.  
  91.         if ($this->attributes || $this->characters) {
  92.             ProjectConfigurator::configure($this->wrappedObject, $this->attributes, $project);
  93.  
  94.             if (isset($this->attributes["id"])) {
  95.                 $id = $this->attributes["id"];
  96.             }
  97.  
  98.             $this->attributes = null;
  99.  
  100.             if ($this->characters) {
  101.                 ProjectConfigurator::addText($project, $this->wrappedObject, (string) $this->characters);
  102.                 $this->characters="";
  103.             }
  104.             if ($id !== null) {
  105.                 $project->addReference($id, $this->wrappedObject);
  106.             }
  107.         }
  108.  
  109.         if ( is_array($this->children) && !empty($this->children) ) {
  110.             // Configure all child of this object ...
  111.             foreach($this->children as $child) {
  112.                 $child->maybeConfigure($project);
  113.                 ProjectConfigurator::storeChild($project, $this->wrappedObject, $child->wrappedObject, strtolower($child->getElementTag()));
  114.             }
  115.         }
  116.     }
  117. }
  118.  
  119.