[+BUGFIX] Extbase (Persistence): Fixed a problem where the cache was cleared at every...
[Packages/TYPO3.CMS.git] / typo3 / sysext / extbase / Classes / DomainObject / AbstractDomainObject.php
index 14b16b7..deee8d3 100644 (file)
 ***************************************************************/
 
 /**
 ***************************************************************/
 
 /**
- * A generic Domain Object
+ * A generic Domain Object.
+ *
+ * All Model domain objects need to inherit from either AbstractEntity or AbstractValueObject, as this provides important framework information.
  *
  * @package Extbase
  *
  * @package Extbase
- * @subpackage extbase
+ * @subpackage DomainObject
  * @version $ID:$
  */
 abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbase_DomainObject_DomainObjectInterface {
 
        /**
  * @version $ID:$
  */
 abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbase_DomainObject_DomainObjectInterface {
 
        /**
-        * @var string The uid
+        * @var int The uid
         */
        protected $uid;
 
         */
        protected $uid;
 
+       /**
+        * TRUE if the object is a clone
+        * @var boolean
+        */
+       private $isClone = FALSE;
+
        /**
         * The generic constructor. If you want to implement your own __constructor() method in your Domain Object you have to call
         * $this->initializeObject() in the first line of your constructor.
        /**
         * The generic constructor. If you want to implement your own __constructor() method in your Domain Object you have to call
         * $this->initializeObject() in the first line of your constructor.
@@ -52,7 +60,6 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         * parent::__wakeup() first!
         *
         * @return void
         * parent::__wakeup() first!
         *
         * @return void
-        * @internal
         */
        public function __wakeup() {
                $this->initializeObject();
         */
        public function __wakeup() {
                $this->initializeObject();
@@ -68,7 +75,7 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
        }
 
        /**
        }
 
        /**
-        * Getter for uid. 
+        * Getter for uid.
         *
         * @return int the uid or NULL if none set yet.
         */
         *
         * @return int the uid or NULL if none set yet.
         */
@@ -76,25 +83,15 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
                return ($this->uid === NULL ? NULL : (int)$this->uid);
        }
 
                return ($this->uid === NULL ? NULL : (int)$this->uid);
        }
 
-       /**
-        * Getter for the identifier
-        *
-        * @return int the uid or NULL if none set yet.
-        */
-       final public function getIdentifier() {
-               return ($this->uid === NULL ? NULL : (int)$this->uid);
-       }
-
        /**
         * Reconstitutes a property. Only for internal use.
         *
         * @param string $propertyName
         * @param string $value
         * @return void
        /**
         * Reconstitutes a property. Only for internal use.
         *
         * @param string $propertyName
         * @param string $value
         * @return void
-        * @internal
         */
        public function _setProperty($propertyName, $propertyValue) {
         */
        public function _setProperty($propertyName, $propertyValue) {
-               if (property_exists($this, $propertyName)) {
+               if ($this->_hasProperty($propertyName)) {
                        $this->$propertyName = $propertyValue;
                        return TRUE;
                }
                        $this->$propertyName = $propertyValue;
                        return TRUE;
                }
@@ -105,7 +102,6 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         * Returns the property value of the given property name. Only for internal use.
         *
         * @return mixed The propertyValue
         * Returns the property value of the given property name. Only for internal use.
         *
         * @return mixed The propertyValue
-        * @internal
         */
        public function _getProperty($propertyName) {
                return $this->$propertyName;
         */
        public function _getProperty($propertyName) {
                return $this->$propertyName;
@@ -115,19 +111,27 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         * Returns a hash map of property names and property values. Only for internal use.
         *
         * @return array The properties
         * Returns a hash map of property names and property values. Only for internal use.
         *
         * @return array The properties
-        * @internal
         */
        public function _getProperties() {
                $properties = get_object_vars($this);
                unset($properties['_cleanProperties']);
                return $properties;
        }
         */
        public function _getProperties() {
                $properties = get_object_vars($this);
                unset($properties['_cleanProperties']);
                return $properties;
        }
+       
+       /**
+        * Returns the property value of the given property name. Only for internal use.
+        *
+        * @return boolean TRUE bool true if the property exists, FALSE if it doesn't exist or
+        * NULL in case of an error.
+        */
+       public function _hasProperty($propertyName) {
+               return property_exists($this, $propertyName);
+       }
 
        /**
         * Returns TRUE if the object is new (the uid was not set, yet). Only for internal use
         *
         * @return boolean
 
        /**
         * Returns TRUE if the object is new (the uid was not set, yet). Only for internal use
         *
         * @return boolean
-        * @internal
         */
        public function _isNew() {
                return $this->uid === NULL;
         */
        public function _isNew() {
                return $this->uid === NULL;
@@ -138,29 +142,47 @@ abstract class Tx_Extbase_DomainObject_AbstractDomainObject implements Tx_Extbas
         * from the database
         *
         * @return void
         * from the database
         *
         * @return void
-        * @internal
         */
        public function _memorizeCleanState() {
        }
         */
        public function _memorizeCleanState() {
        }
+       
+       /**
+        * Returns TRUE if the properties were modified after reconstitution. However, value objects can be never updated.
+        *
+        * @return boolean
+        */
+       public function _isDirty($propertyName = NULL) {
+               return FALSE;
+       }
 
        /**
 
        /**
-        * Returns a hash map of dirty properties and $values. This is always the empty array for ValueObjects, because ValueObjects never change.
+        * Returns TRUE if the object has been clonesd, cloned, FALSE otherwise.
         *
         *
-        * @return array
-        * @internal
+        * @return boolean TRUE if the object has been cloned
         */
         */
-       public function _getDirtyProperties() {
-               return array();
+       public function _isClone() {
+               return $this->isClone;
        }
 
        /**
        }
 
        /**
-        * Returns TRUE if the properties were modified after reconstitution. However, value objects can be never updated.
+        * Setter whether this Domain Object is a clone of another one.
+        * NEVER SET THIS PROPERTY DIRECTLY. We currently need it to make the
+        * _isDirty check inside AbstractEntity work, but it is just a work-
+        * around right now.
         *
         *
-        * @return boolean
-        * @internal
+        * @param boolean $clone
         */
         */
-       public function _isDirty() {
-               return FALSE;
+       public function _setClone($clone) {
+               $this->isClone = (boolean)$clone;
+       }
+
+       /**
+        * Clone method. Sets the _isClone property.
+        *
+        * @return void
+        */
+       public function __clone() {
+               $this->isClone = TRUE;
        }
 }
 ?>
\ No newline at end of file
        }
 }
 ?>
\ No newline at end of file