174 std::map<std::string, ruleRuleKeys> & rrkMap,
175 mx::app::appConfigurator & config
178 std::vector<std::string> sections;
180 config.unusedSections(sections);
182 if( sections.size() == 0 )
184 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"no rules found in config");
188 for(
size_t i=0; i< sections.size(); ++i)
190 bool ruleTypeSet = config.isSetUnused(mx::app::iniFile::makeKey(sections[i],
"ruleType" ));
193 if( !ruleTypeSet )
continue;
196 if(maps.
rules.count(sections[i]) != 0)
198 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"duplicate rule: " + sections[i]);
201 std::string ruleType;
202 config.configUnused(ruleType, mx::app::iniFile::makeKey(sections[i],
"ruleType" ));
204 std::string priostr=
"none";
205 config.configUnused(priostr, mx::app::iniFile::makeKey(sections[i],
"priority" ));
209 config.configUnused(message, mx::app::iniFile::makeKey(sections[i],
"message" ));
210 stripQuotesWS(message);
214 std::string compstr=
"Eq";
215 config.configUnused(compstr, mx::app::iniFile::makeKey(sections[i],
"comp" ));
221 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], nvr}));
227 pcf::IndiProperty * prop =
nullptr;
230 extractRuleProp( &prop, element, maps, sections[i],
"property",
"element", pcf::IndiProperty::Number, config );
234 double target = nvr->
target();
235 config.configUnused(target, mx::app::iniFile::makeKey(sections[i],
"target" ));
238 double tol = nvr->
tol();
239 config.configUnused(tol, mx::app::iniFile::makeKey(sections[i],
"tol" ));
245 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], tvr}));
251 pcf::IndiProperty * prop =
nullptr;
254 extractRuleProp( &prop, element, maps, sections[i],
"property",
"element", pcf::IndiProperty::Text, config );
259 std::string target = tvr->
target();
260 config.configUnused(target, mx::app::iniFile::makeKey(sections[i],
"target" ));
267 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], svr}));
273 pcf::IndiProperty * prop =
nullptr;
276 extractRuleProp( &prop, element, maps, sections[i],
"property",
"element", pcf::IndiProperty::Switch, config );
280 std::string target =
"On";
281 config.configUnused(target, mx::app::iniFile::makeKey(sections[i],
"target" ));
287 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], nvr}));
293 pcf::IndiProperty * prop1;
294 std::string element1;
296 extractRuleProp( &prop1, element1, maps, sections[i],
"property1",
"element1", pcf::IndiProperty::Number, config );
300 pcf::IndiProperty * prop2;
301 std::string element2;
303 extractRuleProp( &prop2, element2, maps, sections[i],
"property2",
"element2", pcf::IndiProperty::Number, config );
310 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], tvr}));
316 pcf::IndiProperty * prop1;
317 std::string element1;
319 extractRuleProp( &prop1, element1, maps, sections[i],
"property1",
"element1", pcf::IndiProperty::Text, config );
323 pcf::IndiProperty * prop2;
324 std::string element2;
326 extractRuleProp( &prop2, element2, maps, sections[i],
"property2",
"element2", pcf::IndiProperty::Text, config );
333 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], svr}));
339 pcf::IndiProperty * prop1;
340 std::string element1;
342 extractRuleProp( &prop1, element1, maps, sections[i],
"property1",
"element1", pcf::IndiProperty::Switch, config );
346 pcf::IndiProperty * prop2;
347 std::string element2;
349 extractRuleProp( &prop2, element2, maps, sections[i],
"property2",
"element2", pcf::IndiProperty::Switch, config );
357 if(rrkMap.count(sections[i]) > 0)
360 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"duplicate ruleRule: " + sections[i]);
364 maps.
rules.insert(std::pair<std::string, indiCompRule*>({sections[i], rcr}));
371 config.configUnused(rrk.
rule1, mx::app::iniFile::makeKey(sections[i],
"rule1" ));
374 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"rule1 for ruleVal rule " + sections[i] +
" not found");
376 if(rrk.
rule1 == sections[i])
378 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"rule1 for ruleVal rule " + sections[i] +
" can't equal rule name");
381 config.configUnused(rrk.
rule2, mx::app::iniFile::makeKey(sections[i],
"rule2" ));
384 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"rule2 for ruleVal rule " + sections[i] +
" not found");
386 if(rrk.
rule2 == sections[i])
388 mxThrowException(mx::err::invalidconfig,
"loadRuleConfig",
"rule2 for ruleVal rule " + sections[i] +
" can't equal rule name");
391 rrkMap.insert(std::pair<std::string, ruleRuleKeys>(sections[i], rrk));
395 mxThrowException(mx::err::notimpl,
"loadRuleConfig",
"unknown rule type " + ruleType +
" in " + sections[i]);