1 package org.simantics.district.network.ui;
\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
12 public class DNElementRemover extends ElementRemover {
\r
14 public DNElementRemover(Resource element) {
\r
19 public void removeConnection(WriteGraph graph) throws DatabaseException {
\r
20 throw new UnsupportedOperationException("Distrct network should not have STR.Connection resources! " + resource);
\r
24 public void removeElement(WriteGraph graph) throws DatabaseException {
\r
26 DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
\r
28 if (graph.isInstanceOf(resource, DN.Vertex)) {
\r
29 graph.getObjects(resource, DN.HasEndVertex_Inverse).forEach(res -> {
\r
31 doRemove(graph, res);
\r
32 } catch (DatabaseException e) {
\r
33 e.printStackTrace();
\r
36 graph.getObjects(resource, DN.HasStartVertex_Inverse).forEach(res -> {
\r
38 doRemove(graph, res);
\r
39 } catch (DatabaseException e) {
\r
40 e.printStackTrace();
\r
44 doRemove(graph, resource);
\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
53 // 2. Delete element itself
\r
54 EntityRemover.remove(graph, resource);
\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