Commit 44a700e89a6cf783df6e4e6bf681ea33db072497
Committed by
Andrew Shvayka
1 parent
17457061
rule chain circles validation improvements
Showing
1 changed file
with
8 additions
and
3 deletions
@@ -47,8 +47,10 @@ import org.thingsboard.server.dao.tenant.TenantDao; | @@ -47,8 +47,10 @@ import org.thingsboard.server.dao.tenant.TenantDao; | ||
47 | 47 | ||
48 | import java.util.ArrayList; | 48 | import java.util.ArrayList; |
49 | import java.util.HashMap; | 49 | import java.util.HashMap; |
50 | +import java.util.HashSet; | ||
50 | import java.util.List; | 51 | import java.util.List; |
51 | import java.util.Map; | 52 | import java.util.Map; |
53 | +import java.util.Set; | ||
52 | import java.util.concurrent.ExecutionException; | 54 | import java.util.concurrent.ExecutionException; |
53 | import java.util.stream.Collectors; | 55 | import java.util.stream.Collectors; |
54 | 56 | ||
@@ -212,16 +214,19 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC | @@ -212,16 +214,19 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC | ||
212 | } | 214 | } |
213 | 215 | ||
214 | private void validateCircles(List<NodeConnectionInfo> connectionInfos) { | 216 | private void validateCircles(List<NodeConnectionInfo> connectionInfos) { |
215 | - Map<Integer, List<Integer>> connectionsMap = new HashMap<>(); | 217 | + Map<Integer, Set<Integer>> connectionsMap = new HashMap<>(); |
216 | for (NodeConnectionInfo nodeConnection : connectionInfos) { | 218 | for (NodeConnectionInfo nodeConnection : connectionInfos) { |
219 | + if (nodeConnection.getFromIndex() == nodeConnection.getToIndex()) { | ||
220 | + throw new IncorrectParameterException("Can't create the relation to yourself."); | ||
221 | + } | ||
217 | connectionsMap | 222 | connectionsMap |
218 | - .computeIfAbsent(nodeConnection.getFromIndex(), from -> new ArrayList<>()) | 223 | + .computeIfAbsent(nodeConnection.getFromIndex(), from -> new HashSet<>()) |
219 | .add(nodeConnection.getToIndex()); | 224 | .add(nodeConnection.getToIndex()); |
220 | } | 225 | } |
221 | connectionsMap.keySet().forEach(key -> validateCircles(key, connectionsMap.get(key), connectionsMap)); | 226 | connectionsMap.keySet().forEach(key -> validateCircles(key, connectionsMap.get(key), connectionsMap)); |
222 | } | 227 | } |
223 | 228 | ||
224 | - private void validateCircles(int from, List<Integer> toList, Map<Integer, List<Integer>> connectionsMap) { | 229 | + private void validateCircles(int from, Set<Integer> toList, Map<Integer, Set<Integer>> connectionsMap) { |
225 | if (toList == null) { | 230 | if (toList == null) { |
226 | return; | 231 | return; |
227 | } | 232 | } |