Source for file DataDescription.class.php

Documentation is available at DataDescription.class.php

  1. /**
  2.  * Класс DataDescription.
  3.  *
  4.  * @package energine
  5.  * @subpackage core
  6.  * @author dr.Pavka
  7.  * @copyright ColoCall 2006
  8.  * @version $Id: fsource_energine_core_frameworkDataDescription.class.php.html,v 1.1 2007/09/17 14:32:33 pavka Exp $
  9.  */
  10.  
  11. require_once 'core/framework/Object.class.php';
  12. require_once 'core/framework/FieldDescription.class.php';
  13.  
  14. /**
  15.  * Мета-данные.
  16.  *
  17.  * @package energine
  18.  * @subpackage core
  19.  */
  20. class DataDescription extends Object implements Iterator {
  21.  
  22.     /**
  23.      * @access private
  24.      * @var array мета-данные полей
  25.      */
  26.     private $fieldDescriptions;
  27.  
  28.     /**
  29.      * @access private
  30.      * @var int количество полей данных
  31.      */
  32.     private $length;
  33.  
  34.     /**
  35.      * @access private
  36.      * @var int индекс текущего элемента (используется для итерации)
  37.      */
  38.     private $currentIndex = 0;
  39.  
  40.     /**
  41.      * Конструктор класса.
  42.      *
  43.      * @access public
  44.      * @return void 
  45.      */
  46.     public function __construct({
  47.         parent::__construct();
  48.  
  49.         $this->fieldDescriptions = array();
  50.         $this->length = 0;
  51.     }
  52.  
  53.     /**
  54.      * Загружает описание данных полученных из БД.
  55.      *
  56.      * @access public
  57.      * @param array $columnsInfo 
  58.      * @return void 
  59.      * @see DBA::getColumnsInfo()
  60.      */
  61.     public function load(array $columnsInfo{
  62.         foreach ($columnsInfo as $columnName => $columnInfo{
  63.             $fieldDescr new FieldDescription($columnName);
  64.             $fieldDescr->loadArray($columnInfo);
  65.             $this->addFieldDescription($fieldDescr);
  66.         }
  67.     }
  68.  
  69.     /**
  70.      * Загружает описание данных полученных из конфигурационного XML файла.
  71.      *
  72.      * @access public
  73.      * @param SimpleXMLElement $xmlDescr 
  74.      * @return void 
  75.      */
  76.     public function loadXML(SimpleXMLElement $xmlDescr{
  77.         if (!empty($xmlDescr))
  78.         foreach ($xmlDescr->field as $fieldXmlDescr{
  79.             $fieldDescr new FieldDescription();
  80.             $fieldDescr->loadXML($fieldXmlDescr);
  81.             $this->addFieldDescription($fieldDescr);
  82.         }
  83.     }
  84.  
  85.     /**
  86.      * Добавляет описание поля данных.
  87.      *
  88.      * @access public
  89.      * @param FieldDescription $fieldDescription 
  90.      * @return void 
  91.      */
  92.     public function addFieldDescription(FieldDescription $fieldDescription{
  93.         $this->fieldDescriptions[$fieldDescription->getName()$fieldDescription;
  94.         $this->length++;
  95.     }
  96.  
  97.     /**
  98.      * Удаляет описание поля данных.
  99.      *
  100.      * @access public
  101.      * @param FieldDescription $fieldDescription 
  102.      * @return void 
  103.      */
  104.     public function removeFieldDescription(FieldDescription $fieldDescription{
  105.         if (isset($this->fieldDescriptions[$fieldDescription->getName()])) {
  106.             unset($this->fieldDescriptions[$fieldDescription->getName()]);
  107.             $this->length--;
  108.         }
  109.     }
  110.  
  111.     /**
  112.      * Возвращает описание поля данных по имени поля,
  113.      * или false, если такого поля не существует.
  114.      *
  115.      * @access public
  116.      * @param string $name 
  117.      * @return FieldDescription 
  118.      */
  119.     public function getFieldDescriptionByName($name{
  120.         $fieldDescription false;
  121.         if (isset($this->fieldDescriptions[$name])) {
  122.             $fieldDescription $this->fieldDescriptions[$name];
  123.         }
  124.         return $fieldDescription;
  125.     }
  126.  
  127.     /**
  128.      * Возвращает описания полей данных.
  129.      *
  130.      * @access public
  131.      * @return array 
  132.      */
  133.     public function getFieldDescriptions({
  134.         return $this->fieldDescriptions;
  135.     }
  136.  
  137.     /**
  138.      * Возвращает список имён полей данных.
  139.      *
  140.      * @return array 
  141.      * @access public
  142.      */
  143.     public function getFieldDescriptionList({
  144.         return array_keys($this->fieldDescriptions);
  145.     }
  146.  
  147.     /**
  148.      * Возвращает количество полей данных.
  149.      *
  150.      * @access public
  151.      * @return int 
  152.      */
  153.     public function getLength({
  154.         return $this->length;
  155.     }
  156.  
  157.     /**
  158.      * Создаёт пересечение описания данных с другим описанием данных.
  159.      *
  160.      * @access public
  161.      * @param DataDescription $otherDataDescr 
  162.      * @return DataDescription 
  163.      */
  164.     public function intersect(DataDescription $otherDataDescr{
  165.         $result false;
  166.         if ($this->getLength(== 0{
  167.             $result $otherDataDescr;
  168.         }
  169.         else {
  170.             // проходимся по описаниям полей текущего объекта
  171.             foreach ($this->fieldDescriptions as $fieldName => $fieldDescription{
  172.                 // если существует описание из БД - пересекаем с ним
  173.                 if ($otherDataDescr->getFieldDescriptionByName($fieldName)) {
  174.                     $this->fieldDescriptions[$fieldNameFieldDescription::intersect(
  175.                         $this->fieldDescriptions[$fieldName],
  176.                         $otherDataDescr->getFieldDescriptionByName($fieldName)
  177.                     );
  178.                 }
  179.                 /*
  180.                  * Если описания из БД отсутствует, устанавливаем дополнительное свойство customField,
  181.                  * которое указывает на то, что данные этого поля сохранять в БД не нужно.
  182.                  */
  183.                 else {
  184.                     $this->getFieldDescriptionByName($fieldName)->addProperty('customField''customField');
  185.                 }
  186.             }
  187.             $result $this;
  188.         }
  189.         return $result;
  190.     }
  191.  
  192.     /**
  193.      * Перемещает итератор на первый элемент.
  194.      *
  195.      * @access public
  196.      * @return void 
  197.      */
  198.     public function rewind({
  199.         $this->currentIndex 0;
  200.     }
  201.  
  202.     /**
  203.      * Возвращает текущий элемент.
  204.      *
  205.      * @access public
  206.      * @return mixed 
  207.      */
  208.     public function current({
  209.         $fieldNames $this->getFieldDescriptionList();
  210.         return $this->fieldDescriptions[$fieldNames[$this->currentIndex]];
  211.     }
  212.  
  213.     /**
  214.      * Возвращает ключ текущего элемента.
  215.      *
  216.      * @access public
  217.      * @return mixed 
  218.      */
  219.     public function key({
  220.         $fieldNames $this->getFieldDescriptionList();
  221.         return $fieldNames[$this->currentIndex];
  222.     }
  223.  
  224.     /**
  225.      * Перемещает итератор на следующий элемент.
  226.      *
  227.      * @access public
  228.      * @return void 
  229.      */
  230.     public function next({
  231.         $this->currentIndex++;
  232.     }
  233.  
  234.     /**
  235.      * Проверяет, существует ли текущий элемент.
  236.      *
  237.      * @access public
  238.      * @return boolean 
  239.      */
  240.     public function valid({
  241.         return ($this->currentIndex $this->length);
  242.     }
  243. }

Documentation generated on Mon, 17 Sep 2007 13:26:25 +0300 by phpDocumentor 1.4.0a2