From c164c68e1271bf00416746aa4092fbab29a77f60 Mon Sep 17 00:00:00 2001 From: Andrii Landiak Date: Fri, 11 Aug 2023 13:48:13 +0300 Subject: [PATCH] Refactoring EdgeUtils to use enum map to match entity type with edge event type --- .../rpc/processor/alarm/AlarmEdgeProcessor.java | 2 +- .../rpc/sync/DefaultEdgeRequestsService.java | 2 +- .../service/queue/DefaultTbClusterService.java | 3 ++- .../server/common/data/EdgeUtils.java | 16 ++++++++++++++++ .../server/common/data/edge/EdgeEventType.java | 9 --------- .../rule/engine/edge/TbMsgPushToEdgeNode.java | 3 ++- 6 files changed, 22 insertions(+), 13 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/alarm/AlarmEdgeProcessor.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/alarm/AlarmEdgeProcessor.java index 4dc24ba78a..0b86352c02 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/alarm/AlarmEdgeProcessor.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/alarm/AlarmEdgeProcessor.java @@ -73,7 +73,7 @@ public class AlarmEdgeProcessor extends BaseAlarmProcessor { if (alarm == null) { return Futures.immediateFuture(null); } - EdgeEventType type = EdgeEventType.getEdgeEventTypeByEntityType(alarm.getOriginator().getEntityType()); + EdgeEventType type = EdgeUtils.getEdgeEventTypeByEntityType(alarm.getOriginator().getEntityType()); if (type == null) { return Futures.immediateFuture(null); } diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/sync/DefaultEdgeRequestsService.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/sync/DefaultEdgeRequestsService.java index 6ec253dd9c..700e0f3861 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/sync/DefaultEdgeRequestsService.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/sync/DefaultEdgeRequestsService.java @@ -130,7 +130,7 @@ public class DefaultEdgeRequestsService implements EdgeRequestsService { EntityId entityId = EntityIdFactory.getByTypeAndUuid( EntityType.valueOf(attributesRequestMsg.getEntityType()), new UUID(attributesRequestMsg.getEntityIdMSB(), attributesRequestMsg.getEntityIdLSB())); - final EdgeEventType entityType = EdgeEventType.getEdgeEventTypeByEntityType(entityId.getEntityType()); + final EdgeEventType entityType = EdgeUtils.getEdgeEventTypeByEntityType(entityId.getEntityType()); if (entityType == null) { log.warn("[{}] Type doesn't supported {}", tenantId, entityId.getEntityType()); return Futures.immediateFuture(null); diff --git a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java index 99cee14e1e..53ef38d96a 100644 --- a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java +++ b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbClusterService.java @@ -29,6 +29,7 @@ import org.thingsboard.server.cluster.TbClusterService; import org.thingsboard.server.common.data.ApiUsageState; import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; +import org.thingsboard.server.common.data.EdgeUtils; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.HasRuleEngineProfile; @@ -480,7 +481,7 @@ public class DefaultTbClusterService implements TbClusterService { } if (type == null) { if (entityId != null) { - type = EdgeEventType.getEdgeEventTypeByEntityType(entityId.getEntityType()); + type = EdgeUtils.getEdgeEventTypeByEntityType(entityId.getEntityType()); } else { log.trace("[{}] entity id and type are null. Ignoring this notification", tenantId); return; diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/EdgeUtils.java b/common/data/src/main/java/org/thingsboard/server/common/data/EdgeUtils.java index 05786d26b3..f74ea6fd07 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/EdgeUtils.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/EdgeUtils.java @@ -25,11 +25,23 @@ import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; +import java.util.EnumMap; import java.util.concurrent.ThreadLocalRandom; @Slf4j public final class EdgeUtils { + private static final EnumMap entityTypeEdgeEventTypeEnumMap; + + static { + entityTypeEdgeEventTypeEnumMap = new EnumMap<>(EntityType.class); + for (EdgeEventType edgeEventType : EdgeEventType.values()) { + if (edgeEventType.getEntityType() != null) { + entityTypeEdgeEventTypeEnumMap.put(edgeEventType.getEntityType(), edgeEventType); + } + } + } + private static final int STACK_TRACE_LIMIT = 10; private EdgeUtils() {} @@ -38,6 +50,10 @@ public final class EdgeUtils { return ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE); } + public static EdgeEventType getEdgeEventTypeByEntityType(EntityType entityType) { + return entityTypeEdgeEventTypeEnumMap.get(entityType); + } + public static EdgeEvent constructEdgeEvent(TenantId tenantId, EdgeId edgeId, EdgeEventType type, diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeEventType.java b/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeEventType.java index dfbf27970b..1397deb5d7 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeEventType.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeEventType.java @@ -18,8 +18,6 @@ package org.thingsboard.server.common.data.edge; import lombok.Getter; import org.thingsboard.server.common.data.EntityType; -import java.util.Arrays; - @Getter public enum EdgeEventType { DASHBOARD(false, EntityType.DASHBOARD), @@ -52,11 +50,4 @@ public enum EdgeEventType { this.allEdgesRelated = allEdgesRelated; this.entityType = entityType; } - - public static EdgeEventType getEdgeEventTypeByEntityType(EntityType entityType) { - return Arrays.stream(values()) - .filter(edgeEventType -> entityType.equals(edgeEventType.getEntityType())) - .findFirst() - .orElse(null); - } } diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/edge/TbMsgPushToEdgeNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/edge/TbMsgPushToEdgeNode.java index ae64b57721..a09ecb677e 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/edge/TbMsgPushToEdgeNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/edge/TbMsgPushToEdgeNode.java @@ -24,6 +24,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.thingsboard.rule.engine.api.RuleNode; import org.thingsboard.rule.engine.api.TbContext; import org.thingsboard.server.common.data.DataConstants; +import org.thingsboard.server.common.data.EdgeUtils; import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.edge.EdgeEvent; import org.thingsboard.server.common.data.edge.EdgeEventActionType; @@ -90,7 +91,7 @@ public class TbMsgPushToEdgeNode extends AbstractTbMsgPushNode