Convert from NULL macro to nullptr.
[shibboleth/cpp-xmltooling.git] / xmltooling / AttributeExtensibleXMLObject.h
1 /*
2  *  Copyright 2001-2010 Internet2
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * @file xmltooling/AttributeExtensibleXMLObject.h
19  * 
20  * An XMLObject that supports arbitrary attributes 
21  */
22
23 #ifndef __xmltooling_attrextxmlobj_h__
24 #define __xmltooling_attrextxmlobj_h__
25
26 #include <xmltooling/XMLObject.h>
27
28 #if defined (_MSC_VER)
29     #pragma warning( push )
30     #pragma warning( disable : 4250 4251 )
31 #endif
32
33 namespace xmltooling {
34
35     /**
36      * An XMLObject that supports arbitrary attributes.
37      */
38     class XMLTOOL_API AttributeExtensibleXMLObject : public virtual XMLObject
39     {
40     protected:
41         AttributeExtensibleXMLObject();
42         
43     public:
44         virtual ~AttributeExtensibleXMLObject();
45         
46         /**
47          * Gets the value of an XML attribute of the object.
48          * 
49          * @param   qualifiedName   qualified name of the attribute   
50          * @return the attribute value, or nullptr
51          */
52         virtual const XMLCh* getAttribute(const QName& qualifiedName) const=0;
53         
54         /**
55          * Sets (or clears) an XML attribute of the object.
56          * 
57          * @param qualifiedName qualified name of the attribute   
58          * @param value         value to set, or nullptr to clear
59          * @param ID            true iff the attribute is an XML ID
60          */
61         virtual void setAttribute(const QName& qualifiedName, const XMLCh* value, bool ID=false)=0;
62
63         /**
64          * Sets a QName-valued XML attribute of the object.
65          * 
66          * @param qualifiedName qualified name of the attribute   
67          * @param value         value to set
68          */
69         virtual void setAttribute(const QName& qualifiedName, const QName& value);
70
71         /**
72          * Gets an immutable map of the extended XML attributes of the object.
73          * 
74          * This set is not guaranteed to (and generally will not) include
75          * attributes defined directly on the object's "type".
76          */
77         virtual const std::map<QName,XMLCh*>& getExtensionAttributes() const=0;
78         
79         /**
80          * Gets an immutable list of all the ID attributes currently registered.
81          * 
82          * @return list of all the ID attributes currently registered
83          */
84         static const std::set<QName>& getRegisteredIDAttributes();
85         
86         /**
87          * Tests whether an XML attribute is registered as an XML ID.
88          * 
89          * @return true iff the attribute name matches a registered XML ID attribute 
90          */
91         static bool isRegisteredIDAttribute(const QName& name);
92     
93         /**
94          * Registers a new attribute as being of XML ID type.
95          * 
96          * @param name the qualified attribute name
97          */
98         static void registerIDAttribute(const QName& name);
99
100         /**
101          * Deregisters an ID attribute.
102          * 
103          * @param name the qualified attribute name
104          */
105         static void deregisterIDAttribute(const QName& name);
106         
107         /**
108          * Deregisters all ID attributes.
109          */
110         static void deregisterIDAttributes();
111
112     private:
113         /** Set of attributes to treat as XML IDs. */
114         static std::set<QName> m_idAttributeSet;
115     };
116     
117 };
118
119 #if defined (_MSC_VER)
120     #pragma warning( pop )
121 #endif
122
123 #endif /* __xmltooling_attrextxmlobj_h__ */