X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=inline;f=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2FDNElementRemover.java;fp=org.simantics.district.network.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fnetwork%2Fui%2FDNElementRemover.java;h=2cbfe98e8b291c58bc2d5de04bef0d8c1943f50d;hb=8034693a5c86d690649a70a62709d29c3fa197aa;hp=0000000000000000000000000000000000000000;hpb=31bcbe46c93a576cd6ade673a745ea9cb28672da;p=simantics%2Fdistrict.git 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 index 00000000..2cbfe98e --- /dev/null +++ b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/DNElementRemover.java @@ -0,0 +1,61 @@ +package org.simantics.district.network.ui; + +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.utils.OrderedSetUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.adapter.impl.EntityRemover; +import org.simantics.district.network.ontology.DistrictNetworkResource; +import org.simantics.layer0.utils.binaryPredicates.OrderedSetElementsPredicate; +import org.simantics.modeling.adapters.ElementRemover; + +public class DNElementRemover extends ElementRemover { + + public DNElementRemover(Resource element) { + super(element); + } + + @Override + public void removeConnection(WriteGraph graph) throws DatabaseException { + throw new UnsupportedOperationException("Distrct network should not have STR.Connection resources! " + resource); + } + + @Override + public void removeElement(WriteGraph graph) throws DatabaseException { + + DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); + + if (graph.isInstanceOf(resource, DN.Vertex)) { + graph.getObjects(resource, DN.HasEndVertex_Inverse).forEach(res -> { + try { + doRemove(graph, res); + } catch (DatabaseException e) { + e.printStackTrace(); + } + }); + graph.getObjects(resource, DN.HasStartVertex_Inverse).forEach(res -> { + try { + doRemove(graph, res); + } catch (DatabaseException e) { + e.printStackTrace(); + } + }); + } + doRemove(graph, resource); + } + + private static void doRemove(WriteGraph graph, Resource resource) throws DatabaseException { + // 1. Disconnect element from diagrams + for (Resource diagram : OrderedSetElementsPredicate.INSTANCE.getSubjects(graph, resource)) { + OrderedSetUtils.remove(graph, diagram, resource); + } + + // 2. Delete element itself + EntityRemover.remove(graph, resource); + + // 3. Recursively remove all related degenerate connections + // i.e. connections that only have one connector after remove the + // one connected to this removed element. + } + +}