Multi-line svn commit, see body.
[shibboleth/cpp-xmltooling.git] / xmltooling / AbstractElementProxy.h
index 1bbd34e..ed95e53 100644 (file)
  */\r
 \r
 /**\r
- * @file AbstractElementProxy.h\r
+ * @file xmltooling/AbstractElementProxy.h\r
  * \r
- * An abstract implementation of an ElementProxy \r
+ * AbstractXMLObject mixin that implements an open content model \r
  */\r
 \r
 #ifndef __xmltooling_abseleproxy_h__\r
 #define __xmltooling_abseleproxy_h__\r
 \r
-#include <xmltooling/AbstractXMLObject.h>\r
+#include <xmltooling/AbstractComplexElement.h>\r
 #include <xmltooling/ElementProxy.h>\r
 \r
 #if defined (_MSC_VER)\r
 namespace xmltooling {\r
 \r
     /**\r
-     * An abstract implementation of an ExtensibleXMLObject.\r
+     * AbstractXMLObject mixin that layers ElementProxy on top of a complex element.\r
+     * Inherit from this class to implement complex content\r
+     * and expose the underlying child collection in read/write mode.\r
      */\r
-    class XMLTOOL_API AbstractElementProxy : public virtual ElementProxy, public virtual AbstractXMLObject\r
+    class XMLTOOL_API AbstractElementProxy : public virtual ElementProxy, public AbstractComplexElement\r
     {\r
     public:\r
         virtual ~AbstractElementProxy() {}\r
         \r
-        virtual const XMLCh* getTextContent() const {\r
-            return m_value;\r
+        virtual ListOf(XMLObject) getXMLObjects() {\r
+            return ListOf(XMLObject)(this,m_children,NULL,m_children.end());\r
         }\r
-        \r
-        virtual void setTextContent(const XMLCh* value);\r
-        \r
-        virtual ListOf(XMLObject) getXMLObjects();\r
     \r
-     protected:\r
-        AbstractElementProxy() : m_value(NULL) {}\r
+        virtual const std::list<XMLObject*>& getXMLObjects() const {\r
+            return m_children;\r
+        }\r
+\r
+    protected:\r
+        AbstractElementProxy() {}\r
         \r
         /** Copy constructor. */\r
-        AbstractElementProxy(const AbstractElementProxy& src)\r
-            : AbstractXMLObject(src), m_value(XMLString::replicate(src.m_value)) {}\r
-\r
-    private:\r
-        XMLCh* m_value;\r
+        AbstractElementProxy(const AbstractElementProxy& src) : AbstractXMLObject(src), AbstractComplexElement(src) {}\r
     };\r
     \r
 };\r