rule chain circles validation improvements

This commit is contained in:
YevhenBondarenko 2020-10-26 12:24:48 +02:00 committed by Andrew Shvayka
parent 174570610b
commit 44a700e89a

View File

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