enable_debug=$enableval, enable_debug=no)
if test "$enable_debug" = "yes" ; then
- GCC_CFLAGS="$CFLAGS -g -D_DEBUG"
- GCC_CXXFLAGS="$CXXFLAGS -g -D_DEBUG"
+ GCC_CFLAGS="$CFLAGS -Wall -g -D_DEBUG"
+ GCC_CXXFLAGS="$CXXFLAGS -Wall -g -D_DEBUG"
else
- GCC_CFLAGS="$CFLAGS -O2 -DNDEBUG"
- GCC_CXXFLAGS="$CXXFLAGS -O2 -DNDEBUG"
+ GCC_CFLAGS="$CFLAGS -Wall -O2 -DNDEBUG"
+ GCC_CXXFLAGS="$CXXFLAGS -Wall -O2 -DNDEBUG"
fi
AC_PROG_CC([gcc gcc3 cc])
AC_SUBST(CXXTESTFLAGS)
AM_CONDITIONAL(BUILD_UNITTEST,test -f ${CXXTEST})
+LIBTOOL="$LIBTOOL --silent"
+
# output makefiles
AC_OUTPUT(Makefile xmltooling/Makefile xmltoolingtest/Makefile schemas/Makefile)
virtual void setAttribute(QName& qualifiedName, const XMLCh* value);\r
\r
protected:\r
- /**\r
- * Constructor\r
- * \r
- * @param namespaceURI the namespace the element is in\r
- * @param elementLocalName the local name of the XML element this Object represents\r
- * @param namespacePrefix the namespace prefix to use\r
- */\r
- AbstractAttributeExtensibleXMLObject(\r
- const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL\r
- ) : AbstractDOMCachingXMLObject(namespaceURI,elementLocalName, namespacePrefix) {}\r
+ AbstractAttributeExtensibleXMLObject() {}\r
\r
std::map<QName,XMLCh*> m_attributeMap;\r
};\r
\r
/**\r
* Extension of AbstractXMLObject that implements a DOMCachingXMLObject.\r
- * This is the primary base class for XMLObject implementation classes to use.\r
*/\r
- class XMLTOOL_API AbstractDOMCachingXMLObject : public AbstractXMLObject, public virtual DOMCachingXMLObject\r
+ class XMLTOOL_API AbstractDOMCachingXMLObject : public virtual AbstractXMLObject, public virtual DOMCachingXMLObject\r
{\r
public:\r
virtual ~AbstractDOMCachingXMLObject();\r
XMLObject* clone() const;\r
\r
protected:\r
- /**\r
- * Constructor\r
- * \r
- * @param namespaceURI the namespace the element is in\r
- * @param elementLocalName the local name of the XML element this Object represents\r
- * @param namespacePrefix the namespace prefix to use\r
- */\r
- AbstractDOMCachingXMLObject(\r
- const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL\r
- ) : AbstractXMLObject(namespaceURI,elementLocalName, namespacePrefix), m_dom(NULL), m_document(NULL) {}\r
+ AbstractDOMCachingXMLObject() : m_dom(NULL), m_document(NULL) {}\r
\r
/**\r
* If a DOM representation exists, this clones it into a new document.\r
virtual ListOf(XMLObject) getXMLObjects();\r
\r
protected:\r
- /**\r
- * Constructor\r
- * \r
- * @param namespaceURI the namespace the element is in\r
- * @param elementLocalName the local name of the XML element this Object represents\r
- * @param namespacePrefix the namespace prefix to use\r
- */\r
- AbstractElementProxy(\r
- const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL\r
- ) : AbstractDOMCachingXMLObject(namespaceURI,elementLocalName, namespacePrefix), m_value(NULL) {}\r
+ AbstractElementProxy() : m_value(NULL) {}\r
\r
private:\r
XMLCh* m_value;\r
AbstractAttributeExtensibleXMLObject.h \
AbstractDOMCachingXMLObject.h \
AbstractElementProxy.h \
+ AbstractValidatingXMLObject.h \
AbstractXMLObject.h \
AttributeExtensibleXMLObject.h \
base.h \
Namespace.h \
QName.h \
unicode.h \
+ ValidatingXMLObject.h \
version.h \
XMLObject.h \
XMLObjectBuilder.h \
util/ParserPool.cpp \
util/XMLConstants.cpp \
util/XMLHelper.cpp \
+ validation/AbstractValidatingXMLObject.cpp \
validation/Validator.cpp \
${xmlsec_sources}
{
public:
AnyElementImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix)
- : AbstractDOMCachingXMLObject(nsURI, localName, prefix),
- AbstractElementProxy(nsURI, localName, prefix),
- AbstractAttributeExtensibleXMLObject(nsURI, localName, prefix) {}
+ : AbstractXMLObject(nsURI, localName, prefix) {}
virtual ~AnyElementImpl() {}
AnyElementImpl* clone() const {
{\r
public:\r
UnknownElementImpl(const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL)\r
- : AbstractDOMCachingXMLObject(namespaceURI, elementLocalName, namespacePrefix) {}\r
+ : AbstractXMLObject(namespaceURI, elementLocalName, namespacePrefix) {}\r
\r
void releaseDOM();\r
\r
--- /dev/null
+/*\r
+ * Copyright 2001-2006 Internet2\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/**\r
+ * AbstractValidatingXMLObject.cpp\r
+ * \r
+ * Extension of AbstractXMLObject that implements a ValidatingXMLObject. \r
+ */\r
+\r
+#include "internal.h"\r
+#include "exceptions.h"\r
+#include "validation/AbstractValidatingXMLObject.h"\r
+\r
+#include <algorithm>\r
+#include <functional>\r
+\r
+using namespace xmltooling;\r
+using namespace std;\r
+\r
+AbstractValidatingXMLObject::ValidatorWrapper::~ValidatorWrapper()\r
+{\r
+ for_each(v.begin(),v.end(),cleanup<Validator>());\r
+}\r
+\r
+AbstractValidatingXMLObject::~AbstractValidatingXMLObject()\r
+{\r
+ delete m_validators;\r
+}\r
+\r
+void AbstractValidatingXMLObject::registerValidator(Validator* validator) const\r
+{\r
+ if (!m_validators)\r
+ m_validators=new ValidatorWrapper();\r
+ m_validators->v.push_back(validator);\r
+}\r
+\r
+void AbstractValidatingXMLObject::deregisterValidator(Validator* validator) const\r
+{\r
+ if (m_validators) {\r
+ for (std::vector<Validator*>::iterator i=m_validators->v.begin(); i!=m_validators->v.end(); i++) {\r
+ if ((*i)==validator)\r
+ m_validators->v.erase(i);\r
+ return;\r
+ }\r
+ }\r
+}\r
+\r
+class _validate : public binary_function<const XMLObject*,bool,void> {\r
+public:\r
+ void operator()(const XMLObject* obj, bool propagate) const {\r
+ const ValidatingXMLObject* val = dynamic_cast<const ValidatingXMLObject*>(obj);\r
+ if (val) {\r
+ val->validate(propagate);\r
+ }\r
+ }\r
+};\r
+\r
+void AbstractValidatingXMLObject::validate(bool validateDescendants) const\r
+{\r
+ if (m_validators) {\r
+ for_each(\r
+ m_validators->v.begin(),m_validators->v.end(),\r
+ bind2nd(mem_fun<void,Validator,const XMLObject*>(&Validator::validate),this)\r
+ );\r
+ }\r
+ \r
+ if (validateDescendants && hasChildren()) {\r
+ for_each(m_children.begin(),m_children.end(),bind2nd(_validate(),validateDescendants));\r
+ }\r
+}\r
--- /dev/null
+/*\r
+ * Copyright 2001-2006 Internet2\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/**\r
+ * @file AbstractValidatingXMLObject.h\r
+ * \r
+ * Extension of AbstractXMLObject that implements a ValidatingXMLObject. \r
+ */\r
+\r
+#if !defined(__xmltooling_abstractvalxmlobj_h__)\r
+#define __xmltooling_abstractvalxmlobj_h__\r
+\r
+#include <xmltooling/AbstractXMLObject.h>\r
+#include <xmltooling/validation/ValidatingXMLObject.h>\r
+\r
+#if defined (_MSC_VER)\r
+ #pragma warning( push )\r
+ #pragma warning( disable : 4250 4251 )\r
+#endif\r
+\r
+namespace xmltooling {\r
+\r
+ /**\r
+ * Extension of AbstractXMLObject that implements a ValidatingXMLObject.\r
+ */\r
+ class XMLTOOL_API AbstractValidatingXMLObject : public virtual AbstractXMLObject, public virtual ValidatingXMLObject\r
+ {\r
+ public:\r
+ virtual ~AbstractValidatingXMLObject();\r
+ \r
+ /**\r
+ * @see ValidatingXMLObject::registerValidator()\r
+ */\r
+ void registerValidator(Validator* validator) const;\r
+ \r
+ /**\r
+ * @see ValidatingXMLObject::deregisterValidator()\r
+ */\r
+ void deregisterValidator(Validator* validator) const;\r
+ \r
+ /**\r
+ * @see ValidatingXMLObject::validate()\r
+ */\r
+ void validate(bool validateDescendants) const;\r
+\r
+ protected:\r
+ AbstractValidatingXMLObject() : m_validators(NULL) {}\r
+\r
+ private:\r
+ struct XMLTOOL_DLLLOCAL ValidatorWrapper {\r
+ ~ValidatorWrapper(); \r
+ std::vector<Validator*> v;\r
+ };\r
+ \r
+ mutable ValidatorWrapper* m_validators;\r
+ };\r
+ \r
+};\r
+\r
+#if defined (_MSC_VER)\r
+ #pragma warning( pop )\r
+#endif\r
+\r
+#endif /* __xmltooling_abstractvalxmlobj_h__ */\r
--- /dev/null
+/*\r
+ * Copyright 2001-2006 Internet2\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+/**\r
+ * @file ValidatingXMLObject.h\r
+ * \r
+ * An XMLObject that can evaluate per-object validation rules. \r
+ */\r
+\r
+#if !defined(__xmltooling_valxmlobj_h__)\r
+#define __xmltooling_valxmlobj_h__\r
+\r
+#include <vector>\r
+#include <xmltooling/XMLObject.h>\r
+#include <xmltooling/validation/Validator.h>\r
+\r
+#if defined (_MSC_VER)\r
+ #pragma warning( push )\r
+ #pragma warning( disable : 4250 4251 )\r
+#endif\r
+\r
+namespace xmltooling {\r
+\r
+ /**\r
+ * A functional interface for XMLObjects that offer the ability\r
+ * to evaluate validation rules defined per-object.\r
+ */\r
+ class XMLTOOL_API ValidatingXMLObject : public virtual XMLObject\r
+ {\r
+ protected:\r
+ ValidatingXMLObject() {}\r
+ \r
+ public:\r
+ virtual ~ValidatingXMLObject() {}\r
+ \r
+ /**\r
+ * Registers a validator for this XMLObject.\r
+ * \r
+ * @param validator the validator\r
+ */\r
+ virtual void registerValidator(Validator* validator) const=0;\r
+ \r
+ /**\r
+ * Deregisters a validator for this XMLObject.\r
+ * \r
+ * @param validator the validator\r
+ */\r
+ virtual void deregisterValidator(Validator* validator) const=0;\r
+ \r
+ /**\r
+ * Validates this XMLObject against all registered validators.\r
+ * \r
+ * @param validateDescendants true if all the descendants of this object should \r
+ * be validated as well, false if not\r
+ * \r
+ * @throws ValidationException thrown if the object is not valid\r
+ */\r
+ virtual void validate(bool validateDescendants) const=0;\r
+ };\r
+ \r
+};\r
+\r
+#if defined (_MSC_VER)\r
+ #pragma warning( pop )\r
+#endif\r
+\r
+#endif /* __xmltooling_valxmlobj_h__ */\r
#include <xmltooling/QName.h>\r
#include <xmltooling/XMLObject.h>\r
\r
-using namespace xercesc;\r
-\r
#if defined (_MSC_VER)\r
#pragma warning( push )\r
#pragma warning( disable : 4250 4251 )\r
Name="validation"\r
>\r
<File\r
+ RelativePath=".\validation\AbstractValidatingXMLObject.cpp"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath=".\validation\Validator.cpp"\r
>\r
</File>\r
Name="validation"\r
>\r
<File\r
+ RelativePath=".\validation\AbstractValidatingXMLObject.h"\r
+ >\r
+ </File>\r
+ <File\r
+ RelativePath=".\validation\ValidatingXMLObject.h"\r
+ >\r
+ </File>\r
+ <File\r
RelativePath=".\validation\Validator.h"\r
>\r
</File>\r
SimpleXMLObject(
const XMLCh* namespaceURI=NULL, const XMLCh* elementLocalName=NULL, const XMLCh* namespacePrefix=NULL
- ) : AbstractDOMCachingXMLObject(namespaceURI, elementLocalName, namespacePrefix), m_id(NULL), m_value(NULL) {
+ ) : AbstractXMLObject(namespaceURI, elementLocalName, namespacePrefix), m_id(NULL), m_value(NULL) {
#ifndef XMLTOOLING_NO_XMLSEC
m_children.push_back(NULL);
m_signature=m_children.begin();