import org.simantics.db.common.utils.OrderedSetUtils;\r
import org.simantics.db.exception.DatabaseException;\r
import org.simantics.db.exception.ServiceException;\r
+import org.simantics.db.function.DbBiFunction;\r
import org.simantics.db.function.DbConsumer;\r
import org.simantics.db.layer0.util.RemoverUtil;\r
import org.simantics.db.layer0.variable.Variable;\r
return count;\r
}\r
\r
+ public static int forCounterparts(ReadGraph graph, Resource flag, DbBiFunction<Resource, Resource, Boolean> procedure) throws DatabaseException {\r
+ DiagramResource DIA = DiagramResource.getInstance(graph);\r
+ int count = 0;\r
+ for (Resource connectionJoin : graph.getObjects(flag, DIA.FlagIsJoinedBy)) {\r
+ for (Resource otherFlag : graph.getObjects(connectionJoin, DIA.JoinsFlag)) {\r
+ if (!flag.equals(otherFlag)) {\r
+ if (!procedure.apply(connectionJoin, otherFlag))\r
+ return ++count;\r
+ ++count;\r
+ }\r
+ }\r
+ }\r
+ return count;\r
+ }\r
+\r
/**\r
* Returns all flags that are joined with the given flag including the flag given as parameter.\r
*/\r
RemoverUtil.remove(graph, flag);\r
}\r
\r
+ /**\r
+ * @param graph\r
+ * @param flag\r
+ * @return <code>true</code> only if the specified flag is joined only\r
+ * within the single diagram it resides in\r
+ * @throws DatabaseException\r
+ */\r
public static boolean isJoinedInSingleDiagram(ReadGraph graph, Resource flag) throws DatabaseException {\r
- DiagramResource DIA = DiagramResource.getInstance(graph);\r
- Resource counterpart = getPossibleCounterpart(graph, flag);\r
- if (counterpart == null)\r
+ Collection<Resource> counterparts = getCounterparts(graph, flag);\r
+ if (counterparts.isEmpty())\r
return false;\r
- return !Collections.disjoint(\r
- OrderedSetUtils.getOwnerLists(graph, flag, DIA.Diagram),\r
- OrderedSetUtils.getOwnerLists(graph, counterpart, DIA.Diagram));\r
+ DiagramResource DIA = DiagramResource.getInstance(graph);\r
+ Collection<Resource> flagDiagrams = OrderedSetUtils.getOwnerLists(graph, flag, DIA.Diagram);\r
+ for (Resource counterpart : counterparts) {\r
+ if (Collections.disjoint(flagDiagrams,\r
+ OrderedSetUtils.getOwnerLists(graph, counterpart, DIA.Diagram)))\r
+ return false;\r
+ }\r
+ return true;\r
}\r
\r
public static boolean isJoinedBetweenDiagrams(ReadGraph graph, Resource flag) throws DatabaseException {\r