]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/elements/DiagramNodeUtil.java
Support selection of experiment run for scene graph provider
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / elements / DiagramNodeUtil.java
index 893573d0f057841e769e73f7216b22e48b2ba923..671c317ec4a6624f13f86d48b89e242278efc72c 100644 (file)
@@ -13,7 +13,9 @@ import org.simantics.db.common.request.Queries;
 import org.simantics.db.common.request.ResourceRead;
 import org.simantics.db.common.request.WriteRequest;
 import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.variable.Variable;
 import org.simantics.db.request.Read;
+import org.simantics.db.service.TransactionSupport;
 import org.simantics.db.service.VirtualGraphSupport;
 import org.simantics.diagram.stubs.DiagramResource;
 import org.simantics.diagram.ui.DiagramModelHints;
@@ -25,6 +27,7 @@ import org.simantics.g2d.diagram.handler.DataElementMap;
 import org.simantics.g2d.element.ElementHints;
 import org.simantics.g2d.element.IElement;
 import org.simantics.g2d.scenegraph.ICanvasSceneGraphProvider;
+import org.simantics.g2d.scenegraph.ICanvasSceneGraphProvider2;
 import org.simantics.modeling.ModelingResources;
 import org.simantics.scenegraph.INode;
 import org.simantics.scenegraph.adapters.ISceneGraphProvider;
@@ -116,7 +119,7 @@ public class DiagramNodeUtil {
         };
     }
 
-    public static ICanvasSceneGraphProvider loadSceneGraphProvider(Resource model, Resource diagram, String diagramRVI) throws DatabaseException, InterruptedException {
+    public static ICanvasSceneGraphProvider loadSceneGraphProvider(Resource model, Resource diagram, String diagramRVI) throws DatabaseException {
         Resource composite = Simantics.getSession().syncRequest( diagramToComposite(diagram) );
         return loadSceneGraphProviderForComposite(model, composite, diagramRVI);
     }
@@ -146,33 +149,19 @@ public class DiagramNodeUtil {
         G2DSceneGraph sg = provider.initializeSceneGraph(new G2DSceneGraph(), modelURI, diagramRVI);
 
         NodeUtil.waitPending(cp.getCanvasContext().getThreadAccess(), sg);
+        Simantics.getSession().getService(TransactionSupport.class).waitCompletion();
 
         return cp.getCanvasContext();
     }
 
-    /**
-     * @deprecated this leaks ICanvasSceneGraphProvider, use
-     *             {@link #loadSceneGraphProvider(ICanvasContext, Resource, Resource, String)}
-     *             instead
-     */
-    public static ICanvasContext loadDiagram(ICanvasContext context, Resource model, Resource composite, String diagramRVI) throws DatabaseException, InterruptedException {
-        String modelURI = Simantics.getSession().syncRequest(Queries.uri(model));
-        ISceneGraphProvider provider = Simantics.getSession().syncRequest( Queries.adapt( composite, ISceneGraphProvider.class ) );
-        ICanvasSceneGraphProvider cp = (ICanvasSceneGraphProvider) provider;
-        cp.initializeSceneGraph(context, modelURI, diagramRVI);
-
-        NodeUtil.waitPending(cp.getCanvasContext().getThreadAccess(), context.getSceneGraph());
-
-        return cp.getCanvasContext();
-    }
-
-    public static ICanvasSceneGraphProvider loadSceneGraphProviderForComposite(Resource model, Resource composite, String diagramRVI) throws DatabaseException, InterruptedException {
+    public static ICanvasSceneGraphProvider loadSceneGraphProviderForComposite(Resource model, Resource composite, String diagramRVI) throws DatabaseException {
         String modelURI = Simantics.getSession().syncRequest(Queries.uri(model));
         ISceneGraphProvider provider = Simantics.getSession().syncRequest( Queries.adapt( composite, ISceneGraphProvider.class ) );
         ICanvasSceneGraphProvider cp = (ICanvasSceneGraphProvider) provider;
         G2DSceneGraph sg = cp.initializeSceneGraph(new G2DSceneGraph(), modelURI, diagramRVI);
 
         NodeUtil.waitPending(cp.getCanvasContext().getThreadAccess(), sg);
+        Simantics.getSession().getService(TransactionSupport.class).waitCompletion();
 
         return cp;
     }
@@ -188,15 +177,26 @@ public class DiagramNodeUtil {
         ICanvasSceneGraphProvider cp = (ICanvasSceneGraphProvider) provider;
         cp.initializeSceneGraph(context, modelURI, diagramRVI);
         NodeUtil.waitPending(cp.getCanvasContext().getThreadAccess(), context.getSceneGraph(), timeoutMs);
+        Simantics.getSession().getService(TransactionSupport.class).waitCompletion();
         return cp;
     }
 
     public static ICanvasSceneGraphProvider loadSceneGraphProviderForDiagram(ICanvasContext context, Resource model, Resource diagram, String diagramRVI) throws DatabaseException, InterruptedException {
+        return loadSceneGraphProviderForDiagram(context, model, diagram, diagramRVI, null);
+    }
+
+    public static ICanvasSceneGraphProvider loadSceneGraphProviderForDiagram(ICanvasContext context, Resource model, Resource diagram, String diagramRVI, Variable run) throws DatabaseException, InterruptedException {
         String modelURI = Simantics.getSession().syncRequest(Queries.uri(model));
         ISceneGraphProvider provider = Simantics.getSession().syncRequest( Queries.adapt( diagram, ISceneGraphProvider.class ) );
         ICanvasSceneGraphProvider cp = (ICanvasSceneGraphProvider) provider;
-        cp.initializeSceneGraph(context, modelURI, diagramRVI);
+        if(cp instanceof ICanvasSceneGraphProvider2) {
+            ((ICanvasSceneGraphProvider2)cp).initializeSceneGraph(context, modelURI, diagramRVI, run);
+            
+        } else {
+            cp.initializeSceneGraph(context, modelURI, diagramRVI);
+        }
         NodeUtil.waitPending(cp.getCanvasContext().getThreadAccess(), context.getSceneGraph());
+        Simantics.getSession().getService(TransactionSupport.class).waitCompletion();
         return cp;
     }