]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network/src/org/simantics/district/network/DistrictNetworkUtil.java
Support searching nearby vertices in network diagram
[simantics/district.git] / org.simantics.district.network / src / org / simantics / district / network / DistrictNetworkUtil.java
index 6a7b453799f725c15e56b5d43d9e0ba5782aafcc..2bb29660930b82c9a30e010a118538fe73230c96 100644 (file)
@@ -3,14 +3,12 @@ package org.simantics.district.network;
 import java.awt.geom.Rectangle2D;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import org.simantics.Simantics;
 import org.simantics.databoard.Bindings;
 import org.simantics.datatypes.literal.RGB;
 import org.simantics.datatypes.literal.RGB.Integer;
@@ -18,7 +16,9 @@ import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.WriteGraph;
 import org.simantics.db.common.procedure.adapter.TransientCacheListener;
+import org.simantics.db.common.request.BinaryRead;
 import org.simantics.db.common.request.IndexRoot;
+import org.simantics.db.common.request.ObjectsWithType;
 import org.simantics.db.common.request.ResourceRead;
 import org.simantics.db.common.utils.OrderedSetUtils;
 import org.simantics.db.exception.BindingException;
@@ -33,27 +33,18 @@ import org.simantics.diagram.synchronization.graph.DiagramGraphUtil;
 import org.simantics.diagram.synchronization.graph.layer.GraphLayer;
 import org.simantics.diagram.synchronization.graph.layer.IGraphLayerUtil;
 import org.simantics.district.network.ontology.DistrictNetworkResource;
-import org.simantics.district.network.visualisations.DynamicVisualisationsContributions;
-import org.simantics.district.network.visualisations.model.ColorBarOptions;
-import org.simantics.district.network.visualisations.model.ColorBarOptions.ColorBarsLocation;
-import org.simantics.district.network.visualisations.model.ColorBarOptions.ColorBarsSize;
-import org.simantics.district.network.visualisations.model.DynamicColorContribution;
-import org.simantics.district.network.visualisations.model.DynamicColorMap;
-import org.simantics.district.network.visualisations.model.DynamicSizeContribution;
-import org.simantics.district.network.visualisations.model.DynamicSizeMap;
-import org.simantics.district.network.visualisations.model.SizeBarOptions;
-import org.simantics.district.network.visualisations.model.SizeBarOptions.SizeBarsLocation;
-import org.simantics.district.network.visualisations.model.SizeBarOptions.SizeBarsSize;
 import org.simantics.layer0.Layer0;
 import org.simantics.maps.elevation.server.SingletonTiffTileInterface;
 import org.simantics.maps.elevation.server.prefs.MapsElevationServerPreferences;
 import org.simantics.modeling.ModelingResources;
 import org.simantics.modeling.adapters.NewCompositeActionFactory;
 import org.simantics.operation.Layer0X;
-import org.simantics.utils.datastructures.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.vividsolutions.jts.geom.Envelope;
+import com.vividsolutions.jts.index.quadtree.Quadtree;
+
 public class DistrictNetworkUtil {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(DistrictNetworkUtil.class);
@@ -402,190 +393,77 @@ public class DistrictNetworkUtil {
         return results;
     }
 
-    public static ColorBarOptions colorBarOptions(ReadGraph graph, Resource visualisation) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        if (visualisation != null) {
-            String colorBarLocation = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ColorBarLocation, Bindings.STRING);
-            String colorBarSize = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ColorBarSize, Bindings.STRING);
-            Boolean show = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ShowColorBars, Bindings.BOOLEAN);
-            Boolean showTicks = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ShowColorBarTicks, Bindings.BOOLEAN);
-            if (colorBarLocation != null) {
-                return new ColorBarOptions()
-                    .showColorBars(show != null ? show : false)
-                    .showColorBarsTicks(showTicks != null ? showTicks : false)
-                    .withLocation(ColorBarsLocation.valueOf(colorBarLocation))
-                    .withSize(ColorBarsSize.valueOf(colorBarSize));
-            }
-        }
-        return ColorBarOptions.useDefault();
-    }
-
-    public static void setColorBarOptions(WriteGraph graph, Resource visualisation, ColorBarOptions options) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ColorBarLocation, options.getLocation().toString(), Bindings.STRING);
-        graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ColorBarSize, options.getSize().toString(), Bindings.STRING);
-        graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ShowColorBars, options.isShowColorBars(), Bindings.BOOLEAN);
-        graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ShowColorBarTicks, options.isShowColorBarsTicks(), Bindings.BOOLEAN);
-    }
-    
-    public static Resource createVisualisation(WriteGraph graph, Resource diagram, String visualisationName) throws DatabaseException {
-        Layer0 L0 = Layer0.getInstance(graph);
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        Resource visualisation = graph.newResource();
-        graph.claim(visualisation, L0.InstanceOf, DN.Diagram_Visualisations);
-        graph.claimLiteral(visualisation, L0.HasName, visualisationName);
-        graph.claim(diagram, DN.Diagram_hasVisualisation, visualisation);
-        return visualisation;
-    }
-
-    public static SizeBarOptions sizeBarOptions(ReadGraph graph, Resource visualisation) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        if (visualisation != null) {
-            String sizeBarLocation = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_SizeBarLocation, Bindings.STRING);
-            String sizeBarSize = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_SizeBarSize, Bindings.STRING);
-            Boolean show = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ShowSizeBars, Bindings.BOOLEAN);
-            Boolean showTicks = graph.getPossibleRelatedValue(visualisation, DN.Diagram_Visualisations_ShowSizeBarTicks, Bindings.BOOLEAN);
-            if (sizeBarLocation != null) {
-                return new SizeBarOptions()
-                    .showSizeBars(show != null ? show : false)
-                    .showSizeBarsTicks(showTicks != null ? showTicks : false)
-                    .withLocation(SizeBarsLocation.valueOf(sizeBarLocation))
-                    .withSize(SizeBarsSize.valueOf(sizeBarSize));
-            }
-        }
-        return SizeBarOptions.useDefault();
-    }
-
-    public static void setSizeBarOptions(WriteGraph graph, Resource visualisation, SizeBarOptions options) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        graph.claimLiteral(visualisation, DN.Diagram_Visualisations_SizeBarLocation, options.getLocation().toString(), Bindings.STRING);
-        graph.claimLiteral(visualisation, DN.Diagram_Visualisations_SizeBarSize, options.getSize().toString(), Bindings.STRING);
-        graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ShowSizeBars, options.isShowSizeBars(), Bindings.BOOLEAN);
-        graph.claimLiteral(visualisation, DN.Diagram_Visualisations_ShowSizeBarTicks, options.isShowSizeBarsTicks(), Bindings.BOOLEAN);
-    }
-
-    public static Map<String, DynamicColorContribution> colorContributions(ReadGraph graph, Resource visualisation) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        if (visualisation == null) {
-            return Collections.emptyMap();
-        }
-        Map<String, DynamicColorContribution> contributions = new HashMap<>();
+    public static List<ResourceVertex> nearbyResourceVertices(ReadGraph graph, Resource diagramResource, Resource vertex, Double padding) throws DatabaseException {
+        double halfPadding = padding / 2;
         
-        Map<String, DynamicColorMap> colorMaps = DynamicVisualisationsContributions.dynamicColorMaps(graph);
+        Quadtree existingVertices = graph.syncRequest(new ExistingVerticesRead(diagramResource, halfPadding), TransientCacheListener.instance());
+        double[] coords = graph.getRelatedValue(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);
         
-        Collection<Resource> colorContributions = graph.getObjects(visualisation, DN.Diagram_Visualisations_colorContributions);
-        for (Resource colorContribution : colorContributions) {
-            String ucName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionContributorName, Bindings.STRING);
-            String label = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionLabel, Bindings.STRING);
-            String moduleName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionModuleName, Bindings.STRING);
-            String attributeName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionModuleAttribute, Bindings.STRING);
-            String unit = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionUnit, Bindings.STRING);
-            Double variableGain = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionVariableGain, Bindings.DOUBLE);
-            Double variableBias = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionVariableBias, Bindings.DOUBLE);
-            String dynamicColorMap = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultColorMap, Bindings.STRING);
-            Double defaultMin = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultMin, Bindings.DOUBLE);
-            Double defaultMax = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultMax, Bindings.DOUBLE);
-            Boolean used = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionUsed, Bindings.BOOLEAN);
-            Boolean useDefault = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_colorContributionUseDefault, Bindings.BOOLEAN);
-            DynamicColorContribution dynamicColorContribution = new DynamicColorContribution(label, moduleName, attributeName, unit, variableGain, variableBias, colorMaps.get(dynamicColorMap), defaultMin, defaultMax);
-            dynamicColorContribution.setUsed(used != null ? used : false);
-            dynamicColorContribution.setUseDefault(useDefault != null ? useDefault : false);
-            contributions.put(ucName, dynamicColorContribution);
-        }
-        return contributions;
-    }
-    
-    public static void setColorContributions(WriteGraph graph, Resource visualisation, List<Pair<String, DynamicColorContribution>> collect) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        Layer0 L0 = Layer0.getInstance(graph);
+        List<?> result = existingVertices.query(e);
+        @SuppressWarnings("unchecked")
+        List<ResourceVertex> vertices = (List<ResourceVertex>) result;
         
-        graph.deny(visualisation, DN.Diagram_Visualisations_colorContributions);
-        for (Pair<String, DynamicColorContribution> coll : collect) {
-            Resource colorContribution = graph.newResource();
-            graph.claim(colorContribution, L0.InstanceOf, DN.Diagram_Visualisations_ColorContribution);
-            graph.claimLiteral(colorContribution, L0.HasName, coll.first);
+        Rectangle2D vertexRectangle = new Rectangle2D.Double(coords[0] - halfPadding, coords[1] - halfPadding, padding, padding);
+        
+        // let's sort by distance
+        List<ResourceVertex> sortedVertices = vertices.stream().filter(rv -> {
+            if (rv.vertex.equals(vertex))
+                return false;
             
-            DynamicColorContribution contr = coll.second;
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionContributorName, coll.first);
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionLabel, contr.getLabel());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionModuleName, contr.getModuleName());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionModuleAttribute, contr.getAttributeName());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionUnit, contr.getUnit());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionVariableGain, contr.getVariableGain());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionVariableBias, contr.getVariableBias());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultColorMap, contr.getDefaultColorMap().getLabel());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultMin, contr.getDefaultMin());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionDefaultMax, contr.getDefaultMax());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionUsed, contr.isUsed());
-            graph.claimLiteral(colorContribution, DN.Diagram_Visualisations_colorContributionUseDefault, contr.isUseDefault());
+            Rectangle2D nearbyRectangle = new Rectangle2D.Double(rv.coords[0] - halfPadding, rv.coords[1] - halfPadding, padding, padding);
+            return vertexRectangle.intersects(nearbyRectangle);
+        }).sorted((o1, o2) -> {
+            double disto1 = Math.sqrt((Math.pow(coords[0] - o1.coords[0], 2) + (Math.pow(coords[1] - o1.coords[1], 2))));
+            double disto2 = Math.sqrt((Math.pow(coords[0] - o2.coords[0], 2) + (Math.pow(coords[1] - o2.coords[1], 2))));
             
-            graph.claim(visualisation, DN.Diagram_Visualisations_colorContributions, colorContribution);
-        }
+            if (o1.vertex.getResourceId() == 2554883) {
+                System.err.println("here we are");
+            }
+            
+            return Double.compare(disto1, disto2);
+        }).collect(Collectors.toList());
+        return sortedVertices;
     }
 
-    public static Map<String, DynamicSizeContribution> sizeContributions(ReadGraph graph, Resource visualisation) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        if (visualisation == null) {
-            return Collections.emptyMap();
-        }
-        Map<String, DynamicSizeContribution> contributions = new HashMap<>();
-        
-        Map<String, DynamicSizeMap> sizeMaps = DynamicVisualisationsContributions.dynamicSizeMaps(graph);
-        
-        Collection<Resource> colorContributions = graph.getObjects(visualisation, DN.Diagram_Visualisations_sizeContributions);
-        for (Resource colorContribution : colorContributions) {
-            String ucName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionContributorName, Bindings.STRING);
-            String label = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionLabel, Bindings.STRING);
-            String moduleName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionModuleName, Bindings.STRING);
-            String attributeName = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionModuleAttribute, Bindings.STRING);
-            String unit = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionUnit, Bindings.STRING);
-            Double variableGain = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionVariableGain, Bindings.DOUBLE);
-            Double variableBias = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionVariableBias, Bindings.DOUBLE);
-            String dynamicSizeMap = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionDefaultSizeMap, Bindings.STRING);
-            Double defaultMin = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionDefaultMin, Bindings.DOUBLE);
-            Double defaultMax = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionDefaultMax, Bindings.DOUBLE);
-            Boolean used = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionUsed, Bindings.BOOLEAN);
-            Boolean useDefault = graph.getRelatedValue(colorContribution, DN.Diagram_Visualisations_sizeContributionUseDefault, Bindings.BOOLEAN);
-            DynamicSizeContribution dsc = new DynamicSizeContribution(label, moduleName, attributeName, unit, variableGain, variableBias, sizeMaps.get(dynamicSizeMap), defaultMin, defaultMax);
-            dsc.setUsed(used != null ? used : false);
-            dsc.setUseDefault(useDefault != null ? useDefault : false);
-            contributions.put(ucName, dsc);
-        }
-        return contributions;
+    public static List<Resource> nearbyVertices(ReadGraph graph, Resource vertex, double padding) throws DatabaseException {
+        Resource diagramResource = graph.getSingleObject(vertex, Layer0.getInstance(graph).PartOf);
+        return nearbyResourceVertices(graph, diagramResource, vertex, padding)
+                .stream()
+                .map(rv -> rv.vertex)
+                .collect(Collectors.toList());
     }
-    
-    public static void setSizeContributions(WriteGraph graph, Resource visualisation, List<Pair<String, DynamicSizeContribution>> collect) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        Layer0 L0 = Layer0.getInstance(graph);
 
-        graph.deny(visualisation, DN.Diagram_Visualisations_sizeContributions);
-        for (Pair<String, DynamicSizeContribution> coll : collect) {
-            Resource sizeContribution = graph.newResource();
-            graph.claim(sizeContribution, L0.InstanceOf, DN.Diagram_Visualisations_SizeContribution);
-            graph.claimLiteral(sizeContribution, L0.HasName, coll.first);
-            
-            DynamicSizeContribution contr = coll.second;
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionContributorName, coll.first);
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionLabel, contr.getLabel());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionModuleName, contr.getModuleName());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionModuleAttribute, contr.getAttributeName());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionUnit, contr.getUnit());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionVariableGain, contr.getVariableGain());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionVariableBias, contr.getVariableBias());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionDefaultSizeMap, contr.getDefaultSizeMap().getLabel());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionDefaultMin, contr.getDefaultMin());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionDefaultMax, contr.getDefaultMax());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionUsed, contr.isUsed());
-            graph.claimLiteral(sizeContribution, DN.Diagram_Visualisations_sizeContributionUseDefault, contr.isUseDefault());
-            
-            graph.claim(visualisation, DN.Diagram_Visualisations_sizeContributions, sizeContribution);
-        }
+    public static Quadtree existingVertices(Resource diagramResource, Double padding) throws DatabaseException {
+        Quadtree vv = Simantics.getSession().syncRequest(new ExistingVerticesRead(diagramResource, padding));
+        return vv;
     }
 
-    public static void setActiveVisualisation(WriteGraph graph, Resource diagram, Resource visualisationTemplate) throws DatabaseException {
-        DistrictNetworkResource DN = DistrictNetworkResource.getInstance(graph);
-        graph.deny(diagram, DN.Diagram_hasActiveVisualisation);
-        graph.claim(diagram, DN.Diagram_hasActiveVisualisation, visualisationTemplate);
+    public static class ExistingVerticesRead extends BinaryRead<Resource, Double, Quadtree> {
+
+        public ExistingVerticesRead(Resource diagramResource, Double padding) {
+            super(diagramResource, padding);
+        }
+
+        @Override
+        public Quadtree perform(ReadGraph graph) throws DatabaseException {
+            Collection<Resource> vertices = graph.syncRequest(new ObjectsWithType(parameter, 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] - parameter2;
+                double y1= coords[1] - parameter2;
+                double x2 = coords[0] + parameter2;
+                double y2= coords[1] + parameter2;
+                Envelope e = new Envelope(x1, x2, y1, y2);
+                vv.insert(e, new ResourceVertex(vertex, coords, true));
+            }
+            return vv;
+        }
     }
 
 }