Allow using more than one %validator rule for the same type

fixes #8829
This commit is contained in:
Gunnar Beutner 2015-03-20 15:49:55 +01:00
parent ae204092cc
commit e8cee8d5e2
5 changed files with 224 additions and 228 deletions

View File

@ -372,9 +372,9 @@ type: T_TYPE identifier
context->m_Type->GetRuleList()->AddRules(ruleList);
context->m_Type->GetRuleList()->AddRequires(ruleList);
String validator = ruleList->GetValidator();
if (!validator.IsEmpty())
context->m_Type->GetRuleList()->SetValidator(validator);
BOOST_FOREACH(const String& validator, ruleList->GetValidators()) {
context->m_Type->GetRuleList()->AddValidator(validator);
}
}
;
@ -407,7 +407,7 @@ typerule: T_REQUIRE T_STRING
}
| T_VALIDATOR T_STRING
{
context->m_RuleLists.top()->SetValidator($2);
context->m_RuleLists.top()->AddValidator($2);
free($2);
}
| T_ATTRIBUTE type T_STRING

View File

@ -169,9 +169,7 @@ void ConfigType::ValidateObject(const Object::Ptr& object,
locations.pop_back();
}
String validator = ruleList->GetValidator();
if (!validator.IsEmpty()) {
BOOST_FOREACH(const String& validator, ruleList->GetValidators()) {
Function::Ptr func = ScriptGlobal::Get(validator, &Empty);
if (!func)
@ -226,9 +224,7 @@ void ConfigType::ValidateArray(const Array::Ptr& array,
locations.pop_back();
}
String validator = ruleList->GetValidator();
if (!validator.IsEmpty()) {
BOOST_FOREACH(const String& validator, ruleList->GetValidators()) {
Function::Ptr func = ScriptGlobal::Get(validator, &Empty);
if (!func)

View File

@ -24,23 +24,23 @@
using namespace icinga;
/**
* Sets the validator method for a rule list.
* Adds a validator method for a rule list.
*
* @param validator The validator.
*/
void TypeRuleList::SetValidator(const String& validator)
void TypeRuleList::AddValidator(const String& validator)
{
m_Validator = validator;
m_Validators.push_back(validator);
}
/**
* Retrieves the validator method.
* Retrieves the validator methods.
*
* @returns The validator method.
* @returns The validator methods.
*/
String TypeRuleList::GetValidator(void) const
std::vector<String> TypeRuleList::GetValidators(void) const
{
return m_Validator;
return m_Validators;
}
/**

View File

@ -50,8 +50,8 @@ class I2_CONFIG_API TypeRuleList : public Object
public:
DECLARE_PTR_TYPEDEFS(TypeRuleList);
void SetValidator(const String& validator);
String GetValidator(void) const;
void AddValidator(const String& validator);
std::vector<String> GetValidators(void) const;
void AddRequire(const String& attr);
void AddRequires(const TypeRuleList::Ptr& ruleList);
@ -66,7 +66,7 @@ public:
size_t GetLength(void) const;
private:
String m_Validator;
std::vector<String> m_Validators;
std::vector<String> m_Requires;
std::vector<TypeRule> m_Rules;
};