+ class SAML_DLLLOCAL DisplayNameImpl : public virtual DisplayName, public localizedNameTypeImpl
+ {
+ public:
+ virtual ~DisplayNameImpl() {}
+
+ DisplayNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ DisplayNameImpl(const DisplayNameImpl& src) : AbstractXMLObject(src), localizedNameTypeImpl(src) {}
+
+ IMPL_XMLOBJECT_CLONE(DisplayName);
+ localizedNameType* clonelocalizedNameType() const {
+ return new DisplayNameImpl(*this);
+ }
+ };
+
+ class SAML_DLLLOCAL DescriptionImpl : public virtual Description, public localizedNameTypeImpl
+ {
+ public:
+ virtual ~DescriptionImpl() {}
+
+ DescriptionImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ DescriptionImpl(const DescriptionImpl& src) : AbstractXMLObject(src), localizedNameTypeImpl(src) {}
+
+ IMPL_XMLOBJECT_CLONE(Description);
+ localizedNameType* clonelocalizedNameType() const {
+ return new DescriptionImpl(*this);
+ }
+ };
+
+ class SAML_DLLLOCAL InformationURLImpl : public virtual InformationURL, public localizedURITypeImpl
+ {
+ public:
+ virtual ~InformationURLImpl() {}
+
+ InformationURLImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ InformationURLImpl(const InformationURLImpl& src) : AbstractXMLObject(src), localizedURITypeImpl(src) {}
+
+ IMPL_XMLOBJECT_CLONE(InformationURL);
+ localizedURIType* clonelocalizedURIType() const {
+ return new InformationURLImpl(*this);
+ }
+ };
+
+ class SAML_DLLLOCAL PrivacyStatementURLImpl : public virtual PrivacyStatementURL, public localizedURITypeImpl
+ {
+ public:
+ virtual ~PrivacyStatementURLImpl() {}
+
+ PrivacyStatementURLImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {}
+
+ PrivacyStatementURLImpl(const PrivacyStatementURLImpl& src) : AbstractXMLObject(src), localizedURITypeImpl(src) {}
+
+ IMPL_XMLOBJECT_CLONE(PrivacyStatementURL);
+ localizedURIType* clonelocalizedURIType() const {
+ return new PrivacyStatementURLImpl(*this);
+ }
+ };
+
+ class SAML_DLLLOCAL LogoImpl : public virtual Logo,
+ public AbstractSimpleElement,
+ public AbstractDOMCachingXMLObject,
+ public AbstractXMLObjectMarshaller,
+ public AbstractXMLObjectUnmarshaller
+ {
+ void init() {
+ m_Lang=nullptr;
+ m_LangPrefix=nullptr;
+ m_Height=nullptr;
+ m_Width=nullptr;
+ }
+
+ protected:
+ LogoImpl() {
+ init();
+ }
+
+ public:
+ virtual ~LogoImpl() {
+ XMLString::release(&m_Lang);
+ XMLString::release(&m_LangPrefix);
+ XMLString::release(&m_Height);
+ XMLString::release(&m_Width);
+ }
+
+ LogoImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
+ init();
+ }
+
+ LogoImpl(const LogoImpl& src)
+ : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) {
+ init();
+ setLang(src.getLang());
+ if (src.m_LangPrefix)
+ m_LangPrefix = XMLString::replicate(src.m_LangPrefix);
+ setHeight(src.m_Height);
+ setWidth(src.m_Width);
+ }
+
+ IMPL_XMLOBJECT_CLONE(Logo);
+ IMPL_XMLOBJECT_FOREIGN_ATTRIB(Lang,XMLCh);
+ IMPL_INTEGER_ATTRIB(Height);
+ IMPL_INTEGER_ATTRIB(Width);
+
+ protected:
+ void marshallAttributes(DOMElement* domElement) const {
+ if (m_Lang && *m_Lang) {
+ DOMAttr* attr=domElement->getOwnerDocument()->createAttributeNS(xmlconstants::XML_NS,LANG_ATTRIB_NAME);
+ if (m_LangPrefix && *m_LangPrefix)
+ attr->setPrefix(m_LangPrefix);
+ attr->setNodeValue(m_Lang);
+ domElement->setAttributeNodeNS(attr);
+ }
+ MARSHALL_INTEGER_ATTRIB(Height,HEIGHT,nullptr);
+ MARSHALL_INTEGER_ATTRIB(Width,WIDTH,nullptr);
+ }
+
+ void processAttribute(const DOMAttr* attribute) {
+ if (XMLHelper::isNodeNamed(attribute, xmlconstants::XML_NS, LANG_ATTRIB_NAME)) {
+ setLang(attribute->getValue());
+ const XMLCh* temp = attribute->getPrefix();
+ if (temp && *temp && !XMLString::equals(temp, xmlconstants::XML_NS))
+ m_LangPrefix = XMLString::replicate(temp);
+ return;
+ }
+ PROC_INTEGER_ATTRIB(Height,HEIGHT,nullptr);
+ PROC_INTEGER_ATTRIB(Width,WIDTH,nullptr);
+ AbstractXMLObjectUnmarshaller::processAttribute(attribute);
+ }
+ };
+
+ class SAML_DLLLOCAL UIInfoImpl : public virtual UIInfo,
+ public AbstractComplexElement,
+ public AbstractDOMCachingXMLObject,
+ public AbstractXMLObjectMarshaller,
+ public AbstractXMLObjectUnmarshaller
+ {
+ public:
+ virtual ~UIInfoImpl() {}
+
+ UIInfoImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
+ }
+
+ UIInfoImpl(const UIInfoImpl& src)
+ : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
+ for (list<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
+ if (*i) {
+ DisplayName* dn=dynamic_cast<DisplayName*>(*i);
+ if (dn) {
+ getDisplayNames().push_back(dn->cloneDisplayName());
+ continue;
+ }
+
+ Description* des=dynamic_cast<Description*>(*i);
+ if (des) {
+ getDescriptions().push_back(des->cloneDescription());
+ continue;
+ }
+
+ Logo* logo=dynamic_cast<Logo*>(*i);
+ if (logo) {
+ getLogos().push_back(logo->cloneLogo());
+ continue;
+ }
+
+ InformationURL* inf=dynamic_cast<InformationURL*>(*i);
+ if (inf) {
+ getInformationURLs().push_back(inf->cloneInformationURL());
+ continue;
+ }
+
+ PrivacyStatementURL* priv=dynamic_cast<PrivacyStatementURL*>(*i);
+ if (priv) {
+ getPrivacyStatementURLs().push_back(priv->clonePrivacyStatementURL());
+ continue;
+ }
+
+ getUnknownXMLObjects().push_back((*i)->clone());
+ }
+ }
+ }
+
+ IMPL_XMLOBJECT_CLONE(UIInfo);
+ IMPL_TYPED_CHILDREN(DisplayName,m_children.end());
+ IMPL_TYPED_CHILDREN(Description,m_children.end());
+ IMPL_TYPED_CHILDREN(Logo,m_children.end());
+ IMPL_TYPED_CHILDREN(InformationURL,m_children.end());
+ IMPL_TYPED_CHILDREN(PrivacyStatementURL,m_children.end());
+ IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end());
+
+ protected:
+ void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+ PROC_TYPED_CHILDREN(DisplayName,SAML20MD_UI_NS,false);
+ PROC_TYPED_CHILDREN(Description,SAML20MD_UI_NS,false);
+ PROC_TYPED_CHILDREN(Logo,SAML20MD_UI_NS,false);
+ PROC_TYPED_CHILDREN(InformationURL,SAML20MD_UI_NS,false);
+ PROC_TYPED_CHILDREN(PrivacyStatementURL,SAML20MD_UI_NS,false);
+
+ // Unknown child.
+ const XMLCh* nsURI=root->getNamespaceURI();
+ if (!XMLString::equals(nsURI,SAML20MD_UI_NS) && nsURI && *nsURI) {
+ getUnknownXMLObjects().push_back(childXMLObject);
+ return;
+ }
+
+ AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
+ }
+ };
+
+ class SAML_DLLLOCAL DiscoHintsImpl : public virtual DiscoHints,
+ public AbstractComplexElement,
+ public AbstractDOMCachingXMLObject,
+ public AbstractXMLObjectMarshaller,
+ public AbstractXMLObjectUnmarshaller
+ {
+ public:
+ virtual ~DiscoHintsImpl() {}
+
+ DiscoHintsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType)
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType) {
+ }
+
+ DiscoHintsImpl(const DiscoHintsImpl& src)
+ : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) {
+ for (list<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
+ if (*i) {
+ IPHint* ip=dynamic_cast<IPHint*>(*i);
+ if (ip) {
+ getIPHints().push_back(ip->cloneIPHint());
+ continue;
+ }
+
+ DomainHint* dom=dynamic_cast<DomainHint*>(*i);
+ if (dom) {
+ getDomainHints().push_back(dom->cloneDomainHint());
+ continue;
+ }
+
+ GeolocationHint* geo=dynamic_cast<GeolocationHint*>(*i);
+ if (geo) {
+ getGeolocationHints().push_back(geo->cloneGeolocationHint());
+ continue;
+ }
+
+ getUnknownXMLObjects().push_back((*i)->clone());
+ }
+ }
+ }
+
+ IMPL_XMLOBJECT_CLONE(DiscoHints);
+ IMPL_TYPED_CHILDREN(IPHint,m_children.end());
+ IMPL_TYPED_CHILDREN(DomainHint,m_children.end());
+ IMPL_TYPED_CHILDREN(GeolocationHint,m_children.end());
+ IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end());
+
+ protected:
+ void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {
+ PROC_TYPED_CHILDREN(IPHint,SAML20MD_UI_NS,false);
+ PROC_TYPED_CHILDREN(DomainHint,SAML20MD_UI_NS,false);
+ PROC_TYPED_CHILDREN(GeolocationHint,SAML20MD_UI_NS,false);
+
+ // Unknown child.
+ const XMLCh* nsURI=root->getNamespaceURI();
+ if (!XMLString::equals(nsURI,SAML20MD_UI_NS) && nsURI && *nsURI) {
+ getUnknownXMLObjects().push_back(childXMLObject);
+ return;
+ }
+
+ AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root);
+ }
+ };
+