package org.simantics.district.network.ui; import org.simantics.db.Resource; import org.simantics.db.WriteGraph; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.util.Layer0Utils; import org.simantics.diagram.synchronization.graph.AddElement; import org.simantics.district.network.DistrictNetworkUtil; import org.simantics.district.network.ontology.DistrictNetworkResource; public class DNEdgeBuilder { private Resource diagramResource; public DNEdgeBuilder(Resource diagramResource) { this.diagramResource = diagramResource; } public void create(WriteGraph graph, double[] start, double[] end) throws DatabaseException { DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph); // 1. Get diagram edge to construct Resource edge = getOrCreateEdge(graph); // 1.1 Give running name to connection and increment the counter attached to the diagram. AddElement.claimFreshElementName(graph, diagramResource, edge); // 2. Add vertices Resource startVertex = getOrCreateVertex(graph, start); Resource endVertex = getOrCreateVertex(graph, end); graph.claim(edge, DN.HasStartVertex, startVertex); graph.claim(edge, DN.HasEndVertex, endVertex); Layer0Utils.addCommentMetadata(graph, "Added edge " + edge); graph.markUndoPoint(); } private Resource getOrCreateVertex(WriteGraph graph, double[] coords) throws DatabaseException { // TODO: check if vertex exists already, for now create always new Resource vertex = null; if (vertex == null) { vertex = DistrictNetworkUtil.createVertex(graph, diagramResource, coords); AddElement.claimFreshElementName(graph, diagramResource, vertex); } return vertex; } private Resource getOrCreateEdge(WriteGraph graph) throws DatabaseException { return DistrictNetworkUtil.createEdge(graph, diagramResource); } }