From 52d1b756fac543cb6136bdcac9c5d7b4be824192 Mon Sep 17 00:00:00 2001 From: zbeacon Date: Tue, 16 Mar 2021 14:43:22 +0200 Subject: [PATCH] Fix for test script node function --- .../controller/RuleChainController.java | 19 +++++++++++++++++++ .../script/RuleNodeJsScriptEngine.java | 11 ++++++++--- .../rule/engine/api/ScriptEngine.java | 2 +- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java b/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java index bc6d575242..030fa67995 100644 --- a/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java +++ b/application/src/main/java/org/thingsboard/server/controller/RuleChainController.java @@ -18,6 +18,7 @@ package org.thingsboard.server.controller; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -432,4 +433,22 @@ public class RuleChainController extends BaseController { return objectMapper.writeValueAsString(msgData); } + private String msgToOutput(List msgs) throws Exception { + ArrayNode resultNode = objectMapper.createArrayNode(); + for (TbMsg msg:msgs) { + ObjectNode msgData = objectMapper.createObjectNode(); + if (!StringUtils.isEmpty(msg.getData())) { + msgData.set("msg", objectMapper.readTree(msg.getData())); + } + Map metadata = msg.getMetaData().getData(); + msgData.set("metadata", objectMapper.valueToTree(metadata)); + msgData.put("msgType", msg.getType()); + resultNode.add(msgData); + } + if (resultNode.size() == 1) { + return objectMapper.writeValueAsString(resultNode.get(0)); + } + return objectMapper.writeValueAsString(resultNode); + } + } diff --git a/application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java b/application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java index 35f38b110e..5dffc0217c 100644 --- a/application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java +++ b/application/src/main/java/org/thingsboard/server/service/script/RuleNodeJsScriptEngine.java @@ -108,13 +108,18 @@ public class RuleNodeJsScriptEngine implements org.thingsboard.rule.engine.api.S } @Override - public TbMsg executeUpdate(TbMsg msg) throws ScriptException { + public List executeUpdate(TbMsg msg) throws ScriptException { JsonNode result = executeScript(msg); - if (!result.isObject()) { + if (result.isObject()) { + return Collections.singletonList(unbindMsg(result, msg)); + } else if (result.isArray()){ + List res = new ArrayList<>(result.size()); + result.forEach(jsonObject -> res.add(unbindMsg(jsonObject, msg))); + return res; + } else { log.warn("Wrong result type: {}", result.getNodeType()); throw new ScriptException("Wrong result type: " + result.getNodeType()); } - return unbindMsg(result, msg); } @Override diff --git a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ScriptEngine.java b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ScriptEngine.java index ca5f148ae3..49420e8feb 100644 --- a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ScriptEngine.java +++ b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/ScriptEngine.java @@ -25,7 +25,7 @@ import java.util.Set; public interface ScriptEngine { - TbMsg executeUpdate(TbMsg msg) throws ScriptException; + List executeUpdate(TbMsg msg) throws ScriptException; ListenableFuture> executeUpdateAsync(TbMsg msg);