]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/DiagramConnectionExistence.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / mapping / DiagramConnectionExistence.java
diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/DiagramConnectionExistence.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/mapping/DiagramConnectionExistence.java
new file mode 100644 (file)
index 0000000..381087a
--- /dev/null
@@ -0,0 +1,100 @@
+package org.simantics.modeling.mapping;\r
+\r
+import gnu.trove.map.hash.THashMap;\r
+\r
+import java.util.ArrayList;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+import org.simantics.db.common.request.ResourceRead;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.mapping.IContextualModification;\r
+import org.simantics.mapping.constraint.instructions.Instruction3;\r
+import org.simantics.modeling.ModelingResources;\r
+import org.simantics.structural.stubs.StructuralResource2;\r
+\r
+public class DiagramConnectionExistence extends Instruction3 {\r
+\r
+    public DiagramConnectionExistence(int variable0, int variable1,\r
+            int variable2) {\r
+        super(variable0, variable1, variable2);\r
+    }\r
+    \r
+    /* and(bf(MOD.ConnectionRelationToDiagramConnectionRelation, ConnectionRelation, DiagramConnectionRelation),\r
+           statement_bbf(Element, DiagramConnectionRelation, Connector),\r
+           bb(DIA.IsConnectorOf, Connector, Connection2)\r
+          )\r
+     */\r
+    private static class ConnectionsOfElement extends ResourceRead<THashMap<Resource,ArrayList<Resource>>> {\r
+        \r
+        public ConnectionsOfElement(Resource element) {\r
+            super(element);\r
+        }\r
+\r
+        @Override\r
+        public THashMap<Resource, ArrayList<Resource>> perform(ReadGraph graph)\r
+                throws DatabaseException {\r
+            THashMap<Resource, ArrayList<Resource>> result =\r
+                    new THashMap<Resource, ArrayList<Resource>>(4);\r
+            StructuralResource2 STR = StructuralResource2.getInstance(graph);\r
+            DiagramResource DIA = DiagramResource.getInstance(graph);            \r
+            ModelingResources MOD = ModelingResources.getInstance(graph);\r
+            for(Statement stat : graph.getStatements(resource, STR.IsConnectedTo)) {\r
+                for(Resource configurationRelation : \r
+                        graph.getObjects(stat.getPredicate(), \r
+                                MOD.DiagramConnectionRelationToConnectionRelation)) {\r
+                    ArrayList<Resource> l = result.get(configurationRelation);\r
+                    if(l == null) {\r
+                        l = new ArrayList<Resource>(2);\r
+                        result.put(configurationRelation, l);\r
+                    }\r
+                    l.addAll(graph.getObjects(stat.getObject(), DIA.IsConnectorOf));\r
+                }\r
+            }\r
+            return result;\r
+        }        \r
+    }\r
+    \r
+    @Override\r
+    public Object query(ReadGraph g, Object[] bindings)\r
+            throws DatabaseException {\r
+        Resource element = (Resource)bindings[variable0];\r
+        Resource connectionRelation = (Resource)bindings[variable1];\r
+        Resource connection2 = (Resource)bindings[variable2];\r
+        //System.out.println("query " + element + " " + connectionRelation + " " + connection2);\r
+        \r
+        THashMap<Resource, ArrayList<Resource>> map = g.syncRequest(new ConnectionsOfElement(element)); \r
+        //System.out.println("    " + map);\r
+        ArrayList<Resource> cs = map.get(connectionRelation);\r
+        if(cs != null && cs.contains(connection2))\r
+            return null;\r
+        else\r
+            return FAILURE;\r
+    }\r
+\r
+    @Override\r
+    public Object next(ReadGraph g, Object[] bindings, Object continuation)\r
+            throws DatabaseException {\r
+        return FAILURE;\r
+    }\r
+\r
+    @Override\r
+    public IContextualModification claim(ReadGraph g, Object[] bindings)\r
+            throws DatabaseException {\r
+        throw new UnsupportedOperationException();\r
+    }\r
+\r
+    @Override\r
+    public IContextualModification deny(ReadGraph g, Object[] bindings)\r
+            throws DatabaseException {\r
+        throw new UnsupportedOperationException();\r
+    }\r
+\r
+    @Override\r
+    public void toString(StringBuilder b, int indent) {\r
+        b.append("DiagramConnectionExistence");\r
+    }\r
+\r
+}\r