X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fhandler%2FConnectionSplitAndJoin.java;h=d46c427320c7b06e8c13a6a77112202146a6d50f;hp=9e7a1637ebe2eba7ec0605b969de441f3ac3117c;hb=c78854f7886d52b5375e11b3d6d8daacb12c287e;hpb=11c9c84985a71ff11b54b1a26703ecc7d127bbde diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/handler/ConnectionSplitAndJoin.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/handler/ConnectionSplitAndJoin.java index 9e7a1637e..d46c42732 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/handler/ConnectionSplitAndJoin.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/handler/ConnectionSplitAndJoin.java @@ -29,6 +29,7 @@ import org.simantics.db.Session; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.IndexRoot; import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.utils.OrderedSetUtils; import org.simantics.db.exception.DatabaseException; import org.simantics.diagram.content.ConnectionUtil; import org.simantics.diagram.content.EdgeResource; @@ -150,13 +151,20 @@ public class ConnectionSplitAndJoin extends DynamicMenuContribution { Resource r = AdaptionUtils.adaptToSingle(s, Resource.class); if (r == null || !graph.isInstanceOf(r, DIA.Flag)) return Collections.emptyList(); - Resource counterpart = FlagUtil.getPossibleCounterpart(graph, r); - if (counterpart == null) + if (!isConnectedToSomething(graph, r)) return Collections.emptyList(); - if (!FlagUtil.isJoinedInSingleDiagram(graph, r)) - return Collections.emptyList(); - if (!isConnectedToSomething(graph, r) || !isConnectedToSomething(graph, counterpart)) + Collection counterparts = FlagUtil.getCounterparts(graph, r); + if (counterparts.isEmpty()) return Collections.emptyList(); + Collection flagDiagrams = OrderedSetUtils.getOwnerLists(graph, r, DIA.Diagram); + for (Resource counterpart : counterparts) { + boolean joinedWithinSingleDiagram = !Collections.disjoint(flagDiagrams, + OrderedSetUtils.getOwnerLists(graph, counterpart, DIA.Diagram)); + if (!joinedWithinSingleDiagram) + return Collections.emptyList(); + if (!isConnectedToSomething(graph, counterpart)) + return Collections.emptyList(); + } result.add(r); } return result;