]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/rules/RelatedDiagramConnections.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / rules / RelatedDiagramConnections.java
diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/rules/RelatedDiagramConnections.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/rules/RelatedDiagramConnections.java
new file mode 100644 (file)
index 0000000..ebbef33
--- /dev/null
@@ -0,0 +1,71 @@
+package org.simantics.modeling.rules;\r
+\r
+import gnu.trove.set.hash.THashSet;\r
+\r
+import java.util.Collection;\r
+import java.util.Set;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.structural.stubs.StructuralResource2;\r
+\r
+public class RelatedDiagramConnections {\r
+\r
+       ReadGraph g;\r
+       StructuralResource2 sr;\r
+       DiagramResource dr;\r
+       \r
+       THashSet<Resource> connections = new THashSet<Resource>();\r
+       THashSet<Resource> connectionJoins = new THashSet<Resource>();\r
+       THashSet<Resource> outputConnectors = new THashSet<Resource>();\r
+               \r
+       public RelatedDiagramConnections(ReadGraph g) {\r
+               this.g = g;\r
+               this.sr = StructuralResource2.getInstance(g);\r
+               this.dr = DiagramResource.getInstance(g);\r
+       }\r
+\r
+       public void addConnection(Resource connection) throws DatabaseException {\r
+               if(connections.add(connection)) {\r
+                       for(Statement hasConnector : g.getStatements(connection, dr.HasConnector)) {\r
+                               Resource connector = hasConnector.getObject();\r
+                               for(Resource flag : g.getObjects(connector, sr.Connects)) {\r
+                                       if(g.isInstanceOf(flag, dr.Flag)) {\r
+                                               for(Resource join : g.getObjects(flag, dr.FlagIsJoinedBy))\r
+                                                       addConnectionJoin(join);\r
+                                       }\r
+                               }\r
+                               if (g.isSubrelationOf(hasConnector.getPredicate(), dr.HasTailConnector)) {\r
+                                       outputConnectors.add(connector);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public void addConnectionJoin(Resource join) throws DatabaseException {\r
+               if(connectionJoins.add(join)) {\r
+                       for(Resource flag : g.getObjects(join, dr.JoinsFlag))\r
+                               for(Resource connector : g.getObjects(flag, sr.IsConnectedTo))\r
+                                       for(Resource connection : g.getObjects(connector, dr.IsConnectorOf))\r
+                                               addConnection(connection);\r
+               }\r
+       }\r
+\r
+       public static Collection<Resource> getRelatedDiagramConnections(ReadGraph g, Resource connection) throws DatabaseException {\r
+               RelatedDiagramConnections p = new RelatedDiagramConnections(g);\r
+               p.addConnection(connection);\r
+               return p.connections;\r
+       }\r
+\r
+       public Set<Resource> getDiagramConnections() {\r
+               return connections;\r
+       }\r
+\r
+       public Set<Resource> getOutputConnectors() {\r
+               return outputConnectors;\r
+       }\r
+\r
+}\r