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