/** * 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); } } }