TYPO3 API  SVNRelease
class.t3lib_utility_dependency_factory.php
Go to the documentation of this file.
00001 <?php
00002 /***************************************************************
00003  * Copyright notice
00004  *
00005  * (c) 2010-2011 Oliver Hader <oliver@typo3.org>
00006  * All rights reserved
00007  *
00008  * This script is part of the TYPO3 project. The TYPO3 project is
00009  * free software; you can redistribute it and/or modify
00010  * it under the terms of the GNU General Public License as published by
00011  * the Free Software Foundation; either version 2 of the License, or
00012  * (at your option) any later version.
00013  *
00014  * The GNU General Public License can be found at
00015  * http://www.gnu.org/copyleft/gpl.html.
00016  * A copy is found in the textfile GPL.txt and important notices to the license
00017  * from the author is found in LICENSE.txt distributed with these scripts.
00018  *
00019  *
00020  * This script is distributed in the hope that it will be useful,
00021  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00022  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023  * GNU General Public License for more details.
00024  *
00025  * This copyright notice MUST APPEAR in all copies of the script!
00026  ***************************************************************/
00027 
00028 /**
00029  * Object to create and keep track of element or reference entities.
00030  */
00031 class t3lib_utility_Dependency_Factory {
00032     /**
00033      * @var array
00034      */
00035     protected $elements = array();
00036 
00037     /**
00038      * @var array
00039      */
00040     protected $references = array();
00041 
00042     /**
00043      * Gets and registers a new element.
00044      *
00045      * @param string $table
00046      * @param integer $id
00047      * @param array $data (optional)
00048      * @param t3lib_utility_Dependency $dependency
00049      * @return t3lib_utility_Dependency_Element
00050      */
00051     public function getElement($table, $id, array $data = array(), t3lib_utility_Dependency $dependency) {
00052         $elementName = $table . ':' . $id;
00053         if (!isset($this->elements[$elementName])) {
00054             $this->elements[$elementName] = t3lib_div::makeInstance(
00055                 't3lib_utility_Dependency_Element',
00056                 $table, $id, $data, $dependency
00057             );
00058         }
00059         return $this->elements[$elementName];
00060     }
00061 
00062     /**
00063      * Gets and registers a new reference.
00064      *
00065      * @param t3lib_utility_Dependency_Element $element
00066      * @param string $field
00067      * @return t3lib_utility_Dependency_Reference
00068      */
00069     public function getReference(t3lib_utility_Dependency_Element $element, $field) {
00070         $referenceName = $element->__toString() . '.' . $field;
00071         if (!isset($this->references[$referenceName][$field])) {
00072             $this->references[$referenceName][$field] = t3lib_div::makeInstance(
00073                 't3lib_utility_Dependency_Reference',
00074                 $element, $field
00075             );
00076         }
00077         return $this->references[$referenceName][$field];
00078     }
00079 
00080     /**
00081      * Gets and registers a new reference.
00082      *
00083      * @param string $table
00084      * @param integer $id
00085      * @param string $field
00086      * @param array $data (optional
00087      * @param t3lib_utility_Dependency $dependency
00088      * @return t3lib_utility_Dependency_Reference
00089      * @see getElement
00090      * @see getReference
00091      */
00092     public function getReferencedElement($table, $id, $field, array $data = array(), t3lib_utility_Dependency $dependency) {
00093         return $this->getReference(
00094             $this->getElement($table, $id, $data, $dependency),
00095             $field
00096         );
00097     }
00098 }