diff --git a/setup/modelfactory.class.inc.php b/setup/modelfactory.class.inc.php index 45e61a735..dee1ced55 100644 --- a/setup/modelfactory.class.inc.php +++ b/setup/modelfactory.class.inc.php @@ -316,7 +316,7 @@ class ModelFactory { echo "Dumping target doc - looking for '$sParentId'
\n"; $this->oDOMDocument->firstChild->Dump(); - throw new Exception("could not find parent node for $oSourceNode->tagName(id:".$oSourceNode->getAttribute('id').") with parent id $sParentId"); + throw new Exception(MFDocument::GetItopNodePath($oSourceNode).' at line '.$oSourceNode->getLineNo().": could not find parent with id $sParentId"); } } else @@ -326,7 +326,7 @@ class ModelFactory { echo "Dumping target doc - looking for '".$oSourceNode->getAttribute('id')."'
\n"; $this->oDOMDocument->firstChild->Dump(); - throw new Exception("could not find node for $oSourceNode->tagName(id:".$oSourceNode->getAttribute('id').")"); + throw new Exception(MFDocument::GetItopNodePath($oSourceNode).' at line '.$oSourceNode->getLineNo().": could not be found"); } else { @@ -388,9 +388,13 @@ class ModelFactory case 'delete': $oTargetNode = $oTargetParentNode->_FindChildNode($oSourceNode); - if ( ($oTargetNode == null) || ($oTargetNode->getAttribute('_alteration') == 'removed') ) + if ($oTargetNode == null) { - throw new Exception("Trying to delete node for {$oSourceNode->tagName} (id:".$oSourceNode->getAttribute('id').") under {$oTargetParentNode->tagName} (id:".$oTargetParentNode->getAttribute('id').'). but nothing found.'); + throw new Exception(MFDocument::GetItopNodePath($oSourceNode).' at line '.$oSourceNode->getLineNo().": could not be deleted (not found)"); + } + if ($oTargetNode->getAttribute('_alteration') == 'removed') + { + throw new Exception(MFDocument::GetItopNodePath($oSourceNode).' at line '.$oSourceNode->getLineNo().": could not be deleted (already marked as deleted)"); } $oTargetNode->Delete(); break; @@ -1628,7 +1632,7 @@ class MFElement extends DOMElement { if ($oExisting->getAttribute('_alteration') != 'removed') { - throw new Exception("Attempting to add a node that already exists: $oNode->tagName (id: ".$oNode->getAttribute('id').")"); + throw new Exception(MFDocument::GetItopNodePath($oNode).' at line '.$oNode->getLineNo().": could not be added (already exists)"); } $oExisting->ReplaceWith($oNode); $sFlag = 'replaced'; @@ -1657,12 +1661,14 @@ class MFElement extends DOMElement $oExisting = $this->_FindChildNode($oNode, $sSearchId); if (!$oExisting) { - throw new Exception("Attempting to modify a non existing node: $oNode->tagName (id: ".$oNode->getAttribute('id').")"); + $sSourceNode = MFDocument::GetItopNodePath($this)."/".$oNode->tagName.(is_null($sSearchId) ? '' : "[$sSearchId]").' at line '.$this->getLineNo(); + throw new Exception($sSourceNode.": could not be modified (not found)"); } $sPrevFlag = $oExisting->getAttribute('_alteration'); if ($sPrevFlag == 'removed') { - throw new Exception("Attempting to modify a deleted node: $oNode->tagName (id: ".$oNode->getAttribute('id').""); + $sSourceNode = MFDocument::GetItopNodePath($this)."/".$oNode->tagName.(is_null($sSearchId) ? '' : "[$sSearchId]").' at line '.$this->getLineNo(); + throw new Exception($sSourceNode.": could not be modified (marked as deleted)"); } $oExisting->ReplaceWith($oNode); if (!$this->IsInDefinition()) @@ -1810,7 +1816,7 @@ class MFElement extends DOMElement { if ($bMustExist) { - throw new Exception("found mandatory node $this->tagName(id:$sSearchId) marked as deleted in ".$oContainer->getNodePath()); + throw new Exception(MFDocument::GetItopNodePath($this).' at line '.$this->getLineNo().": could not be found (marked as deleted)"); } // Beware: ImportNode(xxx, false) DOES NOT copy the node's attribute on *some* PHP versions (<5.2.17) // So use this workaround to import a node and its attributes on *any* PHP version @@ -1824,7 +1830,7 @@ class MFElement extends DOMElement { echo "Dumping parent node
\n"; $oContainer->Dump(); - throw new Exception("could not find $this->tagName(id:$sSearchId) in ".$oContainer->getNodePath()); + throw new Exception(MFDocument::GetItopNodePath($this).' at line '.$this->getLineNo().": could not be found"); } // Beware: ImportNode(xxx, false) DOES NOT copy the node's attribute on *some* PHP versions (<5.2.17) // So use this workaround to import a node and its attributes on *any* PHP version @@ -2078,7 +2084,8 @@ class MFDocument extends DOMDocument public static function GetItopNodePath($oNode) { if ($oNode instanceof DOMDocument) return ''; - + if (is_null($oNode)) return ''; + $sId = $oNode->getAttribute('id'); $sNodeDesc = ($sId != '') ? $oNode->nodeName.'['.$sId.']' : $oNode->nodeName; return self::GetItopNodePath($oNode->parentNode).'/'.$sNodeDesc; @@ -2249,7 +2256,7 @@ class MFParameters } } /** - * Check if a node as child nodes (apart from text nodes) + * Check if a node has child nodes (apart from text nodes) */ public function HasChildNodes($oNode) { @@ -2267,6 +2274,7 @@ class MFParameters } function Merge(XMLParameters $oTask) { + //todo: clarify the usage of this function that CANNOT work $this->aData = $this->array_merge_recursive_distinct($this->aData, $oTask->aData); }