Default support for arbitrary DOM objects.
[shibboleth/xmltooling.git] / xmltooling / AbstractDOMCachingXMLObject.cpp
index 0b9f064..8a23062 100644 (file)
@@ -38,14 +38,27 @@ AbstractDOMCachingXMLObject::~AbstractDOMCachingXMLObject()
         m_document->release();\r
 }\r
 \r
+void AbstractDOMCachingXMLObject::setDOM(DOMElement* dom, bool bindDocument)\r
+{\r
+    m_dom=dom;\r
+    if (dom) {\r
+        if (bindDocument) {\r
+            DOMDocument* tmp=setDocument(dom->getOwnerDocument());\r
+            if (tmp)\r
+                tmp->release();\r
+        }\r
+    }\r
+    else if (m_document) {\r
+        m_document->release();\r
+        m_document=NULL;\r
+    }\r
+}\r
+\r
 void AbstractDOMCachingXMLObject::releaseDOM()\r
 {\r
     Category& log=Category::getInstance(XMLTOOLING_LOGCAT".DOM");\r
     if (log.isDebugEnabled())\r
-        log.debug("Releasing cached DOM reprsentation for %s", getElementQName().toString().c_str());\r
-\r
-    // We don't get rid of the document we're holding, if any.\r
-    // The marshalling process deals with that.\r
+        log.debug("releasing cached DOM reprsentation for %s", getElementQName().toString().c_str());\r
     setDOM(NULL);\r
 }\r
 \r
@@ -54,7 +67,7 @@ void AbstractDOMCachingXMLObject::releaseParentDOM(bool propagateRelease)
     Category& log=Category::getInstance(XMLTOOLING_LOGCAT".DOM");\r
     if (log.isDebugEnabled()) {\r
         log.debug(\r
-            "Releasing cached DOM representation for parent of %s with propagation set to %s",\r
+            "releasing cached DOM representation for parent of %s with propagation set to %s",\r
             getElementQName().toString().c_str(), propagateRelease ? "true" : "false"\r
             );\r
     }\r
@@ -70,11 +83,11 @@ void AbstractDOMCachingXMLObject::releaseParentDOM(bool propagateRelease)
 class _release : public binary_function<XMLObject*,bool,void> {\r
 public:\r
     void operator()(XMLObject* obj, bool propagate) const {\r
-        DOMCachingXMLObject* domCachingParent = dynamic_cast<DOMCachingXMLObject*>(obj);\r
-        if (domCachingParent) {\r
-            domCachingParent->releaseDOM();\r
+        DOMCachingXMLObject* domCaching = dynamic_cast<DOMCachingXMLObject*>(obj);\r
+        if (domCaching) {\r
+            domCaching->releaseDOM();\r
             if (propagate)\r
-                domCachingParent->releaseChildrenDOM(propagate);\r
+                domCaching->releaseChildrenDOM(propagate);\r
         }\r
     }\r
 };\r
@@ -84,7 +97,7 @@ void AbstractDOMCachingXMLObject::releaseChildrenDOM(bool propagateRelease)
     Category& log=Category::getInstance(XMLTOOLING_LOGCAT".DOM");\r
     if (log.isDebugEnabled()) {\r
         log.debug(\r
-            "Releasing cached DOM representation for children of %s with propagation set to %s",\r
+            "releasing cached DOM representation for children of %s with propagation set to %s",\r
             getElementQName().toString().c_str(), propagateRelease ? "true" : "false"\r
             );\r
     }\r