Multi-line svn commit, see body.
[shibboleth/cpp-xmltooling.git] / xmltooling / impl / AnyElement.cpp
index 8ed8a8d..bdb3ccc 100644 (file)
  */
 
 #include "internal.h"
-#include "AbstractAttributeExtensibleXMLObject.h"
-#include "AbstractElementProxy.h"
 #include "exceptions.h"
 #include "impl/AnyElement.h"
-#include "io/AbstractXMLObjectMarshaller.h"
-#include "io/AbstractXMLObjectUnmarshaller.h"
 #include "util/NDC.h"
 #include "util/XMLHelper.h"
 
@@ -37,84 +33,38 @@ using namespace xmltooling;
 using namespace log4cpp;
 using namespace std;
 
-#if defined (_MSC_VER)
-    #pragma warning( push )
-    #pragma warning( disable : 4250 4251 )
-#endif
+XMLObject* AnyElementImpl::clone() const {
+    auto_ptr<XMLObject> domClone(AbstractDOMCachingXMLObject::clone());
+    AnyElementImpl* ret=dynamic_cast<AnyElementImpl*>(domClone.get());
+    if (ret) {
+        domClone.release();
+        return ret;
+    }
 
-namespace xmltooling {
-
-    /**
-     * Implements a smart wrapper around unknown DOM content.
-     */
-    class XMLTOOL_DLLLOCAL AnyElementImpl : public AbstractDOMCachingXMLObject,
-        public AbstractElementProxy, public AbstractAttributeExtensibleXMLObject,
-        public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller
-    {
-    public:
-        virtual ~AnyElementImpl() {}
-
-        AnyElementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix)
-            : AbstractXMLObject(nsURI, localName, prefix) {}
-        
-        AnyElementImpl* clone() const {
-            auto_ptr<XMLObject> domClone(AbstractDOMCachingXMLObject::clone());
-            AnyElementImpl* ret=dynamic_cast<AnyElementImpl*>(domClone.get());
-            if (ret) {
-                domClone.release();
-                return ret;
-            }
-
-            return new AnyElementImpl(*this);
-        }
-
-    protected:
-        AnyElementImpl(const AnyElementImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src),
-            AbstractElementProxy(src), AbstractAttributeExtensibleXMLObject(src) {
-            for (list<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
-                getXMLObjects().push_back((*i) ? (*i)->clone() : NULL);
-            }
-        }       
-        
-        void marshallAttributes(DOMElement* domElement) const {
-            for (map<QName,XMLCh*>::const_iterator i=m_attributeMap.begin(); i!=m_attributeMap.end(); i++) {
-                DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(i->first.getNamespaceURI(),i->first.getLocalPart());
-                if (i->first.hasPrefix())
-                    attr->setPrefix(i->first.getPrefix());
-                attr->setNodeValue(i->second);
-                domElement->setAttributeNode(attr);
-            }
-        }
-
-        void marshallElementContent(DOMElement* domElement) const {
-            if(getTextContent()) {
-                domElement->appendChild(domElement->getOwnerDocument()->createTextNode(getTextContent()));
-            }
-        }
-
-        void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
-            getXMLObjects().push_back(childXMLObject);
-        }
-
-        void processAttribute(const DOMAttr* attribute) {
-            QName q(attribute->getNamespaceURI(),attribute->getLocalName(),attribute->getPrefix()); 
-            setAttribute(q,attribute->getNodeValue());
-        }
+    return new AnyElementImpl(*this);
+}
 
-        void processElementContent(const XMLCh* elementContent) {
-            setTextContent(elementContent);
-        }
-    };
+AnyElementImpl::AnyElementImpl(const AnyElementImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src),
+    AbstractElementProxy(src), AbstractAttributeExtensibleXMLObject(src) {
+    for (list<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
+        getXMLObjects().push_back((*i) ? (*i)->clone() : NULL);
+    }
+}       
 
-};
+void AnyElementImpl::marshallAttributes(DOMElement* domElement) const {
+    marshallExtensionAttributes(domElement);
+}
 
-#if defined (_MSC_VER)
-    #pragma warning( pop )
-#endif
+void AnyElementImpl::processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+    getXMLObjects().push_back(childXMLObject);
+}
 
+void AnyElementImpl::processAttribute(const DOMAttr* attribute) {
+    unmarshallExtensionAttribute(attribute);
+}
 
 XMLObject* AnyElementBuilder::buildObject(
-    const XMLCh* namespaceURI, const XMLCh* elementLocalName, const XMLCh* namespacePrefix
+    const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType
     ) const {
-    return new AnyElementImpl(namespaceURI,elementLocalName,namespacePrefix);
+    return new AnyElementImpl(nsURI, localName, prefix, schemaType);
 }