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