99 std::map<std::string, ruleRuleKeys> & rrkMap,
100 mx::app::appConfigurator & config
103 std::vector<std::string> sections;
105 config.unusedSections(sections);
107 if( sections.size() == 0 )
109 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"no rules found in config");
113 for(
size_t i=0; i< sections.size(); ++i)
115 bool ruleTypeSet = config.isSetUnused(mx::app::iniFile::makeKey(sections[i],
"ruleType" ));
118 if( !ruleTypeSet )
continue;
121 if(maps.
rules.count(sections[i]) != 0)
123 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"duplicate rule: " + sections[i]);
126 std::string ruleType;
127 config.configUnused(ruleType, mx::app::iniFile::makeKey(sections[i],
"ruleType" ));
129 std::string priostr=
"none";
130 config.configUnused(priostr, mx::app::iniFile::makeKey(sections[i],
"priority" ));
134 config.configUnused(message, mx::app::iniFile::makeKey(sections[i],
"message" ));
136 std::string compstr=
"Eq";
137 config.configUnused(compstr, mx::app::iniFile::makeKey(sections[i],
"comp" ));
143 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], nvr}));
149 pcf::IndiProperty * prop =
nullptr;
152 extractRuleProp( &prop, element, maps, sections[i],
"property",
"element", pcf::IndiProperty::Number, config );
156 double target = nvr->
target();
157 config.configUnused(target, mx::app::iniFile::makeKey(sections[i],
"target" ));
160 double tol = nvr->
tol();
161 config.configUnused(tol, mx::app::iniFile::makeKey(sections[i],
"tol" ));
167 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], tvr}));
173 pcf::IndiProperty * prop =
nullptr;
176 extractRuleProp( &prop, element, maps, sections[i],
"property",
"element", pcf::IndiProperty::Text, config );
181 std::string target = tvr->
target();
182 config.configUnused(target, mx::app::iniFile::makeKey(sections[i],
"target" ));
189 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], svr}));
195 pcf::IndiProperty * prop =
nullptr;
198 extractRuleProp( &prop, element, maps, sections[i],
"property",
"element", pcf::IndiProperty::Switch, config );
202 std::string target =
"On";
203 config.configUnused(target, mx::app::iniFile::makeKey(sections[i],
"target" ));
209 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], nvr}));
215 pcf::IndiProperty * prop1;
216 std::string element1;
218 extractRuleProp( &prop1, element1, maps, sections[i],
"property1",
"element1", pcf::IndiProperty::Number, config );
222 pcf::IndiProperty * prop2;
223 std::string element2;
225 extractRuleProp( &prop2, element2, maps, sections[i],
"property2",
"element2", pcf::IndiProperty::Number, config );
232 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], tvr}));
238 pcf::IndiProperty * prop1;
239 std::string element1;
241 extractRuleProp( &prop1, element1, maps, sections[i],
"property1",
"element1", pcf::IndiProperty::Text, config );
245 pcf::IndiProperty * prop2;
246 std::string element2;
248 extractRuleProp( &prop2, element2, maps, sections[i],
"property2",
"element2", pcf::IndiProperty::Text, config );
255 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], svr}));
261 pcf::IndiProperty * prop1;
262 std::string element1;
264 extractRuleProp( &prop1, element1, maps, sections[i],
"property1",
"element1", pcf::IndiProperty::Switch, config );
268 pcf::IndiProperty * prop2;
269 std::string element2;
271 extractRuleProp( &prop2, element2, maps, sections[i],
"property2",
"element2", pcf::IndiProperty::Switch, config );
279 if(rrkMap.count(sections[i]) > 0)
282 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"duplicate ruleRule: " + sections[i]);
286 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], rcr}));
293 config.configUnused(rrk.
rule1, mx::app::iniFile::makeKey(sections[i],
"rule1" ));
296 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"rule1 for ruleVal rule " + sections[i] +
" not found");
298 if(rrk.
rule1 == sections[i])
300 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"rule1 for ruleVal rule " + sections[i] +
" can't equal rule name");
303 config.configUnused(rrk.
rule2, mx::app::iniFile::makeKey(sections[i],
"rule2" ));
306 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"rule2 for ruleVal rule " + sections[i] +
" not found");
308 if(rrk.
rule2 == sections[i])
310 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"rule2 for ruleVal rule " + sections[i] +
" can't equal rule name");
313 rrkMap.insert(std::pair<std::string, ruleRuleKeys>(sections[i], rrk));
317 mxThrowException(mx::err::notimpl,
"loadRuleConfig",
"unknown rule type " + ruleType +
" in " + sections[i]);