コード例 #1
0
 /**
  * Compare the properties of each object and remove/update
  * the properties and the related methods
  *
  * @param Tx_ExtensionBuilder_Domain_Model_DomainObject $oldDomainObject
  * @param Tx_ExtensionBuilder_Domain_Model_DomainObject $newDomainObject
  *
  * return void (all actions are performed on $this->classObject
  */
 protected function updateModelClassProperties(Tx_ExtensionBuilder_Domain_Model_DomainObject $oldDomainObject, Tx_ExtensionBuilder_Domain_Model_DomainObject $newDomainObject)
 {
     $newProperties = array();
     foreach ($newDomainObject->getProperties() as $property) {
         $newProperties[$property->getUniqueIdentifier()] = $property;
     }
     //t3lib_div::devlog('properties new:','extension_builder',0,$newProperties);
     // compare all old properties with new ones
     foreach ($oldDomainObject->getProperties() as $oldProperty) {
         if (isset($newProperties[$oldProperty->getUniqueIdentifier()])) {
             $newProperty = $newProperties[$oldProperty->getUniqueIdentifier()];
             // relation type changed
             if ($oldProperty->isAnyToManyRelation() != $newProperty->isAnyToManyRelation()) {
                 t3lib_div::devlog('property type changed:' . $oldProperty->getName() . ' ' . $newProperty->getName(), 'extension_builder', 0, $newProperties);
                 // remove old methods since we won't convert getter and setter methods to add/remove methods
                 if ($oldProperty->isAnyToManyRelation()) {
                     $this->classObject->removeMethod('add' . ucfirst(Tx_ExtensionBuilder_Utility_Inflector::singularize($oldProperty->getName())));
                     $this->classObject->removeMethod('remove' . ucfirst(Tx_ExtensionBuilder_Utility_Inflector::singularize($oldProperty->getName())));
                 }
                 $this->classObject->removeMethod('get' . ucfirst($oldProperty->getName()));
                 $this->classObject->removeMethod('set' . ucfirst($oldProperty->getName()));
                 if ($oldProperty->isBoolean()) {
                     $this->classObject->removeMethod('is' . ucfirst(Tx_ExtensionBuilder_Utility_Inflector::singularize($oldProperty->getName())));
                 }
                 $this->classObject->removeProperty($oldProperty->getName());
                 t3lib_div::devlog('property type changed => removed old property:' . $oldProperty->getName(), 'extension_builder', 1);
             } else {
                 $this->updateProperty($oldProperty, $newProperty);
                 $newDomainObject->getPropertyByName($newProperty->getName())->setNew(FALSE);
             }
         } else {
             $this->removePropertyAndRelatedMethods($oldProperty);
         }
     }
 }