diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java index a57ce62957..ab05febc3a 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java @@ -47,8 +47,10 @@ import org.thingsboard.server.dao.tenant.TenantDao; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; @@ -212,16 +214,19 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC } private void validateCircles(List connectionInfos) { - Map> connectionsMap = new HashMap<>(); + Map> connectionsMap = new HashMap<>(); for (NodeConnectionInfo nodeConnection : connectionInfos) { + if (nodeConnection.getFromIndex() == nodeConnection.getToIndex()) { + throw new IncorrectParameterException("Can't create the relation to yourself."); + } connectionsMap - .computeIfAbsent(nodeConnection.getFromIndex(), from -> new ArrayList<>()) + .computeIfAbsent(nodeConnection.getFromIndex(), from -> new HashSet<>()) .add(nodeConnection.getToIndex()); } connectionsMap.keySet().forEach(key -> validateCircles(key, connectionsMap.get(key), connectionsMap)); } - private void validateCircles(int from, List toList, Map> connectionsMap) { + private void validateCircles(int from, Set toList, Map> connectionsMap) { if (toList == null) { return; }