Commit 52d1b756fac543cb6136bdcac9c5d7b4be824192

Authored by zbeacon
Committed by Andrew Shvayka
1 parent 9746df84

Fix for test script node function

... ... @@ -18,6 +18,7 @@ package org.thingsboard.server.controller;
18 18 import com.fasterxml.jackson.core.type.TypeReference;
19 19 import com.fasterxml.jackson.databind.JsonNode;
20 20 import com.fasterxml.jackson.databind.ObjectMapper;
  21 +import com.fasterxml.jackson.databind.node.ArrayNode;
21 22 import com.fasterxml.jackson.databind.node.ObjectNode;
22 23 import lombok.extern.slf4j.Slf4j;
23 24 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -432,4 +433,22 @@ public class RuleChainController extends BaseController {
432 433 return objectMapper.writeValueAsString(msgData);
433 434 }
434 435
  436 + private String msgToOutput(List<TbMsg> msgs) throws Exception {
  437 + ArrayNode resultNode = objectMapper.createArrayNode();
  438 + for (TbMsg msg:msgs) {
  439 + ObjectNode msgData = objectMapper.createObjectNode();
  440 + if (!StringUtils.isEmpty(msg.getData())) {
  441 + msgData.set("msg", objectMapper.readTree(msg.getData()));
  442 + }
  443 + Map<String, String> metadata = msg.getMetaData().getData();
  444 + msgData.set("metadata", objectMapper.valueToTree(metadata));
  445 + msgData.put("msgType", msg.getType());
  446 + resultNode.add(msgData);
  447 + }
  448 + if (resultNode.size() == 1) {
  449 + return objectMapper.writeValueAsString(resultNode.get(0));
  450 + }
  451 + return objectMapper.writeValueAsString(resultNode);
  452 + }
  453 +
435 454 }
... ...
... ... @@ -108,13 +108,18 @@ public class RuleNodeJsScriptEngine implements org.thingsboard.rule.engine.api.S
108 108 }
109 109
110 110 @Override
111   - public TbMsg executeUpdate(TbMsg msg) throws ScriptException {
  111 + public List<TbMsg> executeUpdate(TbMsg msg) throws ScriptException {
112 112 JsonNode result = executeScript(msg);
113   - if (!result.isObject()) {
  113 + if (result.isObject()) {
  114 + return Collections.singletonList(unbindMsg(result, msg));
  115 + } else if (result.isArray()){
  116 + List<TbMsg> res = new ArrayList<>(result.size());
  117 + result.forEach(jsonObject -> res.add(unbindMsg(jsonObject, msg)));
  118 + return res;
  119 + } else {
114 120 log.warn("Wrong result type: {}", result.getNodeType());
115 121 throw new ScriptException("Wrong result type: " + result.getNodeType());
116 122 }
117   - return unbindMsg(result, msg);
118 123 }
119 124
120 125 @Override
... ...
... ... @@ -25,7 +25,7 @@ import java.util.Set;
25 25
26 26 public interface ScriptEngine {
27 27
28   - TbMsg executeUpdate(TbMsg msg) throws ScriptException;
  28 + List<TbMsg> executeUpdate(TbMsg msg) throws ScriptException;
29 29
30 30 ListenableFuture<List<TbMsg>> executeUpdateAsync(TbMsg msg);
31 31
... ...