+ class SAML_DLLLOCAL RegistrationInfoImpl : public virtual RegistrationInfo,
+ public AbstractAttributeExtensibleXMLObject,
+ public AbstractComplexElement,
+ public AbstractDOMCachingXMLObject,
+ public AbstractXMLObjectMarshaller,
+ public AbstractXMLObjectUnmarshaller
+ {
+ list<XMLObject*>::iterator m_pos_RegistrationPolicy;
+
+ void init() {
+ m_RegistrationAuthority = nullptr;
+ m_RegistrationInstant = nullptr;
+ m_pos_RegistrationPolicy = m_children.begin();
+ }
+
+ protected:
+ RegistrationInfoImpl() {
+ init();
+ }
+
+ public:
+ virtual ~RegistrationInfoImpl() {
+ XMLString::release(&m_RegistrationAuthority);
+ delete m_RegistrationInstant;
+ }
+
+ RegistrationInfoImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
+ init();
+ }
+
+ RegistrationInfoImpl(const RegistrationInfoImpl& src)
+ : AbstractXMLObject(src),
+ AbstractAttributeExtensibleXMLObject(src),
+ AbstractComplexElement(src),
+ AbstractDOMCachingXMLObject(src) {
+ init();
+ }
+
+ void _clone(const RegistrationInfoImpl& src) {
+ IMPL_CLONE_ATTRIB(RegistrationAuthority);
+ IMPL_CLONE_ATTRIB(RegistrationInstant);
+ IMPL_CLONE_TYPED_CHILDREN(RegistrationPolicy);
+ IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject);
+ }
+
+ IMPL_XMLOBJECT_CLONE_EX(RegistrationInfo);
+ IMPL_STRING_ATTRIB(RegistrationAuthority);
+ IMPL_DATETIME_ATTRIB(RegistrationInstant,0);
+ IMPL_TYPED_CHILDREN(RegistrationPolicy,m_pos_RegistrationPolicy);
+ IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end());
+
+ void setAttribute(const xmltooling::QName& qualifiedName, const XMLCh* value, bool ID=false) {
+ if (!qualifiedName.hasNamespaceURI()) {
+ if (XMLString::equals(qualifiedName.getLocalPart(),REGAUTHORITY_ATTRIB_NAME)) {
+ setRegistrationAuthority(value);
+ return;
+ }
+ else if (XMLString::equals(qualifiedName.getLocalPart(),REGINSTANT_ATTRIB_NAME)) {
+ setRegistrationInstant(value);
+ return;
+ }
+ }
+ AbstractAttributeExtensibleXMLObject::setAttribute(qualifiedName, value, ID);
+ }
+ protected:
+ void marshallAttributes(DOMElement* domElement) const {
+ MARSHALL_STRING_ATTRIB(RegistrationAuthority,REGAUTHORITY,nullptr);
+ MARSHALL_DATETIME_ATTRIB(RegistrationInstant,REGINSTANT,nullptr);
+ marshallExtensionAttributes(domElement);
+ }
+
+ void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+ PROC_TYPED_CHILDREN(RegistrationPolicy,SAML20MD_RPI_NS,false);
+ // Unknown child.
+ const XMLCh* nsURI=root->getNamespaceURI();
+ if (!XMLString::equals(nsURI,SAML20MD_RPI_NS) && nsURI && *nsURI) {
+ getUnknownXMLObjects().push_back(childXMLObject);
+ return;
+ }
+ AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
+ }
+
+ void processAttribute(const DOMAttr* attribute) {
+ unmarshallExtensionAttribute(attribute);
+ }
+ };
+
+ class SAML_DLLLOCAL RegistrationPolicyImpl : public virtual RegistrationPolicy, public localizedURITypeImpl
+ {
+ public:
+ virtual ~RegistrationPolicyImpl() {}
+
+ RegistrationPolicyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ RegistrationPolicyImpl(const RegistrationPolicyImpl& src) : AbstractXMLObject(src), localizedURITypeImpl(src) {}
+
+ IMPL_XMLOBJECT_CLONE_EX(RegistrationPolicy);
+ };
+
+ class SAML_DLLLOCAL UsagePolicyImpl : public virtual UsagePolicy, public localizedURITypeImpl
+ {
+ public:
+ virtual ~UsagePolicyImpl() {}
+
+ UsagePolicyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ UsagePolicyImpl(const UsagePolicyImpl& src) : AbstractXMLObject(src), localizedURITypeImpl(src) {}
+
+ IMPL_XMLOBJECT_CLONE_EX(UsagePolicy);
+ };
+