]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/adapter/EdgeRequest.java
Diagram loading concurrency problem with Sysdyn
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / adapter / EdgeRequest.java
index 651228ce1d7756f10516430c6bbc8c71d355cece..826827f768c3cf4a4b06578c72fe2537d9f6c23b 100644 (file)
@@ -16,6 +16,7 @@ import org.simantics.db.common.procedure.adapter.ListenerSupport;
 import org.simantics.db.common.procedure.adapter.TransientCacheAsyncListener;
 import org.simantics.db.procedure.AsyncProcedure;
 import org.simantics.diagram.content.EdgeResource;
+import org.simantics.diagram.internal.DebugPolicy;
 import org.simantics.diagram.stubs.DiagramResource;
 import org.simantics.diagram.synchronization.ErrorHandler;
 import org.simantics.g2d.canvas.ICanvasContext;
@@ -30,16 +31,19 @@ import org.simantics.g2d.element.impl.Element;
  */
 public class EdgeRequest extends BaseRequest2<EdgeResource, IElement> {
 
+    final GraphToDiagramSynchronizer synchronizer;
     final ErrorHandler errorHandler;
     final ListenerSupport listenerSupport;
     final IDiagram diagram;
     final ConnectionSegmentAdapter adapter;
 
-    public EdgeRequest(ICanvasContext canvas, ErrorHandler errorHandler, ListenerSupport listenerSupport, IDiagram diagram, ConnectionSegmentAdapter adapter, EdgeResource resource) {
+    public EdgeRequest(GraphToDiagramSynchronizer synchronizer, ICanvasContext canvas, ErrorHandler errorHandler, ListenerSupport listenerSupport, IDiagram diagram, ConnectionSegmentAdapter adapter, EdgeResource resource) {
         super(canvas, resource);
 
         assert(adapter != null);
+        assert(synchronizer != null);
 
+        this.synchronizer = synchronizer;
         this.errorHandler = errorHandler;
         this.listenerSupport = listenerSupport;
         this.diagram = diagram;
@@ -96,6 +100,13 @@ public class EdgeRequest extends BaseRequest2<EdgeResource, IElement> {
 
                                     @Override
                                     public void execute(AsyncReadGraph graph, IElement element) {
+                                        
+                                        if (DebugPolicy.DEBUG_EDGE_LOAD)
+                                            System.out.println("    SPAWNED EDGE SEGMENT: " + element + " " + data);
+
+                                        // Register this for updates to work correctly
+                                        synchronizer.mapElementIfNew(data, element);
+                                        
 //                                        task.finish();
                                         // Tell the procedure to use this element
                                         procedure.execute(graph, element);