]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/DNEdgeBuilder.java
Implement district features to Simantics platform
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / DNEdgeBuilder.java
index 475269f8aa8e12c607d486135042ff546d4547a5..b9b73e542308882d51f0b2c0c925bcedd128f5c6 100644 (file)
@@ -3,17 +3,31 @@ package org.simantics.district.network.ui;
 import org.simantics.db.Resource;\r
 import org.simantics.db.WriteGraph;\r
 import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.exception.ServiceException;\r
 import org.simantics.db.layer0.util.Layer0Utils;\r
+import org.simantics.diagram.synchronization.IModifiableSynchronizationContext;\r
+import org.simantics.diagram.synchronization.SynchronizationHints;\r
 import org.simantics.diagram.synchronization.graph.AddElement;\r
+import org.simantics.diagram.synchronization.graph.GraphSynchronizationHints;\r
+import org.simantics.diagram.synchronization.graph.layer.GraphLayer;\r
+import org.simantics.diagram.synchronization.graph.layer.GraphLayerManager;\r
+import org.simantics.diagram.ui.DiagramModelHints;\r
 import org.simantics.district.network.DistrictNetworkUtil;\r
 import org.simantics.district.network.ontology.DistrictNetworkResource;\r
+import org.simantics.g2d.diagram.IDiagram;\r
 \r
 public class DNEdgeBuilder {\r
     \r
     private Resource diagramResource;\r
+    private IDiagram diagram;\r
+    private GraphLayerManager glm;\r
 \r
-    public DNEdgeBuilder(Resource diagramResource) {\r
+    public DNEdgeBuilder(Resource diagramResource, IDiagram diagram) {\r
         this.diagramResource = diagramResource;\r
+        this.diagram = diagram;\r
+        \r
+        IModifiableSynchronizationContext context = diagram.getHint(SynchronizationHints.CONTEXT);\r
+        glm = context.get(GraphSynchronizationHints.GRAPH_LAYER_MANAGER);\r
     }\r
 \r
     public void create(WriteGraph graph, double[] start, double[] end) throws DatabaseException {\r
@@ -33,9 +47,21 @@ public class DNEdgeBuilder {
         graph.claim(edge, DN.HasStartVertex, startVertex);\r
         graph.claim(edge, DN.HasEndVertex, endVertex);\r
         \r
+        // 7. Put the element on all the currently active layers if possible.\r
+        if (glm != null) {\r
+            putOnActiveLayer(graph, edge);\r
+            putOnActiveLayer(graph, startVertex);\r
+            putOnActiveLayer(graph, endVertex);\r
+        }\r
+        \r
         Layer0Utils.addCommentMetadata(graph, "Added edge " + edge);\r
         graph.markUndoPoint();\r
     }\r
+    \r
+    private void putOnActiveLayer(WriteGraph graph, Resource res) throws DatabaseException {\r
+        glm.removeFromAllLayers(graph, res);\r
+        glm.putElementOnVisibleLayers(diagram, graph, res);\r
+    }\r
 \r
     private Resource getOrCreateVertex(WriteGraph graph, double[] coords) throws DatabaseException {\r
         // TODO: check if vertex exists already, for now create always new\r