/** * Add the given class to the DOM * @param DOMNode $oClassNode * @param string $sModuleName The name of the module in which this class is declared * @throws Exception */ public function AddClass(DOMNode $oClassNode, $sModuleName) { if ($oClassNode->hasAttribute('id')) { $sClassName = $oClassNode->GetAttribute('id'); } else { throw new Exception('ModelFactory::AddClass: Cannot add a class with no name'); } if ($this->ClassNameExists($oClassNode->getAttribute('id'))) { throw new Exception("ModelFactory::AddClass: Cannot add the already existing class {$sClassName}"); } $sParentClass = $oClassNode->GetChildText('parent', ''); $oParentNode = $this->GetClass($sParentClass); if ($oParentNode == null) { throw new Exception("ModelFactory::AddClass: Cannot find the parent class of '{$sClassName}': '{$sParentClass}'"); } else { if ($sModuleName != '') { $oClassNode->SetAttribute('_created_in', $sModuleName); } $oParentNode->AddChildNode($this->oDOMDocument->importNode($oClassNode, true)); if (substr($sParentClass, 0, 1) == '/') { // Remove the leading slash character $oParentNameNode = $oClassNode->GetOptionalElement('parent')->firstChild; // Get the DOMCharacterData node $oParentNameNode->data = substr($sParentClass, 1); } } }