1 package org.simantics.modeling.mapping;
\r
3 import gnu.trove.map.hash.THashMap;
\r
5 import java.util.ArrayList;
\r
7 import org.simantics.db.ReadGraph;
\r
8 import org.simantics.db.Resource;
\r
9 import org.simantics.db.Statement;
\r
10 import org.simantics.db.common.request.ResourceRead;
\r
11 import org.simantics.db.exception.DatabaseException;
\r
12 import org.simantics.diagram.stubs.DiagramResource;
\r
13 import org.simantics.mapping.IContextualModification;
\r
14 import org.simantics.mapping.constraint.instructions.Instruction3;
\r
15 import org.simantics.modeling.ModelingResources;
\r
16 import org.simantics.structural.stubs.StructuralResource2;
\r
18 public class DiagramConnectionExistence extends Instruction3 {
\r
20 public DiagramConnectionExistence(int variable0, int variable1,
\r
22 super(variable0, variable1, variable2);
\r
25 /* and(bf(MOD.ConnectionRelationToDiagramConnectionRelation, ConnectionRelation, DiagramConnectionRelation),
\r
26 statement_bbf(Element, DiagramConnectionRelation, Connector),
\r
27 bb(DIA.IsConnectorOf, Connector, Connection2)
\r
30 private static class ConnectionsOfElement extends ResourceRead<THashMap<Resource,ArrayList<Resource>>> {
\r
32 public ConnectionsOfElement(Resource element) {
\r
37 public THashMap<Resource, ArrayList<Resource>> perform(ReadGraph graph)
\r
38 throws DatabaseException {
\r
39 THashMap<Resource, ArrayList<Resource>> result =
\r
40 new THashMap<Resource, ArrayList<Resource>>(4);
\r
41 StructuralResource2 STR = StructuralResource2.getInstance(graph);
\r
42 DiagramResource DIA = DiagramResource.getInstance(graph);
\r
43 ModelingResources MOD = ModelingResources.getInstance(graph);
\r
44 for(Statement stat : graph.getStatements(resource, STR.IsConnectedTo)) {
\r
45 for(Resource configurationRelation :
\r
46 graph.getObjects(stat.getPredicate(),
\r
47 MOD.DiagramConnectionRelationToConnectionRelation)) {
\r
48 ArrayList<Resource> l = result.get(configurationRelation);
\r
50 l = new ArrayList<Resource>(2);
\r
51 result.put(configurationRelation, l);
\r
53 l.addAll(graph.getObjects(stat.getObject(), DIA.IsConnectorOf));
\r
61 public Object query(ReadGraph g, Object[] bindings)
\r
62 throws DatabaseException {
\r
63 Resource element = (Resource)bindings[variable0];
\r
64 Resource connectionRelation = (Resource)bindings[variable1];
\r
65 Resource connection2 = (Resource)bindings[variable2];
\r
66 //System.out.println("query " + element + " " + connectionRelation + " " + connection2);
\r
68 THashMap<Resource, ArrayList<Resource>> map = g.syncRequest(new ConnectionsOfElement(element));
\r
69 //System.out.println(" " + map);
\r
70 ArrayList<Resource> cs = map.get(connectionRelation);
\r
71 if(cs != null && cs.contains(connection2))
\r
78 public Object next(ReadGraph g, Object[] bindings, Object continuation)
\r
79 throws DatabaseException {
\r
84 public IContextualModification claim(ReadGraph g, Object[] bindings)
\r
85 throws DatabaseException {
\r
86 throw new UnsupportedOperationException();
\r
90 public IContextualModification deny(ReadGraph g, Object[] bindings)
\r
91 throws DatabaseException {
\r
92 throw new UnsupportedOperationException();
\r
96 public void toString(StringBuilder b, int indent) {
\r
97 b.append("DiagramConnectionExistence");
\r