]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.imports/src/org/simantics/district/imports/DistrictImportUtils.java
Support searching nearby vertices in network diagram
[simantics/district.git] / org.simantics.district.imports / src / org / simantics / district / imports / DistrictImportUtils.java
index 083b58d5fa1d91c7fad40bc53d2fc939aab1d9e5..cad063fd5094fa9d73ad4da5012d65f093c35153 100644 (file)
@@ -29,24 +29,17 @@ import org.opengis.referencing.operation.MathTransform;
 import org.opengis.referencing.operation.TransformException;
 import org.simantics.Simantics;
 import org.simantics.databoard.Bindings;
-import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.WriteGraph;
-import org.simantics.db.common.request.ObjectsWithType;
-import org.simantics.db.common.request.UniqueRead;
 import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
 import org.simantics.db.layer0.util.Layer0Utils;
-import org.simantics.diagram.stubs.DiagramResource;
 import org.simantics.district.network.DNEdgeBuilder;
 import org.simantics.district.network.DistrictNetworkUtil;
 import org.simantics.district.network.ontology.DistrictNetworkResource;
-import org.simantics.layer0.Layer0;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.simantics.district.network.DistrictNetworkUtil.ResourceVertex;
 
-import com.vividsolutions.jts.geom.Envelope;
 import com.vividsolutions.jts.index.quadtree.Quadtree;
 
 public class DistrictImportUtils {
@@ -408,24 +401,7 @@ public class DistrictImportUtils {
         
         double halfPadding = padding / 2;
         
-        Quadtree vv = Simantics.getSession().syncRequest(new UniqueRead<Quadtree>() {
-
-            @Override
-            public Quadtree perform(ReadGraph graph) throws DatabaseException {
-                Collection<Resource> vertices = graph.syncRequest(new ObjectsWithType(model.getParentDiagram(), Layer0.getInstance(graph).ConsistsOf, DistrictNetworkResource.getInstance(graph).Vertex));
-                Quadtree vv = new Quadtree();
-                for (Resource vertex : vertices) {
-                    double[] coords = graph.getRelatedValue2(vertex, DiagramResource.getInstance(graph).HasLocation, Bindings.DOUBLE_ARRAY);
-                    double x1 = coords[0] - halfPadding;
-                    double y1= coords[1] - halfPadding;
-                    double x2 = coords[0] + halfPadding;
-                    double y2= coords[1] + halfPadding;
-                    Envelope e = new Envelope(x1, x2, y1, y2);
-                    vv.insert(e, new ResourceVertex(vertex, coords, true));
-                }
-                return vv;
-            }
-        });
+        Quadtree existingVertices = DistrictNetworkUtil.existingVertices(model.getParentDiagram(), halfPadding);
 
         Simantics.getSession().syncRequest(new WriteRequest() {
             
@@ -480,8 +456,8 @@ public class DistrictImportUtils {
                                 // Switch to (longitude, latitude)
                                 flipAxes(startCoords);
                                 flipAxes(endCoords);
-                                
-                                Optional<Resource> oedge = DNEdgeBuilder.create(graph, vv, model.getParentDiagram(), model.getComponentMappings().get(mappingValue), startCoords, startZCoord, endCoords, endZCoord, new double[0], padding, true);
+
+                                Optional<Resource> oedge = DNEdgeBuilder.create(graph, existingVertices, model.getParentDiagram(), model.getComponentMappings().get(mappingValue), startCoords, startZCoord, endCoords, endZCoord, new double[0], padding, true);
                                 if (oedge.isPresent()) {
                                     Resource edge = oedge.get();