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