Added ValidatorSuite around groups of static validators.
[shibboleth/cpp-xmltooling.git] / xmltooling / validation / ValidatorSuite.cpp
similarity index 66%
rename from xmltooling/validation/Validator.cpp
rename to xmltooling/validation/ValidatorSuite.cpp
index a39a332..1ff5a29 100644 (file)
  */\r
 \r
 /**\r
- * Validator.cpp\r
+ * ValidatorSuite.cpp\r
  * \r
- * Rules checking of XMLObjects \r
+ * Groups of rule checkers of XMLObjects based on type or element name. \r
  */\r
 \r
 #include "internal.h"\r
-#include "validation/Validator.h"\r
+#include "validation/ValidatorSuite.h"\r
 #include "util/XMLHelper.h"\r
 \r
 using namespace xmltooling;\r
 using namespace std;\r
 \r
-map< QName, vector<Validator*> > Validator::m_map;\r
+namespace {\r
+    class XMLTOOL_DLLLOCAL _clearvector {\r
+    public:\r
+        void operator()(const pair< QName, vector<Validator*> >& p) const {\r
+            for_each(p.second.begin(),p.second.end(),xmltooling::cleanup<Validator>());\r
+        }\r
+    };\r
+}\r
+\r
+void ValidatorSuite::deregisterValidators(const QName& key)\r
+{\r
+    map< QName, vector<Validator*> >::iterator i=m_map.find(key);\r
+    if (i!=m_map.end()) {\r
+        _clearvector f;\r
+        f(*i);\r
+        m_map.erase(i);\r
+    }\r
+}\r
+\r
+void ValidatorSuite::destroyValidators()\r
+{\r
+    for_each(m_map.begin(),m_map.end(),_clearvector());\r
+    m_map.clear();\r
+}\r
 \r
-void Validator::checkValidity(const XMLObject* xmlObject)\r
+void ValidatorSuite::validate(const XMLObject* xmlObject) const\r
 {\r
     if (!xmlObject)\r
         return;\r
 \r
-    map< QName, vector<Validator*> >::iterator i;\r
+    map< QName, vector<Validator*> >::const_iterator i;\r
     if (xmlObject->getSchemaType()) {\r
         i=m_map.find(*(xmlObject->getSchemaType()));\r
         if (i!=m_map.end())\r
@@ -45,28 +68,6 @@ void Validator::checkValidity(const XMLObject* xmlObject)
         for_each(i->second.begin(),i->second.end(),bind2nd(mem_fun<void,Validator,const XMLObject*>(&Validator::validate),xmlObject));\r
 \r
     const list<XMLObject*>& kids=xmlObject->getOrderedChildren();\r
-    for_each(kids.begin(),kids.end(),Validator::checkValidity);\r
-}\r
-\r
-class _clearvector {\r
-public:\r
-    void operator()(const pair< QName, vector<Validator*> >& p) const {\r
-        for_each(p.second.begin(),p.second.end(),xmltooling::cleanup<Validator>());\r
-    }\r
-};\r
-\r
-void Validator::deregisterValidators(const QName& key)\r
-{\r
-    map< QName, vector<Validator*> >::iterator i=m_map.find(key);\r
-    if (i!=m_map.end()) {\r
-        _clearvector f;\r
-        f(*i);\r
-        m_map.erase(i);\r
-    }\r
-}\r
-\r
-void Validator::destroyValidators()\r
-{\r
-    for_each(m_map.begin(),m_map.end(),_clearvector());\r
-    m_map.clear();\r
+    for (list<XMLObject*>::const_iterator j=kids.begin(); j!=kids.end(); j++)\r
+        validate(*j);\r
 }\r