1 package org.simantics.modeling.rules;
\r
3 import gnu.trove.set.hash.THashSet;
\r
5 import java.util.Collection;
\r
6 import java.util.Set;
\r
8 import org.simantics.db.ReadGraph;
\r
9 import org.simantics.db.Resource;
\r
10 import org.simantics.db.Statement;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.diagram.stubs.DiagramResource;
\r
13 import org.simantics.structural.stubs.StructuralResource2;
\r
15 public class RelatedDiagramConnections {
\r
18 StructuralResource2 sr;
\r
21 THashSet<Resource> connections = new THashSet<Resource>();
\r
22 THashSet<Resource> connectionJoins = new THashSet<Resource>();
\r
23 THashSet<Resource> outputConnectors = new THashSet<Resource>();
\r
25 public RelatedDiagramConnections(ReadGraph g) {
\r
27 this.sr = StructuralResource2.getInstance(g);
\r
28 this.dr = DiagramResource.getInstance(g);
\r
31 public void addConnection(Resource connection) throws DatabaseException {
\r
32 if(connections.add(connection)) {
\r
33 for(Statement hasConnector : g.getStatements(connection, dr.HasConnector)) {
\r
34 Resource connector = hasConnector.getObject();
\r
35 for(Resource flag : g.getObjects(connector, sr.Connects)) {
\r
36 if(g.isInstanceOf(flag, dr.Flag)) {
\r
37 for(Resource join : g.getObjects(flag, dr.FlagIsJoinedBy))
\r
38 addConnectionJoin(join);
\r
41 if (g.isSubrelationOf(hasConnector.getPredicate(), dr.HasTailConnector)) {
\r
42 outputConnectors.add(connector);
\r
48 public void addConnectionJoin(Resource join) throws DatabaseException {
\r
49 if(connectionJoins.add(join)) {
\r
50 for(Resource flag : g.getObjects(join, dr.JoinsFlag))
\r
51 for(Resource connector : g.getObjects(flag, sr.IsConnectedTo))
\r
52 for(Resource connection : g.getObjects(connector, dr.IsConnectorOf))
\r
53 addConnection(connection);
\r
57 public static Collection<Resource> getRelatedDiagramConnections(ReadGraph g, Resource connection) throws DatabaseException {
\r
58 RelatedDiagramConnections p = new RelatedDiagramConnections(g);
\r
59 p.addConnection(connection);
\r
60 return p.connections;
\r
63 public Set<Resource> getDiagramConnections() {
\r
67 public Set<Resource> getOutputConnectors() {
\r
68 return outputConnectors;
\r