]> gerrit.simantics Code Review - simantics/district.git/blob - 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
1 package org.simantics.district.network.ui;\r
2 \r
3 import org.simantics.db.Resource;\r
4 import org.simantics.db.WriteGraph;\r
5 import org.simantics.db.common.utils.OrderedSetUtils;\r
6 import org.simantics.db.exception.DatabaseException;\r
7 import org.simantics.db.layer0.adapter.impl.EntityRemover;\r
8 import org.simantics.district.network.ontology.DistrictNetworkResource;\r
9 import org.simantics.layer0.utils.binaryPredicates.OrderedSetElementsPredicate;\r
10 import org.simantics.modeling.adapters.ElementRemover;\r
11 \r
12 public class DNElementRemover extends ElementRemover {\r
13 \r
14     public DNElementRemover(Resource element) {\r
15         super(element);\r
16     }\r
17     \r
18     @Override\r
19     public void removeConnection(WriteGraph graph) throws DatabaseException {\r
20         throw new UnsupportedOperationException("Distrct network should not have STR.Connection resources! " + resource);\r
21     }\r
22     \r
23     @Override\r
24     public void removeElement(WriteGraph graph) throws DatabaseException {\r
25         \r
26         DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);\r
27         \r
28         if (graph.isInstanceOf(resource, DN.Vertex)) {\r
29             graph.getObjects(resource, DN.HasEndVertex_Inverse).forEach(res -> {\r
30                 try {\r
31                     doRemove(graph, res);\r
32                 } catch (DatabaseException e) {\r
33                     e.printStackTrace();\r
34                 }\r
35             });\r
36             graph.getObjects(resource, DN.HasStartVertex_Inverse).forEach(res -> {\r
37                 try {\r
38                     doRemove(graph, res);\r
39                 } catch (DatabaseException e) {\r
40                     e.printStackTrace();\r
41                 }\r
42             });\r
43         }\r
44         doRemove(graph, resource);\r
45     }\r
46     \r
47     private static void doRemove(WriteGraph graph, Resource resource) throws DatabaseException {\r
48         // 1. Disconnect element from diagrams\r
49         for (Resource diagram : OrderedSetElementsPredicate.INSTANCE.getSubjects(graph, resource)) {\r
50             OrderedSetUtils.remove(graph, diagram, resource);\r
51         }\r
52 \r
53         // 2. Delete element itself\r
54         EntityRemover.remove(graph, resource);\r
55 \r
56         // 3. Recursively remove all related degenerate connections\r
57         // i.e. connections that only have one connector after remove the\r
58         // one connected to this removed element.\r
59     }\r
60 \r
61 }\r