thingsboard-memoizeit
Changes
rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/EnrichmentNode.java 11(+9 -2)
rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TransformationNode.java 8(+8 -0)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java 7(+6 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java 7(+6 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbMsgTypeFilterNode.java 5(+4 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNode.java 14(+7 -7)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetCustomerAttributeNode.java 6(+5 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNode.java 8(+7 -1)
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNode.java 6(+5 -1)
Details
diff --git a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/EnrichmentNode.java b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/EnrichmentNode.java
index 2267bda..b3ff255 100644
--- a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/EnrichmentNode.java
+++ b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/EnrichmentNode.java
@@ -16,7 +16,6 @@
package org.thingsboard.rule.engine.api;
import org.thingsboard.server.common.data.plugin.ComponentScope;
-import org.thingsboard.server.extensions.api.component.EmptyComponentConfiguration;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -32,11 +31,19 @@ public @interface EnrichmentNode {
String name();
+ String nodeDescription();
+
+ String nodeDetails();
+
+ boolean inEnabled() default true;
+
+ boolean outEnabled() default true;
+
ComponentScope scope() default ComponentScope.TENANT;
String descriptor() default "EmptyNodeDescriptor.json";
- String[] relationTypes() default {"Success","Failure"};
+ String[] relationTypes() default {"Success", "Failure"};
boolean customRelations() default false;
}
diff --git a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/FilterNode.java b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/FilterNode.java
index 5247e39..d34755d 100644
--- a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/FilterNode.java
+++ b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/FilterNode.java
@@ -16,7 +16,6 @@
package org.thingsboard.rule.engine.api;
import org.thingsboard.server.common.data.plugin.ComponentScope;
-import org.thingsboard.server.extensions.api.component.EmptyComponentConfiguration;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -32,11 +31,19 @@ public @interface FilterNode {
String name();
+ String nodeDescription();
+
+ String nodeDetails();
+
+ boolean inEnabled() default true;
+
+ boolean outEnabled() default true;
+
ComponentScope scope() default ComponentScope.TENANT;
String descriptor() default "EmptyNodeDescriptor.json";
- String[] relationTypes() default {"Success","Failure"};
+ String[] relationTypes() default {"Success", "Failure"};
boolean customRelations() default false;
diff --git a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TransformationNode.java b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TransformationNode.java
index bfe1dca..76b0dda 100644
--- a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TransformationNode.java
+++ b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TransformationNode.java
@@ -32,6 +32,14 @@ public @interface TransformationNode {
String name();
+ String nodeDescription();
+
+ String nodeDetails();
+
+ boolean inEnabled() default true;
+
+ boolean outEnabled() default true;
+
ComponentScope scope() default ComponentScope.TENANT;
String descriptor() default "EmptyNodeDescriptor.json";
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java
index d3fee68..393496a 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsFilterNode.java
@@ -26,7 +26,12 @@ import javax.script.Bindings;
import static org.thingsboard.rule.engine.DonAsynchron.withCallback;
@Slf4j
-@FilterNode(name = "Filter Node", relationTypes = {"True", "False", "Failure"})
+@FilterNode(name = "script", relationTypes = {"True", "False", "Failure"},
+ nodeDescription = "Filter incoming messages using JS script",
+ nodeDetails = "Evaluate incoming Message with configured JS condition. " +
+ "If 'True' - send Message via 'True' chain, otherwise 'False' chain is used." +
+ "Message payload can be accessed via 'msg' property. For example 'msg.temperature < 10;'" +
+ "Message metadata can be accessed via 'meta' property. For example 'meta.customerName === 'John';'")
public class TbJsFilterNode implements TbNode {
private TbJsFilterNodeConfiguration config;
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java
index 5c7d1d1..dff2145 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbJsSwitchNode.java
@@ -27,7 +27,12 @@ import java.util.Set;
import static org.thingsboard.rule.engine.DonAsynchron.withCallback;
@Slf4j
-@FilterNode(name = "Switch Node", customRelations = true)
+@FilterNode(name = "switch", customRelations = true,
+ nodeDescription = "Route incoming Message to one or multiple output chains",
+ nodeDetails = "Node executes configured JS script. Script should return array of next Chain names where Message should be routed. " +
+ "If Array is empty - message not routed to next Node. " +
+ "Message payload can be accessed via 'msg' property. For example 'msg.temperature < 10;' " +
+ "Message metadata can be accessed via 'meta' property. For example 'meta.customerName === 'John';' ")
public class TbJsSwitchNode implements TbNode {
private TbJsSwitchNodeConfiguration config;
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbMsgTypeFilterNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbMsgTypeFilterNode.java
index 381512a..c08c3e0 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbMsgTypeFilterNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/filter/TbMsgTypeFilterNode.java
@@ -24,7 +24,10 @@ import org.thingsboard.server.common.msg.TbMsg;
* Created by ashvayka on 19.01.18.
*/
@Slf4j
-@FilterNode(name = "Message Type Filter Node")
+@FilterNode(name = "message type",
+ nodeDescription = "Filter incoming messages by Message Type",
+ nodeDetails = "Evaluate incoming Message with configured JS condition. " +
+ "If incoming MessageType is expected - send Message via 'Success' chain, otherwise 'Failure' chain is used.")
public class TbMsgTypeFilterNode implements TbNode {
TbMsgTypeFilterNodeConfiguration config;
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNode.java
index 90eadcb..216cf28 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetAttributesNode.java
@@ -21,12 +21,7 @@ import com.google.common.util.concurrent.ListenableFuture;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.thingsboard.rule.engine.TbNodeUtils;
-import org.thingsboard.rule.engine.api.TbContext;
-import org.thingsboard.rule.engine.api.TbNodeConfiguration;
-import org.thingsboard.rule.engine.api.TbNodeException;
-import org.thingsboard.rule.engine.api.TbNodeState;
-import org.thingsboard.rule.engine.api.TbNode;
-import org.thingsboard.rule.engine.api.EnrichmentNode;
+import org.thingsboard.rule.engine.api.*;
import org.thingsboard.server.common.data.kv.AttributeKvEntry;
import org.thingsboard.server.common.data.kv.TsKvEntry;
import org.thingsboard.server.common.msg.TbMsg;
@@ -40,7 +35,12 @@ import static org.thingsboard.server.common.data.DataConstants.*;
* Created by ashvayka on 19.01.18.
*/
@Slf4j
-@EnrichmentNode(name = "Get Attributes Node")
+@EnrichmentNode(name = "originator attributes",
+ nodeDescription = "Add Message Originator Attributes or Latest Telemetry into Message Metadata",
+ nodeDetails = "If Attributes enrichment configured, CLIENT/SHARED/SERVER attributes are added into Message metadata " +
+ "with specific prefix: cs/shared/ss. To access those attributes in other nodes this template can be used " +
+ "'meta.cs.temperature' or 'meta.shared.limit' " +
+ "If Latest Telemetry enrichment configured, latest telemetry added into metadata without prefix.")
public class TbGetAttributesNode implements TbNode {
private TbGetAttributesNodeConfiguration config;
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetCustomerAttributeNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetCustomerAttributeNode.java
index 18ddfcf..c9cabaa 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetCustomerAttributeNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetCustomerAttributeNode.java
@@ -22,7 +22,11 @@ import org.thingsboard.rule.engine.util.EntitiesCustomerIdAsyncLoader;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityId;
-@EnrichmentNode(name="Get Customer Attributes Node")
+@EnrichmentNode(name="customer attributes",
+ nodeDescription = "Add Originators Customer Attributes or Latest Telemetry into Message Metadata",
+ nodeDetails = "If Attributes enrichment configured, server scope attributes are added into Message metadata. " +
+ "To access those attributes in other nodes this template can be used " +
+ "'meta.temperature'. If Latest Telemetry enrichment configured, latest telemetry added into metadata")
public class TbGetCustomerAttributeNode extends TbEntityGetAttrNode<CustomerId> {
@Override
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNode.java
index 3a0dce8..f85d019 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetRelatedAttributeNode.java
@@ -26,7 +26,13 @@ import org.thingsboard.rule.engine.util.EntitiesRelatedEntityIdAsyncLoader;
import org.thingsboard.server.common.data.id.EntityId;
-@EnrichmentNode(name="Get Related Entity Attributes Node")
+@EnrichmentNode(name="related attributes",
+ nodeDescription = "Add Originators Related Entity Attributes or Latest Telemetry into Message Metadata",
+ nodeDetails = "Related Entity found using configured relation direction and Relation Type. " +
+ "If multiple Related Entities are found, only first Entity is used for attributes enrichment, other entities are discarded. " +
+ "If Attributes enrichment configured, server scope attributes are added into Message metadata. " +
+ "To access those attributes in other nodes this template can be used " +
+ "'meta.temperature'. If Latest Telemetry enrichment configured, latest telemetry added into metadata")
public class TbGetRelatedAttributeNode extends TbEntityGetAttrNode<EntityId> {
private TbGetRelatedAttrNodeConfiguration config;
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNode.java
index e51c053..2603bc5 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/metadata/TbGetTenantAttributeNode.java
@@ -24,7 +24,11 @@ import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId;
@Slf4j
-@EnrichmentNode(name="Get Tenant Attributes Node")
+@EnrichmentNode(name="tenant attributes",
+ nodeDescription = "Add Originators Tenant Attributes or Latest Telemetry into Message Metadata",
+ nodeDetails = "If Attributes enrichment configured, server scope attributes are added into Message metadata. " +
+ "To access those attributes in other nodes this template can be used " +
+ "'meta.temperature'. If Latest Telemetry enrichment configured, latest telemetry added into metadata")
public class TbGetTenantAttributeNode extends TbEntityGetAttrNode<TenantId> {
@Override
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNode.java
index 36063b7..8ab8e18 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbChangeOriginatorNode.java
@@ -32,7 +32,10 @@ import org.thingsboard.server.common.msg.TbMsg;
import java.util.HashSet;
@Slf4j
-@EnrichmentNode(name = "Change Originator Node")
+@TransformationNode(name="change originator",
+ nodeDescription = "Change Message Originator To Tenant/Customer/Related Entity",
+ nodeDetails = "Related Entity found using configured relation direction and Relation Type. " +
+ "If multiple Related Entities are found, only first Entity is used as new Originator, other entities are discarded. ")
public class TbChangeOriginatorNode extends TbAbstractTransformNode {
protected static final String CUSTOMER_SOURCE = "CUSTOMER";
diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java
index c0d20f4..3cd7cd1 100644
--- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java
+++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/transform/TbTransformMsgNode.java
@@ -23,7 +23,11 @@ import org.thingsboard.server.common.msg.TbMsg;
import javax.script.Bindings;
-@EnrichmentNode(name = "Transformation Node")
+@TransformationNode(name = "script",
+ nodeDescription = "Change Message payload and Metadata using JavaScript",
+ nodeDetails = "JavaScript function recieve 2 input parameters that can be changed inside. " +
+ "'meta' - is a Message metadata. " +
+ "'msg' - is a Message payload. Any properties can be changed/removed/added in those objects.")
public class TbTransformMsgNode extends TbAbstractTransformNode {
private TbTransformMsgNodeConfiguration config;