fixed rule action setting error

pull/135/head
Simon Stürz 2015-06-08 14:01:37 +02:00 committed by Michael Zanetti
parent 6a35dd61e4
commit 9edb3b8b40
2 changed files with 45 additions and 30 deletions

View File

@ -113,8 +113,12 @@ void RuleActionParam::setEventTypeId(const EventTypeId &eventTypeId)
/*! Writes the name, value, eventId and eventParamName of the given \a ruleActionParam to \a dbg. */
QDebug operator<<(QDebug dbg, const RuleActionParam &ruleActionParam)
{
dbg.nospace() << "RuleActionParam(Name: " << ruleActionParam.name() << ", Value:" << ruleActionParam.value() << ", EventTypeId:" << ruleActionParam.eventTypeId().toString() << ", EventParamName:" << ruleActionParam.eventParamName() << ")";
dbg.nospace() << "RuleActionParam(Name: " << ruleActionParam.name() << ", Value:" << ruleActionParam.value();
if (ruleActionParam.eventTypeId() != EventTypeId()) {
dbg.nospace() << ", EventTypeId:" << ruleActionParam.eventTypeId().toString() << ", EventParamName:" << ruleActionParam.eventParamName() << ")";
} else {
dbg.nospace() << ")";
}
return dbg.space();
}

View File

@ -100,13 +100,13 @@ RuleEngine::RuleEngine(QObject *parent) :
QSettings settings(m_settingsFile);
qDebug() << "laoding rules from" << settings.fileName();
foreach (const QString &idString, settings.childGroups()) {
qDebug() << "found rule" << idString;
settings.beginGroup(idString);
QString name = settings.value("name", idString).toString();
bool enabled = settings.value("enabled", true).toBool();
qDebug() << "found rule" << name << idString;
QList<EventDescriptor> eventDescriptorList;
settings.beginGroup("events");
@ -132,37 +132,46 @@ RuleEngine::RuleEngine(QObject *parent) :
settings.endGroup();
}
}
settings.endGroup();
StateEvaluator stateEvaluator = StateEvaluator::loadFromSettings(settings, "stateEvaluator");
settings.beginGroup("ruleActions");
QList<RuleAction> actions;
foreach (const QString &actionIdString, settings.childGroups()) {
settings.beginGroup(actionIdString);
RuleAction action = RuleAction(ActionTypeId(settings.value("actionTypeId").toString()), DeviceId(settings.value("deviceId").toString()));
settings.beginGroup("ruleActions");
foreach (const QString &actionNumber, settings.childGroups()) {
settings.beginGroup(actionNumber);
RuleAction action = RuleAction(ActionTypeId(settings.value("actionTypeId").toString()),
DeviceId(settings.value("deviceId").toString()));
RuleActionParamList params;
foreach (QString paramNameString, settings.childGroups()) {
if (paramNameString.startsWith("RuleActionParam-")) {
settings.beginGroup(paramNameString);
RuleActionParam param(paramNameString.remove(QRegExp("^RuleActionParam-")), settings.value("value",QVariant()), EventTypeId(settings.value("eventTypeId", EventTypeId()).toString()), settings.value("eventParamName", QString()).toString());
RuleActionParam param(paramNameString.remove(QRegExp("^RuleActionParam-")),
settings.value("value",QVariant()),
EventTypeId(settings.value("eventTypeId", EventTypeId()).toString()),
settings.value("eventParamName", QString()).toString());
params.append(param);
settings.endGroup();
}
}
action.setRuleActionParams(params);
actions.append(action);
settings.endGroup();
actions.append(action);
}
settings.endGroup();
settings.beginGroup("ruleExitActions");
QList<RuleAction> exitActions;
foreach (const QString &actionIdString, settings.childGroups()) {
settings.beginGroup(actionIdString);
RuleAction action = RuleAction(ActionTypeId(settings.value("actionTypeId").toString()), DeviceId(settings.value("deviceId").toString()));
settings.beginGroup("ruleExitActions");
foreach (const QString &actionNumber, settings.childGroups()) {
settings.beginGroup(actionNumber);
RuleAction action = RuleAction(ActionTypeId(settings.value("actionTypeId").toString()),
DeviceId(settings.value("deviceId").toString()));
RuleActionParamList params;
foreach (QString paramNameString, settings.childGroups()) {
if (paramNameString.startsWith("RuleActionParam-")) {
@ -173,17 +182,15 @@ RuleEngine::RuleEngine(QObject *parent) :
}
}
action.setRuleActionParams(params);
settings.endGroup();
exitActions.append(action);
settings.endGroup();
}
settings.endGroup();
settings.endGroup();
Rule rule = Rule(RuleId(idString), name, eventDescriptorList, stateEvaluator, actions, exitActions);
rule.setEnabled(enabled);
appendRule(rule);
settings.endGroup();
}
}
@ -341,7 +348,7 @@ RuleEngine::RuleError RuleEngine::addRule(const RuleId &ruleId, const QString &n
const EventDescriptor &eventDescriptor = eventDescriptorList.at(i);
settings.beginGroup("EventDescriptor-" + QString::number(i));
settings.setValue("deviceId", eventDescriptor.deviceId().toString());
settings.setValue("eventTypeId", eventDescriptor.eventTypeId());
settings.setValue("eventTypeId", eventDescriptor.eventTypeId().toString());
foreach (const ParamDescriptor &paramDescriptor, eventDescriptor.paramDescriptors()) {
settings.beginGroup("ParamDescriptor-" + paramDescriptor.name());
@ -357,37 +364,41 @@ RuleEngine::RuleError RuleEngine::addRule(const RuleId &ruleId, const QString &n
stateEvaluator.dumpToSettings(settings, "stateEvaluator");
// Save ruleActions
int i = 0;
settings.beginGroup("ruleActions");
foreach (const RuleAction &action, rule.actions()) {
settings.beginGroup(action.actionTypeId().toString());
settings.setValue("deviceId", action.deviceId());
settings.setValue("actionTypeId", action.actionTypeId());
settings.beginGroup(QString::number(i));
settings.setValue("deviceId", action.deviceId().toString());
settings.setValue("actionTypeId", action.actionTypeId().toString());
foreach (const RuleActionParam &param, action.ruleActionParams()) {
settings.beginGroup("RuleActionParam-" + param.name());
settings.setValue("eventTypeId", param.eventTypeId());
settings.setValue("eventParamName", param.eventParamName());
settings.setValue("value", param.value());
if (param.eventTypeId() != EventTypeId()) {
settings.setValue("eventTypeId", param.eventTypeId().toString());
settings.setValue("eventParamName", param.eventParamName());
}
settings.endGroup();
}
i++;
settings.endGroup();
}
settings.endGroup();
// Save ruleExitActions
settings.beginGroup("ruleExitActions");
i = 0;
foreach (const RuleAction &action, rule.exitActions()) {
settings.beginGroup(action.actionTypeId().toString());
settings.setValue("deviceId", action.deviceId());
settings.setValue("actionTypeId", action.actionTypeId());
settings.beginGroup(QString::number(i));
settings.setValue("deviceId", action.deviceId().toString());
settings.setValue("actionTypeId", action.actionTypeId().toString());
foreach (const RuleActionParam &param, action.ruleActionParams()) {
settings.beginGroup("RuleActionParam-" + param.name());
settings.setValue("value", param.value());
settings.endGroup();
}
i++;
settings.endGroup();
}
settings.endGroup();
return RuleErrorNoError;