2 * Licensed to the University Corporation for Advanced Internet
3 * Development, Inc. (UCAID) under one or more contributor license
4 * agreements. See the NOTICE file distributed with this work for
5 * additional information regarding copyright ownership.
7 * UCAID licenses this file to you under the Apache License,
8 * Version 2.0 (the "License"); you may not use this file except
9 * in compliance with the License. You may obtain a copy of the
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17 * either express or implied. See the License for the specific
18 * language governing permissions and limitations under the License.
24 * Groups of rule checkers of XMLObjects based on type or element name.
28 #include "validation/Validator.h"
29 #include "validation/ValidatorSuite.h"
31 using namespace xmltooling;
34 Validator::Validator()
38 Validator::~Validator()
42 ValidatorSuite xmltooling::SchemaValidators("SchemaValidators");
44 ValidatorSuite::ValidatorSuite(const char* id) : m_id(id)
48 ValidatorSuite::~ValidatorSuite()
53 const char* ValidatorSuite::getId()
58 void ValidatorSuite::registerValidator(const QName& key, Validator* validator)
60 m_map.insert(pair<const QName,Validator*>(key, validator));
63 void ValidatorSuite::deregisterValidators(const QName& key)
65 pair<multimap<QName,Validator*>::iterator,multimap<QName,Validator*>::iterator> range=m_map.equal_range(key);
66 for_each(range.first, range.second, xmltooling::cleanup_pair<QName,Validator>());
67 m_map.erase(range.first, range.second);
70 void ValidatorSuite::destroyValidators()
72 for_each(m_map.begin(),m_map.end(),xmltooling::cleanup_pair<QName,Validator>());
76 void ValidatorSuite::validate(const XMLObject* xmlObject) const
81 pair<multimap<QName,Validator*>::const_iterator,multimap<QName,Validator*>::const_iterator> range;
82 if (xmlObject->getSchemaType()) {
83 range=m_map.equal_range(*(xmlObject->getSchemaType()));
84 while (range.first!=range.second) {
85 range.first->second->validate(xmlObject);
89 range=m_map.equal_range(xmlObject->getElementQName());
90 while (range.first!=range.second) {
91 range.first->second->validate(xmlObject);
95 const list<XMLObject*>& kids=xmlObject->getOrderedChildren();
96 for (list<XMLObject*>::const_iterator j=kids.begin(); j!=kids.end(); j++)