]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/DNElementRemover.java
Implement district features to Simantics platform
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / DNElementRemover.java
diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/DNElementRemover.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/DNElementRemover.java
new file mode 100644 (file)
index 0000000..2cbfe98
--- /dev/null
@@ -0,0 +1,61 @@
+package org.simantics.district.network.ui;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.utils.OrderedSetUtils;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.adapter.impl.EntityRemover;\r
+import org.simantics.district.network.ontology.DistrictNetworkResource;\r
+import org.simantics.layer0.utils.binaryPredicates.OrderedSetElementsPredicate;\r
+import org.simantics.modeling.adapters.ElementRemover;\r
+\r
+public class DNElementRemover extends ElementRemover {\r
+\r
+    public DNElementRemover(Resource element) {\r
+        super(element);\r
+    }\r
+    \r
+    @Override\r
+    public void removeConnection(WriteGraph graph) throws DatabaseException {\r
+        throw new UnsupportedOperationException("Distrct network should not have STR.Connection resources! " + resource);\r
+    }\r
+    \r
+    @Override\r
+    public void removeElement(WriteGraph graph) throws DatabaseException {\r
+        \r
+        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);\r
+        \r
+        if (graph.isInstanceOf(resource, DN.Vertex)) {\r
+            graph.getObjects(resource, DN.HasEndVertex_Inverse).forEach(res -> {\r
+                try {\r
+                    doRemove(graph, res);\r
+                } catch (DatabaseException e) {\r
+                    e.printStackTrace();\r
+                }\r
+            });\r
+            graph.getObjects(resource, DN.HasStartVertex_Inverse).forEach(res -> {\r
+                try {\r
+                    doRemove(graph, res);\r
+                } catch (DatabaseException e) {\r
+                    e.printStackTrace();\r
+                }\r
+            });\r
+        }\r
+        doRemove(graph, resource);\r
+    }\r
+    \r
+    private static void doRemove(WriteGraph graph, Resource resource) throws DatabaseException {\r
+        // 1. Disconnect element from diagrams\r
+        for (Resource diagram : OrderedSetElementsPredicate.INSTANCE.getSubjects(graph, resource)) {\r
+            OrderedSetUtils.remove(graph, diagram, resource);\r
+        }\r
+\r
+        // 2. Delete element itself\r
+        EntityRemover.remove(graph, resource);\r
+\r
+        // 3. Recursively remove all related degenerate connections\r
+        // i.e. connections that only have one connector after remove the\r
+        // one connected to this removed element.\r
+    }\r
+\r
+}\r