Moved DOM methods up the tree, add copy c'tors, KeyInfo sample
[shibboleth/xmltooling.git] / xmltooling / AbstractXMLObject.cpp
index cc9381a..4e0005b 100644 (file)
@@ -22,6 +22,7 @@
 \r
 #include "internal.h"\r
 #include "AbstractXMLObject.h"\r
+#include "exceptions.h"\r
 \r
 #include <algorithm>\r
 #include <log4cpp/Category.hh>\r
@@ -39,3 +40,35 @@ AbstractXMLObject::AbstractXMLObject(const XMLCh* namespaceURI, const XMLCh* ele
 {\r
     addNamespace(Namespace(namespaceURI, namespacePrefix));\r
 }\r
+\r
+AbstractXMLObject::AbstractXMLObject(const AbstractXMLObject& src)\r
+    : m_namespaces(src.m_namespaces), m_log(src.m_log), m_parent(NULL), m_elementQname(src.m_elementQname), m_typeQname(NULL)\r
+{\r
+    if (src.m_typeQname)\r
+        m_typeQname=new QName(*src.m_typeQname);\r
+}\r
+\r
+XMLObject* AbstractXMLObject::prepareForAssignment(XMLObject* oldValue, XMLObject* newValue) {\r
+\r
+    if (newValue && newValue->hasParent())\r
+        throw XMLObjectException("child XMLObject cannot be added - it is already the child of another XMLObject");\r
+\r
+    if (!oldValue) {\r
+        if (newValue) {\r
+            releaseThisandParentDOM();\r
+            newValue->setParent(this);\r
+            return newValue;\r
+        }\r
+        else {\r
+            return NULL;\r
+        }\r
+    }\r
+\r
+    if (oldValue != newValue) {\r
+        delete oldValue;\r
+        releaseThisandParentDOM();\r
+        newValue->setParent(this);\r
+    }\r
+\r
+    return newValue;\r
+}\r