Added built-in ID attribute support to base classes.
[shibboleth/cpp-xmltooling.git] / xmltooling / AbstractAttributeExtensibleXMLObject.h
index ca2b390..e2e65ea 100644 (file)
@@ -38,26 +38,40 @@ namespace xmltooling {
      * AbstractXMLObject mixin that implements AttributeExtensibleXMLObject.\r
      * Inherit from this class to add support for attribute wildcarding.\r
      */\r
-    class XMLTOOL_API AbstractAttributeExtensibleXMLObject : public virtual AttributeExtensibleXMLObject, public virtual AbstractXMLObject\r
+    class XMLTOOL_API AbstractAttributeExtensibleXMLObject\r
+        : public virtual AttributeExtensibleXMLObject, public virtual AbstractXMLObject\r
     {\r
     public:\r
         virtual ~AbstractAttributeExtensibleXMLObject();\r
         \r
-        virtual const XMLCh* getAttribute(QName& qualifiedName) const {\r
+        const XMLCh* getAttribute(const QName& qualifiedName) const {\r
             std::map<QName,XMLCh*>::const_iterator i=m_attributeMap.find(qualifiedName);\r
             return (i==m_attributeMap.end()) ? NULL : i->second;\r
         }\r
         \r
-        virtual void setAttribute(QName& qualifiedName, const XMLCh* value);\r
+        void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false);\r
+    \r
+        const std::map<QName,XMLCh*>& getExtensionAttributes() const {\r
+            return m_attributeMap;\r
+        }\r
+        \r
+        const XMLCh* getXMLID() const {\r
+            return (m_idAttribute == m_attributeMap.end()) ? NULL : m_idAttribute->second;\r
+        }\r
     \r
      protected:\r
-        AbstractAttributeExtensibleXMLObject() {}\r
+        AbstractAttributeExtensibleXMLObject() {\r
+            m_idAttribute = m_attributeMap.end();\r
+        }\r
 \r
         /** Copy constructor. */\r
         AbstractAttributeExtensibleXMLObject(const AbstractAttributeExtensibleXMLObject& src);\r
 \r
         /** Map of arbitrary attributes. */\r
         std::map<QName,XMLCh*> m_attributeMap;\r
+        \r
+        /** Points to the last attribute designated as an XML ID. */\r
+        std::map<QName,XMLCh*>::const_iterator m_idAttribute;\r
     };\r
     \r
 };\r