]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/handler/ConnectionSplitAndJoin.java
Sync git svn branch with SVN repository r33176.
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / handler / ConnectionSplitAndJoin.java
index 9e7a1637ebe2eba7ec0605b969de441f3ac3117c..d46c427320c7b06e8c13a6a77112202146a6d50f 100644 (file)
@@ -29,6 +29,7 @@ import org.simantics.db.Session;
 import org.simantics.db.WriteGraph;\r
 import org.simantics.db.common.request.IndexRoot;\r
 import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.common.utils.OrderedSetUtils;\r
 import org.simantics.db.exception.DatabaseException;\r
 import org.simantics.diagram.content.ConnectionUtil;\r
 import org.simantics.diagram.content.EdgeResource;\r
@@ -150,13 +151,20 @@ public class ConnectionSplitAndJoin extends DynamicMenuContribution {
             Resource r = AdaptionUtils.adaptToSingle(s, Resource.class);\r
             if (r == null || !graph.isInstanceOf(r, DIA.Flag))\r
                 return Collections.emptyList();\r
-            Resource counterpart = FlagUtil.getPossibleCounterpart(graph, r);\r
-            if (counterpart == null)\r
+            if (!isConnectedToSomething(graph, r))\r
                 return Collections.emptyList();\r
-            if (!FlagUtil.isJoinedInSingleDiagram(graph, r))\r
-                return Collections.emptyList();\r
-            if (!isConnectedToSomething(graph, r) || !isConnectedToSomething(graph, counterpart))\r
+            Collection<Resource> counterparts = FlagUtil.getCounterparts(graph, r);\r
+            if (counterparts.isEmpty())\r
                 return Collections.emptyList();\r
+            Collection<Resource> flagDiagrams = OrderedSetUtils.getOwnerLists(graph, r, DIA.Diagram);\r
+            for (Resource counterpart : counterparts) {\r
+                boolean joinedWithinSingleDiagram = !Collections.disjoint(flagDiagrams,\r
+                        OrderedSetUtils.getOwnerLists(graph, counterpart, DIA.Diagram));\r
+                if (!joinedWithinSingleDiagram)\r
+                    return Collections.emptyList();\r
+                if (!isConnectedToSomething(graph, counterpart))\r
+                    return Collections.emptyList();\r
+            }\r
             result.add(r);\r
         }\r
         return result;\r