Commit d76b9eff68a10ba5ba6b8238b26126e3b477bc19

Authored by Volodymyr Babak
1 parent 4cf29e2d

Changed default rule chain types on nodes

Showing 50 changed files with 59 additions and 108 deletions
@@ -58,6 +58,6 @@ public @interface RuleNode { @@ -58,6 +58,6 @@ public @interface RuleNode {
58 58
59 boolean customRelations() default false; 59 boolean customRelations() default false;
60 60
61 - RuleChainType[] ruleChainTypes() default RuleChainType.CORE; 61 + RuleChainType[] ruleChainTypes() default {RuleChainType.CORE, RuleChainType.EDGE};
62 62
63 } 63 }
@@ -37,9 +37,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -37,9 +37,7 @@ import org.thingsboard.server.common.msg.TbMsg;
37 "Will create new Customer if it doesn't exists and 'Create new Customer if not exists' is set to true.", 37 "Will create new Customer if it doesn't exists and 'Create new Customer if not exists' is set to true.",
38 uiResources = {"static/rulenode/rulenode-core-config.js"}, 38 uiResources = {"static/rulenode/rulenode-core-config.js"},
39 configDirective = "tbActionNodeAssignToCustomerConfig", 39 configDirective = "tbActionNodeAssignToCustomerConfig",
40 - icon = "add_circle",  
41 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE}  
42 -) 40 + icon = "add_circle")
43 public class TbAssignToCustomerNode extends TbAbstractCustomerActionNode<TbAssignToCustomerNodeConfiguration> { 41 public class TbAssignToCustomerNode extends TbAbstractCustomerActionNode<TbAssignToCustomerNodeConfiguration> {
44 42
45 @Override 43 @Override
@@ -45,9 +45,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -45,9 +45,7 @@ import org.thingsboard.server.common.msg.TbMsg;
45 "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.", 45 "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",
46 uiResources = {"static/rulenode/rulenode-core-config.js"}, 46 uiResources = {"static/rulenode/rulenode-core-config.js"},
47 configDirective = "tbActionNodeClearAlarmConfig", 47 configDirective = "tbActionNodeClearAlarmConfig",
48 - icon = "notifications_off",  
49 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE}  
50 -) 48 + icon = "notifications_off")
51 public class TbClearAlarmNode extends TbAbstractAlarmNode<TbClearAlarmNodeConfiguration> { 49 public class TbClearAlarmNode extends TbAbstractAlarmNode<TbClearAlarmNodeConfiguration> {
52 50
53 @Override 51 @Override
@@ -57,9 +57,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -57,9 +57,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
57 "Changes message originator to related entity view and produces new messages according to count of updated entity views", 57 "Changes message originator to related entity view and produces new messages according to count of updated entity views",
58 uiResources = {"static/rulenode/rulenode-core-config.js"}, 58 uiResources = {"static/rulenode/rulenode-core-config.js"},
59 configDirective = "tbNodeEmptyConfig", 59 configDirective = "tbNodeEmptyConfig",
60 - icon = "content_copy",  
61 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE}  
62 -) 60 + icon = "content_copy")
63 public class TbCopyAttributesToEntityViewNode implements TbNode { 61 public class TbCopyAttributesToEntityViewNode implements TbNode {
64 62
65 EmptyNodeConfiguration config; 63 EmptyNodeConfiguration config;
@@ -51,9 +51,7 @@ import java.util.List; @@ -51,9 +51,7 @@ import java.util.List;
51 "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.", 51 "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",
52 uiResources = {"static/rulenode/rulenode-core-config.js"}, 52 uiResources = {"static/rulenode/rulenode-core-config.js"},
53 configDirective = "tbActionNodeCreateAlarmConfig", 53 configDirective = "tbActionNodeCreateAlarmConfig",
54 - icon = "notifications_active",  
55 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE}  
56 -) 54 + icon = "notifications_active")
57 public class TbCreateAlarmNode extends TbAbstractAlarmNode<TbCreateAlarmNodeConfiguration> { 55 public class TbCreateAlarmNode extends TbAbstractAlarmNode<TbCreateAlarmNodeConfiguration> {
58 56
59 private static ObjectMapper mapper = new ObjectMapper(); 57 private static ObjectMapper mapper = new ObjectMapper();
@@ -54,9 +54,7 @@ import java.util.List; @@ -54,9 +54,7 @@ import java.util.List;
54 nodeDetails = "If the relation already exists or successfully created - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.", 54 nodeDetails = "If the relation already exists or successfully created - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.",
55 uiResources = {"static/rulenode/rulenode-core-config.js"}, 55 uiResources = {"static/rulenode/rulenode-core-config.js"},
56 configDirective = "tbActionNodeCreateRelationConfig", 56 configDirective = "tbActionNodeCreateRelationConfig",
57 - icon = "add_circle",  
58 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE}  
59 -) 57 + icon = "add_circle")
60 public class TbCreateRelationNode extends TbAbstractRelationActionNode<TbCreateRelationNodeConfiguration> { 58 public class TbCreateRelationNode extends TbAbstractRelationActionNode<TbCreateRelationNodeConfiguration> {
61 59
62 @Override 60 @Override
@@ -44,9 +44,7 @@ import java.util.List; @@ -44,9 +44,7 @@ import java.util.List;
44 nodeDetails = "If the relation(s) successfully deleted - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.", 44 nodeDetails = "If the relation(s) successfully deleted - Message send via <b>Success</b> chain, otherwise <b>Failure</b> chain will be used.",
45 uiResources = {"static/rulenode/rulenode-core-config.js"}, 45 uiResources = {"static/rulenode/rulenode-core-config.js"},
46 configDirective = "tbActionNodeDeleteRelationConfig", 46 configDirective = "tbActionNodeDeleteRelationConfig",
47 - icon = "remove_circle",  
48 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE}  
49 -) 47 + icon = "remove_circle")
50 public class TbDeleteRelationNode extends TbAbstractRelationActionNode<TbDeleteRelationNodeConfiguration> { 48 public class TbDeleteRelationNode extends TbAbstractRelationActionNode<TbDeleteRelationNodeConfiguration> {
51 49
52 @Override 50 @Override
@@ -37,10 +37,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -37,10 +37,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
37 "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.", 37 "Message metadata can be accessed via <code>metadata</code> property. For example <code>'name = ' + metadata.customerName;</code>.",
38 uiResources = {"static/rulenode/rulenode-core-config.js"}, 38 uiResources = {"static/rulenode/rulenode-core-config.js"},
39 configDirective = "tbActionNodeLogConfig", 39 configDirective = "tbActionNodeLogConfig",
40 - icon = "menu",  
41 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE}  
42 -)  
43 - 40 + icon = "menu")
44 public class TbLogNode implements TbNode { 41 public class TbLogNode implements TbNode {
45 42
46 private TbLogNodeConfiguration config; 43 private TbLogNodeConfiguration config;
@@ -44,9 +44,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -44,9 +44,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
44 nodeDetails = "Count incoming messages for specified interval and produces POST_TELEMETRY_REQUEST msg with messages count", 44 nodeDetails = "Count incoming messages for specified interval and produces POST_TELEMETRY_REQUEST msg with messages count",
45 icon = "functions", 45 icon = "functions",
46 uiResources = {"static/rulenode/rulenode-core-config.js"}, 46 uiResources = {"static/rulenode/rulenode-core-config.js"},
47 - configDirective = "tbActionNodeMsgCountConfig",  
48 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE}  
49 -) 47 + configDirective = "tbActionNodeMsgCountConfig")
50 public class TbMsgCountNode implements TbNode { 48 public class TbMsgCountNode implements TbNode {
51 49
52 private static final String TB_MSG_COUNT_NODE_MSG = "TbMsgCountNodeMsg"; 50 private static final String TB_MSG_COUNT_NODE_MSG = "TbMsgCountNodeMsg";
@@ -78,7 +78,8 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -78,7 +78,8 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
78 " otherwise, the message will be routed via <b>success</b> chain.", 78 " otherwise, the message will be routed via <b>success</b> chain.",
79 uiResources = {"static/rulenode/rulenode-core-config.js"}, 79 uiResources = {"static/rulenode/rulenode-core-config.js"},
80 configDirective = "tbActionNodeCustomTableConfig", 80 configDirective = "tbActionNodeCustomTableConfig",
81 - icon = "file_upload" 81 + icon = "file_upload",
  82 + ruleChainTypes = RuleChainType.CORE
82 ) 83 )
83 public class TbSaveToCustomCassandraTableNode implements TbNode { 84 public class TbSaveToCustomCassandraTableNode implements TbNode {
84 85
@@ -21,9 +21,13 @@ import org.thingsboard.rule.engine.api.TbNodeConfiguration; @@ -21,9 +21,13 @@ import org.thingsboard.rule.engine.api.TbNodeConfiguration;
21 import org.thingsboard.rule.engine.api.TbNodeException; 21 import org.thingsboard.rule.engine.api.TbNodeException;
22 import org.thingsboard.rule.engine.api.util.TbNodeUtils; 22 import org.thingsboard.rule.engine.api.util.TbNodeUtils;
23 import org.thingsboard.server.common.data.EntityType; 23 import org.thingsboard.server.common.data.EntityType;
24 -import org.thingsboard.server.common.data.id.*; 24 +import org.thingsboard.server.common.data.id.AssetId;
  25 +import org.thingsboard.server.common.data.id.CustomerId;
  26 +import org.thingsboard.server.common.data.id.DashboardId;
  27 +import org.thingsboard.server.common.data.id.DeviceId;
  28 +import org.thingsboard.server.common.data.id.EdgeId;
  29 +import org.thingsboard.server.common.data.id.EntityViewId;
25 import org.thingsboard.server.common.data.plugin.ComponentType; 30 import org.thingsboard.server.common.data.plugin.ComponentType;
26 -import org.thingsboard.server.common.data.rule.RuleChainType;  
27 import org.thingsboard.server.common.msg.TbMsg; 31 import org.thingsboard.server.common.msg.TbMsg;
28 32
29 @RuleNode( 33 @RuleNode(
@@ -34,8 +38,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -34,8 +38,7 @@ import org.thingsboard.server.common.msg.TbMsg;
34 nodeDetails = "Finds target Entity Customer by Customer name pattern and then unassign Originator Entity from this customer.", 38 nodeDetails = "Finds target Entity Customer by Customer name pattern and then unassign Originator Entity from this customer.",
35 uiResources = {"static/rulenode/rulenode-core-config.js"}, 39 uiResources = {"static/rulenode/rulenode-core-config.js"},
36 configDirective = "tbActionNodeUnAssignToCustomerConfig", 40 configDirective = "tbActionNodeUnAssignToCustomerConfig",
37 - icon = "remove_circle",  
38 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 41 + icon = "remove_circle"
39 ) 42 )
40 public class TbUnassignFromCustomerNode extends TbAbstractCustomerActionNode<TbUnassignFromCustomerNodeConfiguration> { 43 public class TbUnassignFromCustomerNode extends TbAbstractCustomerActionNode<TbUnassignFromCustomerNodeConfiguration> {
41 44
@@ -46,8 +46,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -46,8 +46,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
46 "For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.", 46 "For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.",
47 uiResources = {"static/rulenode/rulenode-core-config.js"}, 47 uiResources = {"static/rulenode/rulenode-core-config.js"},
48 configDirective = "tbActionNodeSnsConfig", 48 configDirective = "tbActionNodeSnsConfig",
49 - iconUrl = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+",  
50 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 49 + iconUrl = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+"
51 ) 50 )
52 public class TbSnsNode implements TbNode { 51 public class TbSnsNode implements TbNode {
53 52
@@ -51,8 +51,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -51,8 +51,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
51 " For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.", 51 " For example <b>requestId</b> field can be accessed with <code>metadata.requestId</code>.",
52 uiResources = {"static/rulenode/rulenode-core-config.js"}, 52 uiResources = {"static/rulenode/rulenode-core-config.js"},
53 configDirective = "tbActionNodeSqsConfig", 53 configDirective = "tbActionNodeSqsConfig",
54 - iconUrl = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+",  
55 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 54 + iconUrl = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4IiBoZWlnaHQ9IjQ4Ij48cGF0aCBkPSJNMTMuMjMgMTAuNTZWMTBjLTEuOTQgMC0zLjk5LjM5LTMuOTkgMi42NyAwIDEuMTYuNjEgMS45NSAxLjYzIDEuOTUuNzYgMCAxLjQzLS40NyAxLjg2LTEuMjIuNTItLjkzLjUtMS44LjUtMi44NG0yLjcgNi41M2MtLjE4LjE2LS40My4xNy0uNjMuMDYtLjg5LS43NC0xLjA1LTEuMDgtMS41NC0xLjc5LTEuNDcgMS41LTIuNTEgMS45NS00LjQyIDEuOTUtMi4yNSAwLTQuMDEtMS4zOS00LjAxLTQuMTcgMC0yLjE4IDEuMTctMy42NCAyLjg2LTQuMzggMS40Ni0uNjQgMy40OS0uNzYgNS4wNC0uOTNWNy41YzAtLjY2LjA1LTEuNDEtLjMzLTEuOTYtLjMyLS40OS0uOTUtLjctMS41LS43LTEuMDIgMC0xLjkzLjUzLTIuMTUgMS42MS0uMDUuMjQtLjI1LjQ4LS40Ny40OWwtMi42LS4yOGMtLjIyLS4wNS0uNDYtLjIyLS40LS41Ni42LTMuMTUgMy40NS00LjEgNi00LjEgMS4zIDAgMyAuMzUgNC4wMyAxLjMzQzE3LjExIDQuNTUgMTcgNi4xOCAxNyA3Ljk1djQuMTdjMCAxLjI1LjUgMS44MSAxIDIuNDguMTcuMjUuMjEuNTQgMCAuNzFsLTIuMDYgMS43OGgtLjAxIj48L3BhdGg+PHBhdGggZD0iTTIwLjE2IDE5LjU0QzE4IDIxLjE0IDE0LjgyIDIyIDEyLjEgMjJjLTMuODEgMC03LjI1LTEuNDEtOS44NS0zLjc2LS4yLS4xOC0uMDItLjQzLjI1LS4yOSAyLjc4IDEuNjMgNi4yNSAyLjYxIDkuODMgMi42MSAyLjQxIDAgNS4wNy0uNSA3LjUxLTEuNTMuMzctLjE2LjY2LjI0LjMyLjUxIj48L3BhdGg+PHBhdGggZD0iTTIxLjA3IDE4LjVjLS4yOC0uMzYtMS44NS0uMTctMi41Ny0uMDgtLjE5LjAyLS4yMi0uMTYtLjAzLS4zIDEuMjQtLjg4IDMuMjktLjYyIDMuNTMtLjMzLjI0LjMtLjA3IDIuMzUtMS4yNCAzLjMyLS4xOC4xNi0uMzUuMDctLjI2LS4xMS4yNi0uNjcuODUtMi4xNC41Ny0yLjV6Ij48L3BhdGg+PC9zdmc+"
56 ) 55 )
57 public class TbSqsNode implements TbNode { 56 public class TbSqsNode implements TbNode {
58 57
@@ -45,8 +45,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -45,8 +45,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
45 inEnabled = false, 45 inEnabled = false,
46 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 46 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
47 configDirective = "tbActionNodeGeneratorConfig", 47 configDirective = "tbActionNodeGeneratorConfig",
48 - icon = "repeat",  
49 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 48 + icon = "repeat"
50 ) 49 )
51 50
52 public class TbMsgGeneratorNode implements TbNode { 51 public class TbMsgGeneratorNode implements TbNode {
@@ -46,8 +46,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -46,8 +46,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
46 nodeDetails = "Delays messages for configurable period. Please note, this node acknowledges the message from the current queue (message will be removed from queue)", 46 nodeDetails = "Delays messages for configurable period. Please note, this node acknowledges the message from the current queue (message will be removed from queue)",
47 icon = "pause", 47 icon = "pause",
48 uiResources = {"static/rulenode/rulenode-core-config.js"}, 48 uiResources = {"static/rulenode/rulenode-core-config.js"},
49 - configDirective = "tbActionNodeMsgDelayConfig",  
50 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 49 + configDirective = "tbActionNodeMsgDelayConfig"
51 ) 50 )
52 51
53 public class TbMsgDelayNode implements TbNode { 52 public class TbMsgDelayNode implements TbNode {
@@ -40,6 +40,7 @@ import org.thingsboard.server.common.data.id.TenantId; @@ -40,6 +40,7 @@ import org.thingsboard.server.common.data.id.TenantId;
40 import org.thingsboard.server.common.data.plugin.ComponentType; 40 import org.thingsboard.server.common.data.plugin.ComponentType;
41 import org.thingsboard.server.common.data.relation.EntityRelation; 41 import org.thingsboard.server.common.data.relation.EntityRelation;
42 import org.thingsboard.server.common.data.relation.RelationTypeGroup; 42 import org.thingsboard.server.common.data.relation.RelationTypeGroup;
  43 +import org.thingsboard.server.common.data.rule.RuleChainType;
43 import org.thingsboard.server.common.msg.TbMsg; 44 import org.thingsboard.server.common.msg.TbMsg;
44 import org.thingsboard.server.common.msg.session.SessionMsgType; 45 import org.thingsboard.server.common.msg.session.SessionMsgType;
45 46
@@ -57,7 +58,8 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -57,7 +58,8 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
57 nodeDetails = "Pushes messages to edge, if Message Originator assigned to particular edge or is EDGE entity. This node is used only on Cloud instances to push messages from Cloud to Edge. Supports only DEVICE, ENTITY_VIEW, ASSET and EDGE Message Originator(s).", 58 nodeDetails = "Pushes messages to edge, if Message Originator assigned to particular edge or is EDGE entity. This node is used only on Cloud instances to push messages from Cloud to Edge. Supports only DEVICE, ENTITY_VIEW, ASSET and EDGE Message Originator(s).",
58 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 59 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
59 configDirective = "tbNodeEmptyConfig", 60 configDirective = "tbNodeEmptyConfig",
60 - icon = "cloud_download" 61 + icon = "cloud_download",
  62 + ruleChainTypes = RuleChainType.CORE
61 ) 63 )
62 public class TbMsgPushToEdgeNode implements TbNode { 64 public class TbMsgPushToEdgeNode implements TbNode {
63 65
@@ -40,8 +40,7 @@ import java.util.Map; @@ -40,8 +40,7 @@ import java.util.Map;
40 nodeDetails = "If selected checkbox 'Check that all selected keys are present'\" and all keys in message data and metadata are exist - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.\n" + 40 nodeDetails = "If selected checkbox 'Check that all selected keys are present'\" and all keys in message data and metadata are exist - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.\n" +
41 "Else if the checkbox is not selected, and at least one of the keys from data or metadata of the message exists - send Message via <b>True</b> chain, otherwise, <b>False</b> chain is used. ", 41 "Else if the checkbox is not selected, and at least one of the keys from data or metadata of the message exists - send Message via <b>True</b> chain, otherwise, <b>False</b> chain is used. ",
42 uiResources = {"static/rulenode/rulenode-core-config.js"}, 42 uiResources = {"static/rulenode/rulenode-core-config.js"},
43 - configDirective = "tbFilterNodeCheckMessageConfig",  
44 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 43 + configDirective = "tbFilterNodeCheckMessageConfig"
45 ) 44 )
46 public class TbCheckMessageNode implements TbNode { 45 public class TbCheckMessageNode implements TbNode {
47 46
@@ -52,8 +52,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -52,8 +52,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
52 " any relation to the originator of the message by type and direction.", 52 " any relation to the originator of the message by type and direction.",
53 nodeDetails = "If at least one relation exists - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.", 53 nodeDetails = "If at least one relation exists - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.",
54 uiResources = {"static/rulenode/rulenode-core-config.js"}, 54 uiResources = {"static/rulenode/rulenode-core-config.js"},
55 - configDirective = "tbFilterNodeCheckRelationConfig",  
56 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 55 + configDirective = "tbFilterNodeCheckRelationConfig"
57 ) 56 )
58 public class TbCheckRelationNode implements TbNode { 57 public class TbCheckRelationNode implements TbNode {
59 58
@@ -37,8 +37,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -37,8 +37,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
37 "Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>" + 37 "Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>" +
38 "Message type can be accessed via <code>msgType</code> property.", 38 "Message type can be accessed via <code>msgType</code> property.",
39 uiResources = {"static/rulenode/rulenode-core-config.js"}, 39 uiResources = {"static/rulenode/rulenode-core-config.js"},
40 - configDirective = "tbFilterNodeScriptConfig",  
41 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 40 + configDirective = "tbFilterNodeScriptConfig"
42 ) 41 )
43 42
44 public class TbJsFilterNode implements TbNode { 43 public class TbJsFilterNode implements TbNode {
@@ -40,8 +40,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -40,8 +40,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
40 "Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>" + 40 "Message metadata can be accessed via <code>metadata</code> property. For example <code>metadata.customerName === 'John';</code><br/>" +
41 "Message type can be accessed via <code>msgType</code> property.", 41 "Message type can be accessed via <code>msgType</code> property.",
42 uiResources = {"static/rulenode/rulenode-core-config.js"}, 42 uiResources = {"static/rulenode/rulenode-core-config.js"},
43 - configDirective = "tbFilterNodeSwitchConfig",  
44 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 43 + configDirective = "tbFilterNodeSwitchConfig"
45 ) 44 )
46 public class TbJsSwitchNode implements TbNode { 45 public class TbJsSwitchNode implements TbNode {
47 46
@@ -34,8 +34,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -34,8 +34,7 @@ import org.thingsboard.server.common.msg.TbMsg;
34 nodeDescription = "Filter incoming messages by Message Type", 34 nodeDescription = "Filter incoming messages by Message Type",
35 nodeDetails = "If incoming MessageType is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.", 35 nodeDetails = "If incoming MessageType is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.",
36 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 36 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
37 - configDirective = "tbFilterNodeMessageTypeConfig",  
38 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 37 + configDirective = "tbFilterNodeMessageTypeConfig"
39 ) 38 )
40 public class TbMsgTypeFilterNode implements TbNode { 39 public class TbMsgTypeFilterNode implements TbNode {
41 40
@@ -35,8 +35,7 @@ import org.thingsboard.server.common.msg.session.SessionMsgType; @@ -35,8 +35,7 @@ import org.thingsboard.server.common.msg.session.SessionMsgType;
35 nodeDescription = "Route incoming messages by Message Type", 35 nodeDescription = "Route incoming messages by Message Type",
36 nodeDetails = "Sends messages with message types <b>\"Post attributes\", \"Post telemetry\", \"RPC Request\"</b> etc. via corresponding chain, otherwise <b>Other</b> chain is used.", 36 nodeDetails = "Sends messages with message types <b>\"Post attributes\", \"Post telemetry\", \"RPC Request\"</b> etc. via corresponding chain, otherwise <b>Other</b> chain is used.",
37 uiResources = {"static/rulenode/rulenode-core-config.js"}, 37 uiResources = {"static/rulenode/rulenode-core-config.js"},
38 - configDirective = "tbNodeEmptyConfig",  
39 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 38 + configDirective = "tbNodeEmptyConfig"
40 ) 39 )
41 public class TbMsgTypeSwitchNode implements TbNode { 40 public class TbMsgTypeSwitchNode implements TbNode {
42 41
@@ -32,8 +32,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -32,8 +32,7 @@ import org.thingsboard.server.common.msg.TbMsg;
32 nodeDescription = "Filter incoming messages by message Originator Type", 32 nodeDescription = "Filter incoming messages by message Originator Type",
33 nodeDetails = "If Originator Type of incoming message is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.", 33 nodeDetails = "If Originator Type of incoming message is expected - send Message via <b>True</b> chain, otherwise <b>False</b> chain is used.",
34 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 34 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
35 - configDirective = "tbFilterNodeOriginatorTypeConfig",  
36 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 35 + configDirective = "tbFilterNodeOriginatorTypeConfig"
37 ) 36 )
38 public class TbOriginatorTypeFilterNode implements TbNode { 37 public class TbOriginatorTypeFilterNode implements TbNode {
39 38
@@ -32,8 +32,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -32,8 +32,7 @@ import org.thingsboard.server.common.msg.TbMsg;
32 nodeDescription = "Route incoming messages by Message Originator Type", 32 nodeDescription = "Route incoming messages by Message Originator Type",
33 nodeDetails = "Routes messages to chain according to the originator type ('Device', 'Asset', etc.).", 33 nodeDetails = "Routes messages to chain according to the originator type ('Device', 'Asset', etc.).",
34 uiResources = {"static/rulenode/rulenode-core-config.js"}, 34 uiResources = {"static/rulenode/rulenode-core-config.js"},
35 - configDirective = "tbNodeEmptyConfig",  
36 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 35 + configDirective = "tbNodeEmptyConfig"
37 ) 36 )
38 public class TbOriginatorTypeSwitchNode implements TbNode { 37 public class TbOriginatorTypeSwitchNode implements TbNode {
39 38
@@ -50,8 +50,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -50,8 +50,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
50 "<b>messageId</b> field can be accessed with <code>metadata.messageId</code>.", 50 "<b>messageId</b> field can be accessed with <code>metadata.messageId</code>.",
51 uiResources = {"static/rulenode/rulenode-core-config.js"}, 51 uiResources = {"static/rulenode/rulenode-core-config.js"},
52 configDirective = "tbActionNodePubSubConfig", 52 configDirective = "tbActionNodePubSubConfig",
53 - iconUrl = "data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+Cjx0aXRsZT5DbG91ZCBQdWJTdWI8L3RpdGxlPgo8Zz4KPHBhdGggZD0iTTEyNi40Nyw1OC4xMmwtMjYuMy00NS43NEExMS41NiwxMS41NiwwLDAsMCw5MC4zMSw2LjVIMzcuN2ExMS41NSwxMS41NSwwLDAsMC05Ljg2LDUuODhMMS41Myw1OGExMS40OCwxMS40OCwwLDAsMCwwLDExLjQ0bDI2LjMsNDZhMTEuNzcsMTEuNzcsMCwwLDAsOS44Niw2LjA5SDkwLjNhMTEuNzMsMTEuNzMsMCwwLDAsOS44Ny02LjA2bDI2LjMtNDUuNzRBMTEuNzMsMTEuNzMsMCwwLDAsMTI2LjQ3LDU4LjEyWiIgc3R5bGU9ImZpbGw6ICM3MzViMmYiLz4KPHBhdGggZD0iTTg5LjIyLDQ3Ljc0LDgzLjM2LDQ5bC0xNC42LTE0LjZMNjQuMDksNDMuMSw2MS41NSw1My4ybDQuMjksNC4yOUw1Ny42LDU5LjE4LDQ2LjMsNDcuODhsLTcuNjcsNy4zOEw1Mi43Niw2OS4zN2wtMTUsMTEuOUw3OCwxMjEuNUg5MC4zYTExLjczLDExLjczLDAsMCwwLDkuODctNi4wNmwyMC43Mi0zNloiIHN0eWxlPSJvcGFjaXR5OiAwLjA3MDAwMDAwMDI5ODAyMztpc29sYXRpb246IGlzb2xhdGUiLz4KPHBhdGggZD0iTTgyLjg2LDQ3YTUuMzIsNS4zMiwwLDEsMS0xLjk1LDcuMjdBNS4zMiw1LjMyLDAsMCwxLDgyLjg2LDQ3IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNMzkuODIsNTYuMThhNS4zMiw1LjMyLDAsMSwxLDcuMjctMS45NSw1LjMyLDUuMzIsMCwwLDEtNy4yNywxLjk1IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNNjkuMzIsODguODVBNS4zMiw1LjMyLDAsMSwxLDY0LDgzLjUyYTUuMzIsNS4zMiwwLDAsMSw1LjMyLDUuMzIiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxnPgo8cGF0aCBkPSJNNjQsNTIuOTRhMTEuMDYsMTEuMDYsMCwwLDEsMi40Ni4yOFYzOS4xNUg2MS41NFY1My4yMkExMS4wNiwxMS4wNiwwLDAsMSw2NCw1Mi45NFoiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxwYXRoIGQ9Ik03NC41Nyw2Ny4yNmExMSwxMSwwLDAsMS0yLjQ3LDQuMjVsMTIuMTksNywyLjQ2LTQuMjZaIiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNNTMuNDMsNjcuMjZsLTEyLjE4LDcsMi40Niw0LjI2LDEyLjE5LTdBMTEsMTEsMCwwLDEsNTMuNDMsNjcuMjZaIiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8L2c+CjxwYXRoIGQ9Ik03Mi42LDY0QTguNiw4LjYsMCwxLDEsNjQsNTUuNCw4LjYsOC42LDAsMCwxLDcyLjYsNjQiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxwYXRoIGQ9Ik0zOS4xLDcwLjU3YTYuNzYsNi43NiwwLDEsMS0yLjQ3LDkuMjMsNi43Niw2Ljc2LDAsMCwxLDIuNDctOS4yMyIgc3R5bGU9ImZpbGw6ICNmZmYiLz4KPHBhdGggZD0iTTgyLjE0LDgyLjI3YTYuNzYsNi43NiwwLDEsMSw5LjIzLTIuNDcsNi43NSw2Ljc1LDAsMCwxLTkuMjMsMi40NyIgc3R5bGU9ImZpbGw6ICNmZmYiLz4KPHBhdGggZD0iTTcwLjc2LDM5LjE1QTYuNzYsNi43NiwwLDEsMSw2NCwzMi4zOWE2Ljc2LDYuNzYsMCwwLDEsNi43Niw2Ljc2IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8L2c+Cjwvc3ZnPgo=",  
54 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 53 + iconUrl = "data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+Cjx0aXRsZT5DbG91ZCBQdWJTdWI8L3RpdGxlPgo8Zz4KPHBhdGggZD0iTTEyNi40Nyw1OC4xMmwtMjYuMy00NS43NEExMS41NiwxMS41NiwwLDAsMCw5MC4zMSw2LjVIMzcuN2ExMS41NSwxMS41NSwwLDAsMC05Ljg2LDUuODhMMS41Myw1OGExMS40OCwxMS40OCwwLDAsMCwwLDExLjQ0bDI2LjMsNDZhMTEuNzcsMTEuNzcsMCwwLDAsOS44Niw2LjA5SDkwLjNhMTEuNzMsMTEuNzMsMCwwLDAsOS44Ny02LjA2bDI2LjMtNDUuNzRBMTEuNzMsMTEuNzMsMCwwLDAsMTI2LjQ3LDU4LjEyWiIgc3R5bGU9ImZpbGw6ICM3MzViMmYiLz4KPHBhdGggZD0iTTg5LjIyLDQ3Ljc0LDgzLjM2LDQ5bC0xNC42LTE0LjZMNjQuMDksNDMuMSw2MS41NSw1My4ybDQuMjksNC4yOUw1Ny42LDU5LjE4LDQ2LjMsNDcuODhsLTcuNjcsNy4zOEw1Mi43Niw2OS4zN2wtMTUsMTEuOUw3OCwxMjEuNUg5MC4zYTExLjczLDExLjczLDAsMCwwLDkuODctNi4wNmwyMC43Mi0zNloiIHN0eWxlPSJvcGFjaXR5OiAwLjA3MDAwMDAwMDI5ODAyMztpc29sYXRpb246IGlzb2xhdGUiLz4KPHBhdGggZD0iTTgyLjg2LDQ3YTUuMzIsNS4zMiwwLDEsMS0xLjk1LDcuMjdBNS4zMiw1LjMyLDAsMCwxLDgyLjg2LDQ3IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNMzkuODIsNTYuMThhNS4zMiw1LjMyLDAsMSwxLDcuMjctMS45NSw1LjMyLDUuMzIsMCwwLDEtNy4yNywxLjk1IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNNjkuMzIsODguODVBNS4zMiw1LjMyLDAsMSwxLDY0LDgzLjUyYTUuMzIsNS4zMiwwLDAsMSw1LjMyLDUuMzIiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxnPgo8cGF0aCBkPSJNNjQsNTIuOTRhMTEuMDYsMTEuMDYsMCwwLDEsMi40Ni4yOFYzOS4xNUg2MS41NFY1My4yMkExMS4wNiwxMS4wNiwwLDAsMSw2NCw1Mi45NFoiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxwYXRoIGQ9Ik03NC41Nyw2Ny4yNmExMSwxMSwwLDAsMS0yLjQ3LDQuMjVsMTIuMTksNywyLjQ2LTQuMjZaIiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8cGF0aCBkPSJNNTMuNDMsNjcuMjZsLTEyLjE4LDcsMi40Niw0LjI2LDEyLjE5LTdBMTEsMTEsMCwwLDEsNTMuNDMsNjcuMjZaIiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8L2c+CjxwYXRoIGQ9Ik03Mi42LDY0QTguNiw4LjYsMCwxLDEsNjQsNTUuNCw4LjYsOC42LDAsMCwxLDcyLjYsNjQiIHN0eWxlPSJmaWxsOiAjZmZmIi8+CjxwYXRoIGQ9Ik0zOS4xLDcwLjU3YTYuNzYsNi43NiwwLDEsMS0yLjQ3LDkuMjMsNi43Niw2Ljc2LDAsMCwxLDIuNDctOS4yMyIgc3R5bGU9ImZpbGw6ICNmZmYiLz4KPHBhdGggZD0iTTgyLjE0LDgyLjI3YTYuNzYsNi43NiwwLDEsMSw5LjIzLTIuNDcsNi43NSw2Ljc1LDAsMCwxLTkuMjMsMi40NyIgc3R5bGU9ImZpbGw6ICNmZmYiLz4KPHBhdGggZD0iTTcwLjc2LDM5LjE1QTYuNzYsNi43NiwwLDEsMSw2NCwzMi4zOWE2Ljc2LDYuNzYsMCwwLDEsNi43Niw2Ljc2IiBzdHlsZT0iZmlsbDogI2ZmZiIvPgo8L2c+Cjwvc3ZnPgo="
55 ) 54 )
56 public class TbPubSubNode implements TbNode { 55 public class TbPubSubNode implements TbNode {
57 56
@@ -52,8 +52,7 @@ import java.util.concurrent.TimeoutException; @@ -52,8 +52,7 @@ import java.util.concurrent.TimeoutException;
52 nodeDescription = "Produces incoming messages using GPS based geofencing", 52 nodeDescription = "Produces incoming messages using GPS based geofencing",
53 nodeDetails = "Extracts latitude and longitude parameters from incoming message and returns different events based on configuration parameters", 53 nodeDetails = "Extracts latitude and longitude parameters from incoming message and returns different events based on configuration parameters",
54 uiResources = {"static/rulenode/rulenode-core-config.js"}, 54 uiResources = {"static/rulenode/rulenode-core-config.js"},
55 - configDirective = "tbActionNodeGpsGeofencingConfig",  
56 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 55 + configDirective = "tbActionNodeGpsGeofencingConfig"
57 ) 56 )
58 public class TbGpsGeofencingActionNode extends AbstractGeofencingNode<TbGpsGeofencingActionNodeConfiguration> { 57 public class TbGpsGeofencingActionNode extends AbstractGeofencingNode<TbGpsGeofencingActionNodeConfiguration> {
59 58
@@ -53,8 +53,7 @@ import java.util.List; @@ -53,8 +53,7 @@ import java.util.List;
53 nodeDescription = "Filter incoming messages by GPS based geofencing", 53 nodeDescription = "Filter incoming messages by GPS based geofencing",
54 nodeDetails = "Extracts latitude and longitude parameters from incoming message and returns 'True' if they are inside configured perimeters, 'False' otherwise.", 54 nodeDetails = "Extracts latitude and longitude parameters from incoming message and returns 'True' if they are inside configured perimeters, 'False' otherwise.",
55 uiResources = {"static/rulenode/rulenode-core-config.js"}, 55 uiResources = {"static/rulenode/rulenode-core-config.js"},
56 - configDirective = "tbFilterNodeGpsGeofencingConfig",  
57 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 56 + configDirective = "tbFilterNodeGpsGeofencingConfig"
58 ) 57 )
59 public class TbGpsGeofencingFilterNode extends AbstractGeofencingNode<TbGpsGeofencingFilterNodeConfiguration> { 58 public class TbGpsGeofencingFilterNode extends AbstractGeofencingNode<TbGpsGeofencingFilterNodeConfiguration> {
60 59
@@ -52,8 +52,7 @@ import java.util.Properties; @@ -52,8 +52,7 @@ import java.util.Properties;
52 " from the Kafka in the Message Metadata. For example <b>partition</b> field can be accessed with <code>metadata.partition</code>.", 52 " from the Kafka in the Message Metadata. For example <b>partition</b> field can be accessed with <code>metadata.partition</code>.",
53 uiResources = {"static/rulenode/rulenode-core-config.js"}, 53 uiResources = {"static/rulenode/rulenode-core-config.js"},
54 configDirective = "tbActionNodeKafkaConfig", 54 configDirective = "tbActionNodeKafkaConfig",
55 - iconUrl = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUzOCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTIwMS44MTYgMjMwLjIxNmMtMTYuMTg2IDAtMzAuNjk3IDcuMTcxLTQwLjYzNCAxOC40NjFsLTI1LjQ2My0xOC4wMjZjMi43MDMtNy40NDIgNC4yNTUtMTUuNDMzIDQuMjU1LTIzLjc5NyAwLTguMjE5LTEuNDk4LTE2LjA3Ni00LjExMi0yMy40MDhsMjUuNDA2LTE3LjgzNWM5LjkzNiAxMS4yMzMgMjQuNDA5IDE4LjM2NSA0MC41NDggMTguMzY1IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI5Ljg3OS0yNC4zMDktNTQuMTg0LTU0LjE4NC01NC4xODQtMjkuODc1IDAtNTQuMTg0IDI0LjMwNS01NC4xODQgNTQuMTg0IDAgNS4zNDguODA4IDEwLjUwNSAyLjI1OCAxNS4zODlsLTI1LjQyMyAxNy44NDRjLTEwLjYyLTEzLjE3NS0yNS45MTEtMjIuMzc0LTQzLjMzMy0yNS4xODJ2LTMwLjY0YzI0LjU0NC01LjE1NSA0My4wMzctMjYuOTYyIDQzLjAzNy01My4wMTlDMTI0LjE3MSAyNC4zMDUgOTkuODYyIDAgNjkuOTg3IDAgNDAuMTEyIDAgMTUuODAzIDI0LjMwNSAxNS44MDMgNTQuMTg0YzAgMjUuNzA4IDE4LjAxNCA0Ny4yNDYgNDIuMDY3IDUyLjc2OXYzMS4wMzhDMjUuMDQ0IDE0My43NTMgMCAxNzIuNDAxIDAgMjA2Ljg1NGMwIDM0LjYyMSAyNS4yOTIgNjMuMzc0IDU4LjM1NSA2OC45NHYzMi43NzRjLTI0LjI5OSA1LjM0MS00Mi41NTIgMjcuMDExLTQyLjU1MiA1Mi44OTQgMCAyOS44NzkgMjQuMzA5IDU0LjE4NCA1NC4xODQgNTQuMTg0IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI1Ljg4My0xOC4yNTMtNDcuNTUzLTQyLjU1Mi01Mi44OTR2LTMyLjc3NWE2OS45NjUgNjkuOTY1IDAgMCAwIDQyLjYtMjQuNzc2bDI1LjYzMyAxOC4xNDNjLTEuNDIzIDQuODQtMi4yMiA5Ljk0Ni0yLjIyIDE1LjI0IDAgMjkuODc5IDI0LjMwOSA1NC4xODQgNTQuMTg0IDU0LjE4NCAyOS44NzUgMCA1NC4xODQtMjQuMzA1IDU0LjE4NC01NC4xODQgMC0yOS44NzktMjQuMzA5LTU0LjE4NC01NC4xODQtNTQuMTg0em0wLTEyNi42OTVjMTQuNDg3IDAgMjYuMjcgMTEuNzg4IDI2LjI3IDI2LjI3MXMtMTEuNzgzIDI2LjI3LTI2LjI3IDI2LjI3LTI2LjI3LTExLjc4Ny0yNi4yNy0yNi4yN2MwLTE0LjQ4MyAxMS43ODMtMjYuMjcxIDI2LjI3LTI2LjI3MXptLTE1OC4xLTQ5LjMzN2MwLTE0LjQ4MyAxMS43ODQtMjYuMjcgMjYuMjcxLTI2LjI3czI2LjI3IDExLjc4NyAyNi4yNyAyNi4yN2MwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3em01Mi41NDEgMzA3LjI3OGMwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3YzAtMTQuNDgzIDExLjc4NC0yNi4yNyAyNi4yNzEtMjYuMjdzMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3em0tMjYuMjcyLTExNy45N2MtMjAuMjA1IDAtMzYuNjQyLTE2LjQzNC0zNi42NDItMzYuNjM4IDAtMjAuMjA1IDE2LjQzNy0zNi42NDIgMzYuNjQyLTM2LjY0MiAyMC4yMDQgMCAzNi42NDEgMTYuNDM3IDM2LjY0MSAzNi42NDIgMCAyMC4yMDQtMTYuNDM3IDM2LjYzOC0zNi42NDEgMzYuNjM4em0xMzEuODMxIDY3LjE3OWMtMTQuNDg3IDAtMjYuMjctMTEuNzg4LTI2LjI3LTI2LjI3MXMxMS43ODMtMjYuMjcgMjYuMjctMjYuMjcgMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3YzAgMTQuNDgzLTExLjc4MyAyNi4yNzEtMjYuMjcgMjYuMjcxeiIvPjwvc3ZnPg==",  
56 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 55 + iconUrl = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUzOCIgaGVpZ2h0PSIyNTAwIiB2aWV3Qm94PSIwIDAgMjU2IDQxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZD0iTTIwMS44MTYgMjMwLjIxNmMtMTYuMTg2IDAtMzAuNjk3IDcuMTcxLTQwLjYzNCAxOC40NjFsLTI1LjQ2My0xOC4wMjZjMi43MDMtNy40NDIgNC4yNTUtMTUuNDMzIDQuMjU1LTIzLjc5NyAwLTguMjE5LTEuNDk4LTE2LjA3Ni00LjExMi0yMy40MDhsMjUuNDA2LTE3LjgzNWM5LjkzNiAxMS4yMzMgMjQuNDA5IDE4LjM2NSA0MC41NDggMTguMzY1IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI5Ljg3OS0yNC4zMDktNTQuMTg0LTU0LjE4NC01NC4xODQtMjkuODc1IDAtNTQuMTg0IDI0LjMwNS01NC4xODQgNTQuMTg0IDAgNS4zNDguODA4IDEwLjUwNSAyLjI1OCAxNS4zODlsLTI1LjQyMyAxNy44NDRjLTEwLjYyLTEzLjE3NS0yNS45MTEtMjIuMzc0LTQzLjMzMy0yNS4xODJ2LTMwLjY0YzI0LjU0NC01LjE1NSA0My4wMzctMjYuOTYyIDQzLjAzNy01My4wMTlDMTI0LjE3MSAyNC4zMDUgOTkuODYyIDAgNjkuOTg3IDAgNDAuMTEyIDAgMTUuODAzIDI0LjMwNSAxNS44MDMgNTQuMTg0YzAgMjUuNzA4IDE4LjAxNCA0Ny4yNDYgNDIuMDY3IDUyLjc2OXYzMS4wMzhDMjUuMDQ0IDE0My43NTMgMCAxNzIuNDAxIDAgMjA2Ljg1NGMwIDM0LjYyMSAyNS4yOTIgNjMuMzc0IDU4LjM1NSA2OC45NHYzMi43NzRjLTI0LjI5OSA1LjM0MS00Mi41NTIgMjcuMDExLTQyLjU1MiA1Mi44OTQgMCAyOS44NzkgMjQuMzA5IDU0LjE4NCA1NC4xODQgNTQuMTg0IDI5Ljg3NSAwIDU0LjE4NC0yNC4zMDUgNTQuMTg0LTU0LjE4NCAwLTI1Ljg4My0xOC4yNTMtNDcuNTUzLTQyLjU1Mi01Mi44OTR2LTMyLjc3NWE2OS45NjUgNjkuOTY1IDAgMCAwIDQyLjYtMjQuNzc2bDI1LjYzMyAxOC4xNDNjLTEuNDIzIDQuODQtMi4yMiA5Ljk0Ni0yLjIyIDE1LjI0IDAgMjkuODc5IDI0LjMwOSA1NC4xODQgNTQuMTg0IDU0LjE4NCAyOS44NzUgMCA1NC4xODQtMjQuMzA1IDU0LjE4NC01NC4xODQgMC0yOS44NzktMjQuMzA5LTU0LjE4NC01NC4xODQtNTQuMTg0em0wLTEyNi42OTVjMTQuNDg3IDAgMjYuMjcgMTEuNzg4IDI2LjI3IDI2LjI3MXMtMTEuNzgzIDI2LjI3LTI2LjI3IDI2LjI3LTI2LjI3LTExLjc4Ny0yNi4yNy0yNi4yN2MwLTE0LjQ4MyAxMS43ODMtMjYuMjcxIDI2LjI3LTI2LjI3MXptLTE1OC4xLTQ5LjMzN2MwLTE0LjQ4MyAxMS43ODQtMjYuMjcgMjYuMjcxLTI2LjI3czI2LjI3IDExLjc4NyAyNi4yNyAyNi4yN2MwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3em01Mi41NDEgMzA3LjI3OGMwIDE0LjQ4My0xMS43ODMgMjYuMjctMjYuMjcgMjYuMjdzLTI2LjI3MS0xMS43ODctMjYuMjcxLTI2LjI3YzAtMTQuNDgzIDExLjc4NC0yNi4yNyAyNi4yNzEtMjYuMjdzMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3em0tMjYuMjcyLTExNy45N2MtMjAuMjA1IDAtMzYuNjQyLTE2LjQzNC0zNi42NDItMzYuNjM4IDAtMjAuMjA1IDE2LjQzNy0zNi42NDIgMzYuNjQyLTM2LjY0MiAyMC4yMDQgMCAzNi42NDEgMTYuNDM3IDM2LjY0MSAzNi42NDIgMCAyMC4yMDQtMTYuNDM3IDM2LjYzOC0zNi42NDEgMzYuNjM4em0xMzEuODMxIDY3LjE3OWMtMTQuNDg3IDAtMjYuMjctMTEuNzg4LTI2LjI3LTI2LjI3MXMxMS43ODMtMjYuMjcgMjYuMjctMjYuMjcgMjYuMjcgMTEuNzg3IDI2LjI3IDI2LjI3YzAgMTQuNDgzLTExLjc4MyAyNi4yNzEtMjYuMjcgMjYuMjcxeiIvPjwvc3ZnPg=="
57 ) 56 )
58 public class TbKafkaNode implements TbNode { 57 public class TbKafkaNode implements TbNode {
59 58
@@ -41,8 +41,7 @@ import static org.thingsboard.rule.engine.mail.TbSendEmailNode.SEND_EMAIL_TYPE; @@ -41,8 +41,7 @@ import static org.thingsboard.rule.engine.mail.TbSendEmailNode.SEND_EMAIL_TYPE;
41 "Set 'SEND_EMAIL' output message type.", 41 "Set 'SEND_EMAIL' output message type.",
42 uiResources = {"static/rulenode/rulenode-core-config.js"}, 42 uiResources = {"static/rulenode/rulenode-core-config.js"},
43 configDirective = "tbTransformationNodeToEmailConfig", 43 configDirective = "tbTransformationNodeToEmailConfig",
44 - icon = "email",  
45 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 44 + icon = "email"
46 ) 45 )
47 public class TbMsgToEmailNode implements TbNode { 46 public class TbMsgToEmailNode implements TbNode {
48 47
@@ -47,8 +47,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -47,8 +47,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
47 "with <code>to Email</code> Node using <code>Successful</code> chain.", 47 "with <code>to Email</code> Node using <code>Successful</code> chain.",
48 uiResources = {"static/rulenode/rulenode-core-config.js"}, 48 uiResources = {"static/rulenode/rulenode-core-config.js"},
49 configDirective = "tbActionNodeSendEmailConfig", 49 configDirective = "tbActionNodeSendEmailConfig",
50 - icon = "send",  
51 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 50 + icon = "send"
52 ) 51 )
53 public class TbSendEmailNode implements TbNode { 52 public class TbSendEmailNode implements TbNode {
54 53
@@ -41,8 +41,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -41,8 +41,7 @@ import org.thingsboard.server.common.msg.TbMsg;
41 "To access those attributes in other nodes this template can be used " + 41 "To access those attributes in other nodes this template can be used " +
42 "<code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ", 42 "<code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ",
43 uiResources = {"static/rulenode/rulenode-core-config.js"}, 43 uiResources = {"static/rulenode/rulenode-core-config.js"},
44 - configDirective = "tbEnrichmentNodeOriginatorAttributesConfig",  
45 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 44 + configDirective = "tbEnrichmentNodeOriginatorAttributesConfig"
46 ) 45 )
47 public class TbGetAttributesNode extends TbAbstractGetAttributesNode<TbGetAttributesNodeConfiguration, EntityId> { 46 public class TbGetAttributesNode extends TbAbstractGetAttributesNode<TbGetAttributesNodeConfiguration, EntityId> {
48 47
@@ -34,8 +34,7 @@ import org.thingsboard.server.common.data.rule.RuleChainType; @@ -34,8 +34,7 @@ import org.thingsboard.server.common.data.rule.RuleChainType;
34 "To access those attributes in other nodes this template can be used " + 34 "To access those attributes in other nodes this template can be used " +
35 "<code>metadata.temperature</code>.", 35 "<code>metadata.temperature</code>.",
36 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 36 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
37 - configDirective = "tbEnrichmentNodeCustomerAttributesConfig",  
38 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 37 + configDirective = "tbEnrichmentNodeCustomerAttributesConfig"
39 ) 38 )
40 public class TbGetCustomerAttributeNode extends TbEntityGetAttrNode<CustomerId> { 39 public class TbGetCustomerAttributeNode extends TbEntityGetAttrNode<CustomerId> {
41 40
@@ -43,8 +43,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -43,8 +43,7 @@ import org.thingsboard.server.common.msg.TbMsg;
43 "<b>Note:</b> only Device, Asset, and Entity View type are allowed.<br><br>" + 43 "<b>Note:</b> only Device, Asset, and Entity View type are allowed.<br><br>" +
44 "If the originator of the message is not assigned to Customer, or originator type is not supported - Message will be forwarded to <b>Failure</b> chain, otherwise, <b>Success</b> chain will be used.", 44 "If the originator of the message is not assigned to Customer, or originator type is not supported - Message will be forwarded to <b>Failure</b> chain, otherwise, <b>Success</b> chain will be used.",
45 uiResources = {"static/rulenode/rulenode-core-config.js"}, 45 uiResources = {"static/rulenode/rulenode-core-config.js"},
46 - configDirective = "tbEnrichmentNodeEntityDetailsConfig",  
47 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 46 + configDirective = "tbEnrichmentNodeEntityDetailsConfig"
48 ) 47 )
49 public class TbGetCustomerDetailsNode extends TbAbstractGetEntityDetailsNode<TbGetCustomerDetailsNodeConfiguration> { 48 public class TbGetCustomerDetailsNode extends TbAbstractGetEntityDetailsNode<TbGetCustomerDetailsNodeConfiguration> {
50 49
@@ -39,8 +39,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -39,8 +39,7 @@ import org.thingsboard.server.common.msg.TbMsg;
39 "To access those attributes in other nodes this template can be used " + 39 "To access those attributes in other nodes this template can be used " +
40 "<code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ", 40 "<code>metadata.cs_temperature</code> or <code>metadata.shared_limit</code> ",
41 uiResources = {"static/rulenode/rulenode-core-config.js"}, 41 uiResources = {"static/rulenode/rulenode-core-config.js"},
42 - configDirective = "tbEnrichmentNodeDeviceAttributesConfig",  
43 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 42 + configDirective = "tbEnrichmentNodeDeviceAttributesConfig"
44 ) 43 )
45 public class TbGetDeviceAttrNode extends TbAbstractGetAttributesNode<TbGetDeviceAttrNodeConfiguration, DeviceId> { 44 public class TbGetDeviceAttrNode extends TbAbstractGetAttributesNode<TbGetDeviceAttrNodeConfiguration, DeviceId> {
46 45
@@ -44,8 +44,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -44,8 +44,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
44 nodeDescription = "Add Message Originator fields values into Message Metadata", 44 nodeDescription = "Add Message Originator fields values into Message Metadata",
45 nodeDetails = "Will fetch fields values specified in mapping. If specified field is not part of originator fields it will be ignored.", 45 nodeDetails = "Will fetch fields values specified in mapping. If specified field is not part of originator fields it will be ignored.",
46 uiResources = {"static/rulenode/rulenode-core-config.js"}, 46 uiResources = {"static/rulenode/rulenode-core-config.js"},
47 - configDirective = "tbEnrichmentNodeOriginatorFieldsConfig",  
48 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 47 + configDirective = "tbEnrichmentNodeOriginatorFieldsConfig"
49 ) 48 )
50 public class TbGetOriginatorFieldsNode implements TbNode { 49 public class TbGetOriginatorFieldsNode implements TbNode {
51 50
@@ -36,8 +36,7 @@ import org.thingsboard.server.common.data.rule.RuleChainType; @@ -36,8 +36,7 @@ import org.thingsboard.server.common.data.rule.RuleChainType;
36 "To access those attributes in other nodes this template can be used " + 36 "To access those attributes in other nodes this template can be used " +
37 "<code>metadata.temperature</code>.", 37 "<code>metadata.temperature</code>.",
38 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 38 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
39 - configDirective = "tbEnrichmentNodeRelatedAttributesConfig",  
40 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 39 + configDirective = "tbEnrichmentNodeRelatedAttributesConfig"
41 ) 40 )
42 41
43 public class TbGetRelatedAttributeNode extends TbEntityGetAttrNode<EntityId> { 42 public class TbGetRelatedAttributeNode extends TbEntityGetAttrNode<EntityId> {
@@ -67,8 +67,7 @@ import static org.thingsboard.server.common.data.kv.Aggregation.NONE; @@ -67,8 +67,7 @@ import static org.thingsboard.server.common.data.kv.Aggregation.NONE;
67 "Also, the rule node allows you to select telemetry sampling order: <b>ASC</b> or <b>DESC</b>. </br>" + 67 "Also, the rule node allows you to select telemetry sampling order: <b>ASC</b> or <b>DESC</b>. </br>" +
68 "<b>Note</b>: The maximum size of the fetched array is 1000 records.\n ", 68 "<b>Note</b>: The maximum size of the fetched array is 1000 records.\n ",
69 uiResources = {"static/rulenode/rulenode-core-config.js"}, 69 uiResources = {"static/rulenode/rulenode-core-config.js"},
70 - configDirective = "tbEnrichmentNodeGetTelemetryFromDatabase",  
71 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 70 + configDirective = "tbEnrichmentNodeGetTelemetryFromDatabase"
72 ) 71 )
73 public class TbGetTelemetryNode implements TbNode { 72 public class TbGetTelemetryNode implements TbNode {
74 73
@@ -36,8 +36,7 @@ import org.thingsboard.server.common.data.rule.RuleChainType; @@ -36,8 +36,7 @@ import org.thingsboard.server.common.data.rule.RuleChainType;
36 "To access those attributes in other nodes this template can be used " + 36 "To access those attributes in other nodes this template can be used " +
37 "<code>metadata.temperature</code>.", 37 "<code>metadata.temperature</code>.",
38 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 38 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
39 - configDirective = "tbEnrichmentNodeTenantAttributesConfig",  
40 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 39 + configDirective = "tbEnrichmentNodeTenantAttributesConfig"
41 ) 40 )
42 public class TbGetTenantAttributeNode extends TbEntityGetAttrNode<TenantId> { 41 public class TbGetTenantAttributeNode extends TbEntityGetAttrNode<TenantId> {
43 42
@@ -38,8 +38,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -38,8 +38,7 @@ import org.thingsboard.server.common.msg.TbMsg;
38 "<b>Note:</b> only Device, Asset, and Entity View type are allowed.<br><br>" + 38 "<b>Note:</b> only Device, Asset, and Entity View type are allowed.<br><br>" +
39 "If the originator of the message is not assigned to Tenant, or originator type is not supported - Message will be forwarded to <b>Failure</b> chain, otherwise, <b>Success</b> chain will be used.", 39 "If the originator of the message is not assigned to Tenant, or originator type is not supported - Message will be forwarded to <b>Failure</b> chain, otherwise, <b>Success</b> chain will be used.",
40 uiResources = {"static/rulenode/rulenode-core-config.js"}, 40 uiResources = {"static/rulenode/rulenode-core-config.js"},
41 - configDirective = "tbEnrichmentNodeEntityDetailsConfig",  
42 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 41 + configDirective = "tbEnrichmentNodeEntityDetailsConfig"
43 ) 42 )
44 public class TbGetTenantDetailsNode extends TbAbstractGetEntityDetailsNode<TbGetTenantDetailsNodeConfiguration> { 43 public class TbGetTenantDetailsNode extends TbAbstractGetEntityDetailsNode<TbGetTenantDetailsNodeConfiguration> {
45 44
@@ -50,8 +50,7 @@ import java.util.concurrent.TimeoutException; @@ -50,8 +50,7 @@ import java.util.concurrent.TimeoutException;
50 nodeDetails = "Will publish message payload to the MQTT broker with QoS <b>AT_LEAST_ONCE</b>.", 50 nodeDetails = "Will publish message payload to the MQTT broker with QoS <b>AT_LEAST_ONCE</b>.",
51 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 51 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
52 configDirective = "tbActionNodeMqttConfig", 52 configDirective = "tbActionNodeMqttConfig",
53 - icon = "call_split",  
54 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 53 + icon = "call_split"
55 ) 54 )
56 public class TbMqttNode implements TbNode { 55 public class TbMqttNode implements TbNode {
57 56
@@ -40,8 +40,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback; @@ -40,8 +40,7 @@ import static org.thingsboard.common.util.DonAsynchron.withCallback;
40 nodeDetails = "Will publish message payload to RabbitMQ queue.", 40 nodeDetails = "Will publish message payload to RabbitMQ queue.",
41 uiResources = {"static/rulenode/rulenode-core-config.js"}, 41 uiResources = {"static/rulenode/rulenode-core-config.js"},
42 configDirective = "tbActionNodeRabbitMqConfig", 42 configDirective = "tbActionNodeRabbitMqConfig",
43 - iconUrl = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZlcnNpb249IjEuMSIgeT0iMHB4IiB4PSIwcHgiIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxwYXRoIHN0cm9rZS13aWR0aD0iLjg0OTU2IiBkPSJtODYwLjQ3IDQxNi4zMmgtMjYyLjAxYy0xMi45MTMgMC0yMy42MTgtMTAuNzA0LTIzLjYxOC0yMy42MTh2LTI3Mi43MWMwLTIwLjMwNS0xNi4yMjctMzYuMjc2LTM2LjI3Ni0zNi4yNzZoLTkzLjc5MmMtMjAuMzA1IDAtMzYuMjc2IDE2LjIyNy0zNi4yNzYgMzYuMjc2djI3MC44NGMtMC4yNTQ4NyAxNC4xMDMtMTEuNDY5IDI1LjU3Mi0yNS43NDIgMjUuNTcybC04NS42MzYgMC42Nzk2NWMtMTQuMTAzIDAtMjUuNTcyLTExLjQ2OS0yNS41NzItMjUuNTcybDAuNjc5NjUtMjcxLjUyYzAtMjAuMzA1LTE2LjIyNy0zNi4yNzYtMzYuMjc2LTM2LjI3NmgtOTMuNTM3Yy0yMC4zMDUgMC0zNi4yNzYgMTYuMjI3LTM2LjI3NiAzNi4yNzZ2NzYzLjg0YzAgMTguMDk2IDE0Ljc4MiAzMi40NTMgMzIuNDUzIDMyLjQ1M2g3MjIuODFjMTguMDk2IDAgMzIuNDUzLTE0Ljc4MiAzMi40NTMtMzIuNDUzdi00MzUuMzFjLTEuMTg5NC0xOC4xODEtMTUuMjkyLTMyLjE5OC0zMy4zODgtMzIuMTk4em0tMTIyLjY4IDI4Ny4wN2MwIDIzLjYxOC0xOC44NiA0Mi40NzgtNDIuNDc4IDQyLjQ3OGgtNzMuOTk3Yy0yMy42MTggMC00Mi40NzgtMTguODYtNDIuNDc4LTQyLjQ3OHYtNzQuMjUyYzAtMjMuNjE4IDE4Ljg2LTQyLjQ3OCA0Mi40NzgtNDIuNDc4aDczLjk5N2MyMy42MTggMCA0Mi40NzggMTguODYgNDIuNDc4IDQyLjQ3OHoiLz48L3N2Zz4=",  
44 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 43 + iconUrl = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZlcnNpb249IjEuMSIgeT0iMHB4IiB4PSIwcHgiIHZpZXdCb3g9IjAgMCAxMDAwIDEwMDAiPjxwYXRoIHN0cm9rZS13aWR0aD0iLjg0OTU2IiBkPSJtODYwLjQ3IDQxNi4zMmgtMjYyLjAxYy0xMi45MTMgMC0yMy42MTgtMTAuNzA0LTIzLjYxOC0yMy42MTh2LTI3Mi43MWMwLTIwLjMwNS0xNi4yMjctMzYuMjc2LTM2LjI3Ni0zNi4yNzZoLTkzLjc5MmMtMjAuMzA1IDAtMzYuMjc2IDE2LjIyNy0zNi4yNzYgMzYuMjc2djI3MC44NGMtMC4yNTQ4NyAxNC4xMDMtMTEuNDY5IDI1LjU3Mi0yNS43NDIgMjUuNTcybC04NS42MzYgMC42Nzk2NWMtMTQuMTAzIDAtMjUuNTcyLTExLjQ2OS0yNS41NzItMjUuNTcybDAuNjc5NjUtMjcxLjUyYzAtMjAuMzA1LTE2LjIyNy0zNi4yNzYtMzYuMjc2LTM2LjI3NmgtOTMuNTM3Yy0yMC4zMDUgMC0zNi4yNzYgMTYuMjI3LTM2LjI3NiAzNi4yNzZ2NzYzLjg0YzAgMTguMDk2IDE0Ljc4MiAzMi40NTMgMzIuNDUzIDMyLjQ1M2g3MjIuODFjMTguMDk2IDAgMzIuNDUzLTE0Ljc4MiAzMi40NTMtMzIuNDUzdi00MzUuMzFjLTEuMTg5NC0xOC4xODEtMTUuMjkyLTMyLjE5OC0zMy4zODgtMzIuMTk4em0tMTIyLjY4IDI4Ny4wN2MwIDIzLjYxOC0xOC44NiA0Mi40NzgtNDIuNDc4IDQyLjQ3OGgtNzMuOTk3Yy0yMy42MTggMC00Mi40NzgtMTguODYtNDIuNDc4LTQyLjQ3OHYtNzQuMjUyYzAtMjMuNjE4IDE4Ljg2LTQyLjQ3OCA0Mi40NzgtNDIuNDc4aDczLjk5N2MyMy42MTggMCA0Mi40NzggMTguODYgNDIuNDc4IDQyLjQ3OHoiLz48L3N2Zz4="
45 ) 44 )
46 public class TbRabbitMqNode implements TbNode { 45 public class TbRabbitMqNode implements TbNode {
47 46
@@ -42,8 +42,7 @@ import org.thingsboard.server.common.msg.TbMsg; @@ -42,8 +42,7 @@ import org.thingsboard.server.common.msg.TbMsg;
42 "and if your proxy with auth, the next ones should be added: \"tb.proxy.user\" and \"tb.proxy.password\" to the thingsboard.conf file.", 42 "and if your proxy with auth, the next ones should be added: \"tb.proxy.user\" and \"tb.proxy.password\" to the thingsboard.conf file.",
43 uiResources = {"static/rulenode/rulenode-core-config.js"}, 43 uiResources = {"static/rulenode/rulenode-core-config.js"},
44 configDirective = "tbActionNodeRestApiCallConfig", 44 configDirective = "tbActionNodeRestApiCallConfig",
45 - iconUrl = "data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB2ZXJzaW9uPSIxLjEiIHk9IjBweCIgeD0iMHB4Ij48ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTQ5NzUgMCAwIC45NDk3NSAxNy4xMiAyNi40OTIpIj48cGF0aCBkPSJtMTY5LjExIDEwOC41NGMtOS45MDY2IDAuMDczNC0xOS4wMTQgNi41NzI0LTIyLjAxNCAxNi40NjlsLTY5Ljk5MyAyMzEuMDhjLTMuNjkwNCAxMi4xODEgMy4yODkyIDI1LjIyIDE1LjQ2OSAyOC45MSAyLjIyNTkgMC42NzQ4MSA0LjQ5NjkgMSA2LjcyODUgMSA5Ljk3MjEgMCAxOS4xNjUtNi41MTUzIDIyLjE4Mi0xNi40NjdhNi41MjI0IDYuNTIyNCAwIDAgMCAwLjAwMiAtMC4wMDJsNjkuOTktMjMxLjA3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMCAtMC4wMDJjMy42ODU1LTEyLjE4MS0zLjI4Ny0yNS4yMjUtMTUuNDcxLTI4LjkxMi0yLjI4MjUtMC42OTE0NS00LjYxMTYtMS4wMTY5LTYuODk4NC0xem04NC45ODggMGMtOS45MDQ4IDAuMDczNC0xOS4wMTggNi41Njc1LTIyLjAxOCAxNi40NjlsLTY5Ljk4NiAyMzEuMDhjLTMuNjg5OCAxMi4xNzkgMy4yODUzIDI1LjIxNyAxNS40NjUgMjguOTA4IDIuMjI5NyAwLjY3NjQ3IDQuNTAwOCAxLjAwMiA2LjczMjQgMS4wMDIgOS45NzIxIDAgMTkuMTY1LTYuNTE1MyAyMi4xODItMTYuNDY3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMC4wMDIgLTAuMDAybDY5Ljk4OC0yMzEuMDdjMy42OTA4LTEyLjE4MS0zLjI4NTItMjUuMjIzLTE1LjQ2Ny0yOC45MTItMi4yODE0LTAuNjkyMzEtNC42MTA4LTEuMDE4OS02Ljg5ODQtMS4wMDJ6bS0yMTcuMjkgNDIuMjNjLTEyLjcyOS0wLjAwMDg3LTIzLjE4OCAxMC40NTYtMjMuMTg4IDIzLjE4NiAwLjAwMSAxMi43MjggMTAuNDU5IDIzLjE4NiAyMy4xODggMjMuMTg2IDEyLjcyNy0wLjAwMSAyMy4xODMtMTAuNDU5IDIzLjE4NC0yMy4xODYgMC4wMDA4NzYtMTIuNzI4LTEwLjQ1Ni0yMy4xODUtMjMuMTg0LTIzLjE4NnptMCAxNDYuNjRjLTEyLjcyNy0wLjAwMDg3LTIzLjE4NiAxMC40NTUtMjMuMTg4IDIzLjE4NC0wLjAwMDg3MyAxMi43MjkgMTAuNDU4IDIzLjE4OCAyMy4xODggMjMuMTg4IDEyLjcyOC0wLjAwMSAyMy4xODQtMTAuNDYgMjMuMTg0LTIzLjE4OC0wLjAwMS0xMi43MjYtMTAuNDU3LTIzLjE4My0yMy4xODQtMjMuMTg0em0yNzAuNzkgNDIuMjExYy0xMi43MjcgMC0yMy4xODQgMTAuNDU3LTIzLjE4NCAyMy4xODRzMTAuNDU1IDIzLjE4OCAyMy4xODQgMjMuMTg4aDE1NC45OGMxMi43MjkgMCAyMy4xODYtMTAuNDYgMjMuMTg2LTIzLjE4OCAwLjAwMS0xMi43MjgtMTAuNDU4LTIzLjE4NC0yMy4xODYtMjMuMTg0eiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzc2IDAgMCAxLjAzNzYgLTcuNTY3NiAtMTQuOTI1KSIgc3Ryb2tlLXdpZHRoPSIxLjI2OTMiLz48L2c+PC9zdmc+",  
46 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 45 + iconUrl = "data:image/svg+xml;base64,PHN2ZyBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbDpzcGFjZT0icHJlc2VydmUiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB2ZXJzaW9uPSIxLjEiIHk9IjBweCIgeD0iMHB4Ij48ZyB0cmFuc2Zvcm09Im1hdHJpeCguOTQ5NzUgMCAwIC45NDk3NSAxNy4xMiAyNi40OTIpIj48cGF0aCBkPSJtMTY5LjExIDEwOC41NGMtOS45MDY2IDAuMDczNC0xOS4wMTQgNi41NzI0LTIyLjAxNCAxNi40NjlsLTY5Ljk5MyAyMzEuMDhjLTMuNjkwNCAxMi4xODEgMy4yODkyIDI1LjIyIDE1LjQ2OSAyOC45MSAyLjIyNTkgMC42NzQ4MSA0LjQ5NjkgMSA2LjcyODUgMSA5Ljk3MjEgMCAxOS4xNjUtNi41MTUzIDIyLjE4Mi0xNi40NjdhNi41MjI0IDYuNTIyNCAwIDAgMCAwLjAwMiAtMC4wMDJsNjkuOTktMjMxLjA3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMCAtMC4wMDJjMy42ODU1LTEyLjE4MS0zLjI4Ny0yNS4yMjUtMTUuNDcxLTI4LjkxMi0yLjI4MjUtMC42OTE0NS00LjYxMTYtMS4wMTY5LTYuODk4NC0xem04NC45ODggMGMtOS45MDQ4IDAuMDczNC0xOS4wMTggNi41Njc1LTIyLjAxOCAxNi40NjlsLTY5Ljk4NiAyMzEuMDhjLTMuNjg5OCAxMi4xNzkgMy4yODUzIDI1LjIxNyAxNS40NjUgMjguOTA4IDIuMjI5NyAwLjY3NjQ3IDQuNTAwOCAxLjAwMiA2LjczMjQgMS4wMDIgOS45NzIxIDAgMTkuMTY1LTYuNTE1MyAyMi4xODItMTYuNDY3YTYuNTIyNCA2LjUyMjQgMCAwIDAgMC4wMDIgLTAuMDAybDY5Ljk4OC0yMzEuMDdjMy42OTA4LTEyLjE4MS0zLjI4NTItMjUuMjIzLTE1LjQ2Ny0yOC45MTItMi4yODE0LTAuNjkyMzEtNC42MTA4LTEuMDE4OS02Ljg5ODQtMS4wMDJ6bS0yMTcuMjkgNDIuMjNjLTEyLjcyOS0wLjAwMDg3LTIzLjE4OCAxMC40NTYtMjMuMTg4IDIzLjE4NiAwLjAwMSAxMi43MjggMTAuNDU5IDIzLjE4NiAyMy4xODggMjMuMTg2IDEyLjcyNy0wLjAwMSAyMy4xODMtMTAuNDU5IDIzLjE4NC0yMy4xODYgMC4wMDA4NzYtMTIuNzI4LTEwLjQ1Ni0yMy4xODUtMjMuMTg0LTIzLjE4NnptMCAxNDYuNjRjLTEyLjcyNy0wLjAwMDg3LTIzLjE4NiAxMC40NTUtMjMuMTg4IDIzLjE4NC0wLjAwMDg3MyAxMi43MjkgMTAuNDU4IDIzLjE4OCAyMy4xODggMjMuMTg4IDEyLjcyOC0wLjAwMSAyMy4xODQtMTAuNDYgMjMuMTg0LTIzLjE4OC0wLjAwMS0xMi43MjYtMTAuNDU3LTIzLjE4My0yMy4xODQtMjMuMTg0em0yNzAuNzkgNDIuMjExYy0xMi43MjcgMC0yMy4xODQgMTAuNDU3LTIzLjE4NCAyMy4xODRzMTAuNDU1IDIzLjE4OCAyMy4xODQgMjMuMTg4aDE1NC45OGMxMi43MjkgMCAyMy4xODYtMTAuNDYgMjMuMTg2LTIzLjE4OCAwLjAwMS0xMi43MjgtMTAuNDU4LTIzLjE4NC0yMy4xODYtMjMuMTg0eiIgdHJhbnNmb3JtPSJtYXRyaXgoMS4wMzc2IDAgMCAxLjAzNzYgLTcuNTY3NiAtMTQuOTI1KSIgc3Ryb2tlLXdpZHRoPSIxLjI2OTMiLz48L2c+PC9zdmc+"
47 ) 46 )
48 public class TbRestApiCallNode implements TbNode { 47 public class TbRestApiCallNode implements TbNode {
49 48
@@ -40,8 +40,7 @@ import java.util.UUID; @@ -40,8 +40,7 @@ import java.util.UUID;
40 nodeDetails = "Expects messages with any message type. Will forward message body to the device.", 40 nodeDetails = "Expects messages with any message type. Will forward message body to the device.",
41 uiResources = {"static/rulenode/rulenode-core-config.js"}, 41 uiResources = {"static/rulenode/rulenode-core-config.js"},
42 configDirective = "tbActionNodeRpcReplyConfig", 42 configDirective = "tbActionNodeRpcReplyConfig",
43 - icon = "call_merge",  
44 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 43 + icon = "call_merge"
45 ) 44 )
46 public class TbSendRPCReplyNode implements TbNode { 45 public class TbSendRPCReplyNode implements TbNode {
47 46
@@ -51,8 +51,7 @@ import java.util.concurrent.TimeUnit; @@ -51,8 +51,7 @@ import java.util.concurrent.TimeUnit;
51 "If the RPC call request is originated by REST API call from user, will forward the response to user immediately.", 51 "If the RPC call request is originated by REST API call from user, will forward the response to user immediately.",
52 uiResources = {"static/rulenode/rulenode-core-config.js"}, 52 uiResources = {"static/rulenode/rulenode-core-config.js"},
53 configDirective = "tbActionNodeRpcRequestConfig", 53 configDirective = "tbActionNodeRpcRequestConfig",
54 - icon = "call_made",  
55 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 54 + icon = "call_made"
56 ) 55 )
57 public class TbSendRPCRequestNode implements TbNode { 56 public class TbSendRPCRequestNode implements TbNode {
58 57
@@ -45,8 +45,7 @@ import java.util.Set; @@ -45,8 +45,7 @@ import java.util.Set;
45 nodeDetails = "Saves entity attributes based on configurable scope parameter. Expects messages with 'POST_ATTRIBUTES_REQUEST' message type", 45 nodeDetails = "Saves entity attributes based on configurable scope parameter. Expects messages with 'POST_ATTRIBUTES_REQUEST' message type",
46 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 46 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
47 configDirective = "tbActionNodeAttributesConfig", 47 configDirective = "tbActionNodeAttributesConfig",
48 - icon = "file_upload",  
49 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 48 + icon = "file_upload"
50 ) 49 )
51 public class TbMsgAttributesNode implements TbNode { 50 public class TbMsgAttributesNode implements TbNode {
52 51
@@ -46,8 +46,7 @@ import java.util.Map; @@ -46,8 +46,7 @@ import java.util.Map;
46 nodeDetails = "Saves timeseries telemetry data based on configurable TTL parameter. Expects messages with 'POST_TELEMETRY_REQUEST' message type", 46 nodeDetails = "Saves timeseries telemetry data based on configurable TTL parameter. Expects messages with 'POST_TELEMETRY_REQUEST' message type",
47 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 47 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
48 configDirective = "tbActionNodeTimeseriesConfig", 48 configDirective = "tbActionNodeTimeseriesConfig",
49 - icon = "file_upload",  
50 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 49 + icon = "file_upload"
51 ) 50 )
52 public class TbMsgTimeseriesNode implements TbNode { 51 public class TbMsgTimeseriesNode implements TbNode {
53 52
@@ -39,8 +39,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -39,8 +39,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
39 "Subsequent messages will not be processed until the previous message processing is completed or timeout event occurs.\n" + 39 "Subsequent messages will not be processed until the previous message processing is completed or timeout event occurs.\n" +
40 "Size of the queue per originator and timeout values are configurable on a system level", 40 "Size of the queue per originator and timeout values are configurable on a system level",
41 uiResources = {"static/rulenode/rulenode-core-config.js"}, 41 uiResources = {"static/rulenode/rulenode-core-config.js"},
42 - configDirective = "tbNodeEmptyConfig",  
43 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 42 + configDirective = "tbNodeEmptyConfig"
44 ) 43 )
45 @Deprecated 44 @Deprecated
46 public class TbSynchronizationBeginNode implements TbNode { 45 public class TbSynchronizationBeginNode implements TbNode {
@@ -39,8 +39,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -39,8 +39,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
39 nodeDescription = "This Node is now deprecated. Use \"Checkpoint\" instead.", 39 nodeDescription = "This Node is now deprecated. Use \"Checkpoint\" instead.",
40 nodeDetails = "", 40 nodeDetails = "",
41 uiResources = {"static/rulenode/rulenode-core-config.js"}, 41 uiResources = {"static/rulenode/rulenode-core-config.js"},
42 - configDirective = ("tbNodeEmptyConfig"),  
43 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 42 + configDirective = ("tbNodeEmptyConfig")
44 ) 43 )
45 @Deprecated 44 @Deprecated
46 public class TbSynchronizationEndNode implements TbNode { 45 public class TbSynchronizationEndNode implements TbNode {
@@ -47,8 +47,7 @@ import java.util.HashSet; @@ -47,8 +47,7 @@ import java.util.HashSet;
47 "Alarm Originator found only in case original Originator is <code>Alarm</code> entity.", 47 "Alarm Originator found only in case original Originator is <code>Alarm</code> entity.",
48 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 48 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
49 configDirective = "tbTransformationNodeChangeOriginatorConfig", 49 configDirective = "tbTransformationNodeChangeOriginatorConfig",
50 - icon = "find_replace",  
51 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 50 + icon = "find_replace"
52 ) 51 )
53 public class TbChangeOriginatorNode extends TbAbstractTransformNode { 52 public class TbChangeOriginatorNode extends TbAbstractTransformNode {
54 53
@@ -38,8 +38,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS; @@ -38,8 +38,7 @@ import static org.thingsboard.rule.engine.api.TbRelationTypes.SUCCESS;
38 "<code>{ msg: <i style=\"color: #666;\">new payload</i>,<br/>&nbsp&nbsp&nbspmetadata: <i style=\"color: #666;\">new metadata</i>,<br/>&nbsp&nbsp&nbspmsgType: <i style=\"color: #666;\">new msgType</i> }</code><br/>" + 38 "<code>{ msg: <i style=\"color: #666;\">new payload</i>,<br/>&nbsp&nbsp&nbspmetadata: <i style=\"color: #666;\">new metadata</i>,<br/>&nbsp&nbsp&nbspmsgType: <i style=\"color: #666;\">new msgType</i> }</code><br/>" +
39 "All fields in resulting object are optional and will be taken from original message if not specified.", 39 "All fields in resulting object are optional and will be taken from original message if not specified.",
40 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"}, 40 uiResources = {"static/rulenode/rulenode-core-config.js", "static/rulenode/rulenode-core-config.css"},
41 - configDirective = "tbTransformationNodeScriptConfig",  
42 - ruleChainTypes = {RuleChainType.CORE, RuleChainType.EDGE} 41 + configDirective = "tbTransformationNodeScriptConfig"
43 ) 42 )
44 public class TbTransformMsgNode extends TbAbstractTransformNode { 43 public class TbTransformMsgNode extends TbAbstractTransformNode {
45 44