From 0d69170cef57fa0561e6ead2387bc26db2212f13 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 25 Jan 2014 02:07:54 +0100 Subject: [PATCH] complete rules in json api --- server/jsonrpc/jsontypes.cpp | 47 +++++++++++++++++++++++++++++++-- server/jsonrpc/jsontypes.h | 7 +++++ server/jsonrpc/ruleshandler.cpp | 8 +++++- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/server/jsonrpc/jsontypes.cpp b/server/jsonrpc/jsontypes.cpp index bad29913..148ac6db 100644 --- a/server/jsonrpc/jsontypes.cpp +++ b/server/jsonrpc/jsontypes.cpp @@ -17,9 +17,11 @@ QVariantMap allTypes() allTypes.insert("DeviceClass", deviceClassDescription()); allTypes.insert("PluginType", pluginTypeDescription()); allTypes.insert("Param", paramDescription()); + allTypes.insert("State", stateDescription()); allTypes.insert("Trigger", triggerDescription()); allTypes.insert("Device", deviceDescription()); allTypes.insert("Action", actionDescription()); + allTypes.insert("Rule", ruleDescription()); return allTypes; } @@ -82,6 +84,21 @@ QVariantMap stateTypeDescription() return stateTypeDescription; } +QString stateRef() +{ + return "$ref:Sate"; +} + +QVariantMap stateDescription() +{ + QVariantMap stateDescription; + stateDescription.insert("stateTypeId", "uuid"); + stateDescription.insert("deviceId", "uuid"); + stateDescription.insert("value", "variant"); + return stateDescription; +} + + QString triggerTypeRef() { return "$ref:TriggerType"; @@ -126,7 +143,7 @@ QVariantMap triggerDescription() QVariantMap packTrigger(const Trigger &trigger) { QVariantMap variant; - variant.insert("id", trigger.triggerTypeId()); + variant.insert("triggerTypeId", trigger.triggerTypeId()); variant.insert("deviceId", trigger.deviceId()); variant.insert("params", trigger.params()); return variant; @@ -294,6 +311,27 @@ QVariantMap packDevice(Device *device) return variant; } +QString ruleRef() +{ + return "$ref:Rule"; +} + +QVariantMap ruleDescription() +{ + QVariantMap ruleDescription; + ruleDescription.insert("id", "uuid"); + ruleDescription.insert("trigger", triggerRef()); + QVariantList actions; + actions.append(actionRef()); + ruleDescription.insert("actions", actions); + QVariantList states; + states.append(stateRef()); + ruleDescription.insert("states", states); + return ruleDescription; +} + +//QVariantMap packRule(const Rule &rule); + bool validateMap(const QVariantMap &templateMap, const QVariantMap &map) { foreach (const QString &key, templateMap.keys()) { @@ -390,7 +428,12 @@ bool validateVariant(const QVariant &templateVariant, const QVariant &variant) } } else if (refName == pluginTypeRef()) { if (!validateMap(pluginTypeDescription(), variant.toMap())) { - qDebug() << "plugin type not matchint"; + qDebug() << "plugin type not matching"; + return false; + } + } else if (refName == ruleRef()) { + if (!validateMap(ruleDescription(), variant.toMap())) { + qDebug() << "rule type not matching"; return false; } } else if (refName == basicTypesRef()) { diff --git a/server/jsonrpc/jsontypes.h b/server/jsonrpc/jsontypes.h index 468ba6a4..17fd53fb 100644 --- a/server/jsonrpc/jsontypes.h +++ b/server/jsonrpc/jsontypes.h @@ -29,6 +29,9 @@ namespace JsonTypes QString stateTypeRef(); QVariantMap stateTypeDescription(); + QString stateRef(); + QVariantMap stateDescription(); + QString triggerTypeRef(); QVariantMap triggerTypeDescription(); QVariantMap packTriggerType(const TriggerType &triggerType); @@ -57,6 +60,10 @@ namespace JsonTypes QVariantMap deviceDescription(); QVariantMap packDevice(Device *device); + QString ruleRef(); + QVariantMap ruleDescription(); +// QVariantMap packRule(const Rule &rule); + bool validateMap(const QVariantMap &templateMap, const QVariantMap &map); bool validateProperty(const QVariant &templateValue, const QVariant &value); bool validateList(const QVariantList &templateList, const QVariantList &list); diff --git a/server/jsonrpc/ruleshandler.cpp b/server/jsonrpc/ruleshandler.cpp index 83678a0b..41f3087d 100644 --- a/server/jsonrpc/ruleshandler.cpp +++ b/server/jsonrpc/ruleshandler.cpp @@ -14,6 +14,9 @@ RulesHandler::RulesHandler(QObject *parent) : params.clear(); returns.clear(); setDescription("GetRules", "Get all configured rules"); setParams("GetRules", params); + QVariantList rules; + rules.append(JsonTypes::ruleRef()); + returns.insert("rules", rules); setReturns("GetRules", returns); params.clear(); returns.clear(); @@ -46,8 +49,11 @@ QVariantMap RulesHandler::GetRules(const QVariantMap ¶ms) foreach (const Action &action, rule.actions()) { actionList.append(JsonTypes::packAction(action)); } - ruleMap.insert("actions", actionList); + + QVariantList states; + ruleMap.insert("states", states); + rulesList.append(ruleMap); } QVariantMap returns;