]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/DiagramConnectionExistence.java
Layer0Utils.addL0Identifier to prevent possible differentiation of code
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / mapping / DiagramConnectionExistence.java
1 package org.simantics.modeling.mapping;
2
3 import gnu.trove.map.hash.THashMap;
4
5 import java.util.ArrayList;
6
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;
17
18 public class DiagramConnectionExistence extends Instruction3 {
19
20     public DiagramConnectionExistence(int variable0, int variable1,
21             int variable2) {
22         super(variable0, variable1, variable2);
23     }
24     
25     /* and(bf(MOD.ConnectionRelationToDiagramConnectionRelation, ConnectionRelation, DiagramConnectionRelation),
26            statement_bbf(Element, DiagramConnectionRelation, Connector),
27            bb(DIA.IsConnectorOf, Connector, Connection2)
28           )
29      */
30     private static class ConnectionsOfElement extends ResourceRead<THashMap<Resource,ArrayList<Resource>>> {
31         
32         public ConnectionsOfElement(Resource element) {
33             super(element);
34         }
35
36         @Override
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);
49                     if(l == null) {
50                         l = new ArrayList<Resource>(2);
51                         result.put(configurationRelation, l);
52                     }
53                     l.addAll(graph.getObjects(stat.getObject(), DIA.IsConnectorOf));
54                 }
55             }
56             return result;
57         }        
58     }
59     
60     @Override
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);
67         
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))
72             return null;
73         else
74             return FAILURE;
75     }
76
77     @Override
78     public Object next(ReadGraph g, Object[] bindings, Object continuation)
79             throws DatabaseException {
80         return FAILURE;
81     }
82
83     @Override
84     public IContextualModification claim(ReadGraph g, Object[] bindings)
85             throws DatabaseException {
86         throw new UnsupportedOperationException();
87     }
88
89     @Override
90     public IContextualModification deny(ReadGraph g, Object[] bindings)
91             throws DatabaseException {
92         throw new UnsupportedOperationException();
93     }
94
95     @Override
96     public void toString(StringBuilder b, int indent) {
97         b.append("DiagramConnectionExistence");
98     }
99
100 }