1 package org.simantics.structural2.internal.queries;
\r
3 import java.util.Collection;
\r
4 import java.util.Collections;
\r
5 import java.util.HashSet;
\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.common.request.ResourceRead2;
\r
12 import org.simantics.db.common.utils.NameUtils;
\r
13 import org.simantics.db.exception.DatabaseException;
\r
14 import org.simantics.structural.stubs.StructuralResource2;
\r
15 import org.simantics.structural2.queries.Terminal;
\r
16 import org.simantics.structural2.utils.StructuralUtils;
\r
19 * @author Tuukka Lehtonen
\r
21 public class ConnectedTo extends ResourceRead2<Set<Terminal>> {
\r
23 private static final boolean DEBUG = false;
\r
25 public ConnectedTo(Resource component, Resource connectionPoint) {
\r
26 super(component, connectionPoint);
\r
30 public Set<Terminal> perform(ReadGraph graph) throws DatabaseException {
\r
32 System.out.println("connectedTo(" + NameUtils.getSafeName(graph, resource) + ", " + NameUtils.getSafeName(graph, resource2) + ")");
\r
34 Collection<Resource> connections = graph.getObjects(resource, resource2);
\r
35 if (connections.isEmpty())
\r
36 return Collections.emptySet();
\r
38 Set<Resource> reachableConnections = new HashSet<Resource>();
\r
39 for (Resource connection : connections) {
\r
40 reachableConnections.addAll(StructuralUtils.getRelatedConnections(graph, connection));
\r
43 StructuralResource2 sr = StructuralResource2.getInstance(graph);
\r
45 Set<Terminal> connectedTo = new HashSet<Terminal>();
\r
47 for (Resource connection : reachableConnections) {
\r
49 System.out.println(" checking connection: " + NameUtils.getSafeName(graph, connection));
\r
51 for (Statement stm : graph.getStatements(connection, sr.Connects)) {
\r
52 Resource connectionPoint2 = graph.getInverse(stm.getPredicate());
\r
53 if (resource2.equals(connectionPoint2) && resource.equals(stm.getObject()))
\r
57 System.out.println(" connected to (" + NameUtils.getSafeName(graph, stm.getObject()) + ", " + NameUtils.getSafeName(graph, connectionPoint2) + ")");
\r
59 connectedTo.add(new Terminal(stm.getObject(), connectionPoint2));
\r