#include "io/AbstractXMLObjectMarshaller.h"\r
#include "io/AbstractXMLObjectUnmarshaller.h"\r
#include "signature/impl/KeyInfoImpl.h"\r
-#include "util/NDC.h"\r
#include "util/XMLHelper.h"\r
#include "validation/AbstractValidatingXMLObject.h"\r
\r
-#include <log4cpp/Category.hh>\r
+#include <typeinfo.h>\r
\r
using namespace xmltooling;\r
-using namespace log4cpp;\r
using namespace std;\r
\r
#if defined (_MSC_VER)\r
\r
namespace xmltooling {\r
\r
- class XMLTOOL_DLLLOCAL KeyInfoImpl : public KeyInfo, public AbstractDOMCachingXMLObject, public AbstractElementProxy,\r
- public AbstractValidatingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller\r
+ class XMLTOOL_DLLLOCAL KeyInfoImpl\r
+ : public KeyInfo,\r
+ public AbstractDOMCachingXMLObject,\r
+ public AbstractElementProxy,\r
+ public AbstractValidatingXMLObject,\r
+ public AbstractXMLObjectMarshaller,\r
+ public AbstractXMLObjectUnmarshaller\r
{\r
public:\r
virtual ~KeyInfoImpl() {}\r
\r
KeyInfoImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)\r
- : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Id(NULL) {}\r
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Id(NULL) {\r
+ }\r
\r
- KeyInfoImpl(const KeyInfoImpl& src) : AbstractXMLObject(src), AbstractDOMCachingXMLObject(src),\r
- AbstractElementProxy(src), AbstractValidatingXMLObject(src), m_Id(XMLString::replicate(src.m_Id)) {\r
+ KeyInfoImpl(const KeyInfoImpl& src)\r
+ : AbstractXMLObject(src),\r
+ AbstractDOMCachingXMLObject(src),\r
+ AbstractElementProxy(src),\r
+ AbstractValidatingXMLObject(src),\r
+ m_Id(XMLString::replicate(src.m_Id)) {\r
+ \r
for (list<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {\r
getXMLObjects().push_back((*i) ? (*i)->clone() : NULL);\r
}\r
}\r
\r
- IMPL_XMLOBJECT_ATTRIB(Id);\r
IMPL_XMLOBJECT_CLONE(KeyInfo);\r
+ IMPL_XMLOBJECT_ATTRIB(Id);\r
\r
protected:\r
void marshallAttributes(DOMElement* domElement) const {\r
}\r
}\r
\r
+ void processElementContent(const XMLCh* elementContent) {\r
+ setTextContent(elementContent);\r
+ }\r
+\r
void processChildElement(XMLObject* childXMLObject, const DOMElement* root) {\r
getXMLObjects().push_back(childXMLObject);\r
}\r
\r
void processAttribute(const DOMAttr* attribute) {\r
- if (XMLHelper::isNodeNamed(attribute, NULL, ID_ATTRIB_NAME))\r
+ if (XMLHelper::isNodeNamed(attribute, NULL, ID_ATTRIB_NAME)) {\r
setId(attribute->getValue());\r
+ static_cast<DOMElement*>(attribute->getParentNode())->setIdAttributeNode(attribute);\r
+ }\r
}\r
+ };\r
+ \r
+ class XMLTOOL_DLLLOCAL KeyNameImpl\r
+ : public KeyName,\r
+ public AbstractDOMCachingXMLObject,\r
+ public AbstractValidatingXMLObject,\r
+ public AbstractXMLObjectMarshaller,\r
+ public AbstractXMLObjectUnmarshaller\r
+ {\r
+ public:\r
+ virtual ~KeyNameImpl() {}\r
\r
- void processElementContent(const XMLCh* elementContent) {\r
- setTextContent(elementContent);\r
+ KeyNameImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)\r
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Name(NULL) {\r
}\r
+ \r
+ KeyNameImpl(const KeyNameImpl& src)\r
+ : AbstractXMLObject(src),\r
+ AbstractDOMCachingXMLObject(src),\r
+ AbstractValidatingXMLObject(src),\r
+ m_Name(XMLString::replicate(src.m_Name)) {\r
+ }\r
+ \r
+ IMPL_XMLOBJECT_CLONE(KeyName);\r
+ IMPL_XMLOBJECT_CONTENT(Name);\r
+ };\r
+\r
+ class XMLTOOL_DLLLOCAL MgmtDataImpl\r
+ : public MgmtData,\r
+ public AbstractDOMCachingXMLObject,\r
+ public AbstractValidatingXMLObject,\r
+ public AbstractXMLObjectMarshaller,\r
+ public AbstractXMLObjectUnmarshaller\r
+ {\r
+ public:\r
+ virtual ~MgmtDataImpl() {}\r
+\r
+ MgmtDataImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType)\r
+ : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_Data(NULL) {\r
+ }\r
+ \r
+ MgmtDataImpl(const MgmtDataImpl& src)\r
+ : AbstractXMLObject(src),\r
+ AbstractDOMCachingXMLObject(src),\r
+ AbstractValidatingXMLObject(src),\r
+ m_Data(XMLString::replicate(src.m_Data)) {\r
+ }\r
+ \r
+ IMPL_XMLOBJECT_CLONE(MgmtData);\r
+ IMPL_XMLOBJECT_CONTENT(Data);\r
};\r
- \r
};\r
\r
#if defined (_MSC_VER)\r
#pragma warning( pop )\r
#endif\r
\r
-KeyInfo* KeyInfoBuilderImpl::buildObject(\r
- const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType\r
- ) const\r
+// Builder Implementations\r
+\r
+IMPL_XMLOBJECTBUILDER(KeyInfo);\r
+IMPL_XMLOBJECTBUILDER(KeyName);\r
+IMPL_XMLOBJECTBUILDER(MgmtData);\r
+\r
+// Validators\r
+\r
+void KeyInfoSchemaValidator::validate(const XMLObject* xmlObject) const\r
+{\r
+ const KeyInfo* ptr=dynamic_cast<const KeyInfo*>(xmlObject);\r
+ if (!ptr)\r
+ throw ValidationException("KeyInfoSchemaValidator: unsupported object type ($1)",params(1,typeid(xmlObject).name()));\r
+ if (!ptr->hasChildren())\r
+ throw ValidationException("KeyInfo is empty");\r
+}\r
+\r
+void KeyNameSchemaValidator::validate(const XMLObject* xmlObject) const\r
+{\r
+ const KeyName* ptr=dynamic_cast<const KeyName*>(xmlObject);\r
+ if (!ptr)\r
+ throw ValidationException("KeyNameSchemaValidator: unsupported object type ($1)",params(1,typeid(xmlObject).name()));\r
+ if (XMLString::stringLen(ptr->getName())==0)\r
+ throw ValidationException("KeyName is empty");\r
+}\r
+\r
+void MgmtDataSchemaValidator::validate(const XMLObject* xmlObject) const\r
{\r
- return new KeyInfoImpl(nsURI,localName,prefix,schemaType);\r
+ const MgmtData* ptr=dynamic_cast<const MgmtData*>(xmlObject);\r
+ if (!ptr)\r
+ throw ValidationException("MgmtDataSchemaValidator: unsupported object type ($1)",params(1,typeid(xmlObject).name()));\r
+ if (XMLString::stringLen(ptr->getData())==0)\r
+ throw ValidationException("MgmtData is empty");\r
}\r