]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.simulation/src/org/simantics/simulation/experiment/ExperimentUtil.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.simulation / src / org / simantics / simulation / experiment / ExperimentUtil.java
index dcd3e6c4f92197d46af78100be8d4e66ea66d666..24f6065c5117a6e6660d336edfeefa3c56f43593 100644 (file)
-package org.simantics.simulation.experiment;\r
-\r
-import java.util.Collection;\r
-import java.util.UUID;\r
-import java.util.function.Consumer;\r
-\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.eclipse.core.runtime.IStatus;\r
-import org.eclipse.core.runtime.Status;\r
-import org.eclipse.core.runtime.jobs.Job;\r
-import org.eclipse.ui.progress.IProgressConstants2;\r
-import org.simantics.DatabaseJob;\r
-import org.simantics.Simantics;\r
-import org.simantics.databoard.Bindings;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.RequestProcessor;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.procedure.adapter.ProcedureAdapter;\r
-import org.simantics.db.common.request.ObjectsWithType;\r
-import org.simantics.db.common.request.WriteRequest;\r
-import org.simantics.db.common.request.WriteResultRequest;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.request.PossibleActiveExperiment;\r
-import org.simantics.db.layer0.request.PossibleActiveRun;\r
-import org.simantics.db.layer0.variable.Variable;\r
-import org.simantics.db.procedure.Procedure;\r
-import org.simantics.db.service.VirtualGraphSupport;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.project.IProject;\r
-import org.simantics.simulation.ontology.SimulationResource;\r
-import org.simantics.simulation.project.IExperimentManager;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public final class ExperimentUtil {\r
-\r
-    public static void stepExperiment(IExperiment experiment, double duration) {\r
-        if(experiment instanceof IDynamicExperiment)\r
-            ((IDynamicExperiment)experiment).simulateDuration(duration);\r
-    }\r
-\r
-    public static void simulateExperiment(IExperiment experiment, boolean enabled) {\r
-        if(experiment instanceof IDynamicExperiment)\r
-            ((IDynamicExperiment)experiment).simulate(enabled);\r
-    }\r
-\r
-    public static void disposeExperiment(final IExperiment experiment) {\r
-       \r
-        if(experiment instanceof IDynamicExperiment) {\r
-               \r
-            ((IDynamicExperiment)experiment).shutdown(null);\r
-            \r
-            Session session = Simantics.getSession();\r
-                       VirtualGraphSupport vgs = session.getService(VirtualGraphSupport.class);\r
-                       session.asyncRequest(new WriteRequest(vgs.getMemoryPersistent("experiments")) {\r
-\r
-                               @Override\r
-                               public void perform(WriteGraph graph) throws DatabaseException {\r
-\r
-                                       SimulationResource SIMU = SimulationResource.getInstance(graph);\r
-                                       Resource activeRun = experiment.getResource();\r
-                                       graph.deny(activeRun, SIMU.IsActive, activeRun);\r
-\r
-                               }\r
-\r
-                       });\r
-\r
-        }\r
-        \r
-    }\r
-\r
-    public static void step(double duration) {\r
-        IExperimentManager manager = \r
-            Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);\r
-        IExperiment experiment = manager.getActiveExperiment();\r
-        if(experiment instanceof IDynamicExperiment)\r
-            ((IDynamicExperiment)experiment).simulateDuration(duration);\r
-    }\r
-\r
-    public static void simulate(boolean enabled) {\r
-        IExperimentManager manager =\r
-            Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);\r
-        IExperiment experiment = manager.getActiveExperiment();\r
-        if(experiment instanceof IDynamicExperiment)\r
-            ((IDynamicExperiment)experiment).simulate(enabled);\r
-    }\r
-\r
-    /**\r
-     * Synchronously shutdown active experiment.\r
-     * \r
-     * @param project\r
-     */\r
-    public static void shutdownActiveExperiment(IProject project) {\r
-        shutdownActiveExperiment(project, null);\r
-    }\r
-\r
-    /**\r
-     * Synchronously shutdown active experiment.\r
-     * \r
-     * @param project\r
-     */\r
-    public static void shutdownActiveExperiment(IProject project, IProgressMonitor monitor) {\r
-        IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);\r
-        IExperiment experiment = manager.getActiveExperiment();\r
-        if (experiment != null)\r
-            experiment.shutdown(monitor);\r
-    }\r
-\r
-    /**\r
-     * If there is an active experiment, schedule a job for its shutdown.\r
-     * \r
-     * @param project\r
-     */\r
-    public static void scheduleShutdownActiveExperiment(IProject project) {\r
-        scheduleShutdownActiveExperiment(project, null);\r
-    }\r
-\r
-    /**\r
-     * If there is an active experiment, schedule a job for its shutdown.\r
-     * \r
-     * @param project\r
-     */\r
-    public static void scheduleShutdownActiveExperiment(IProject project, Consumer<IExperiment> callback) {\r
-        IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);\r
-        final IExperiment experiment = manager.getActiveExperiment();\r
-        if (experiment != null) {\r
-            Job job = new DatabaseJob("Shutting down experiment") {\r
-                @Override\r
-                protected IStatus run(final IProgressMonitor monitor) {\r
-                    try {\r
-                        experiment.shutdown(monitor);\r
-                        if (callback != null)\r
-                            callback.accept(null);\r
-                        return Status.OK_STATUS;\r
-                    } finally {\r
-                        monitor.done();\r
-                    }\r
-                }\r
-            };\r
-            job.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);\r
-            job.setUser(true);\r
-            job.schedule();\r
-        }\r
-    }\r
-\r
-    public static Variable possibleActiveRunVariable(ReadGraph graph, Resource model) throws DatabaseException {\r
-       return graph.syncRequest(new PossibleActiveRun(model));\r
-    }\r
-\r
-    /**\r
-     * @param processor\r
-     * @param experiment\r
-     * @param asyncCallback\r
-     * @return\r
-     * @throws DatabaseException\r
-     */\r
-    public static Resource activateExperiment(RequestProcessor processor, Resource experiment, Procedure<Resource> asyncCallback) throws DatabaseException {\r
-        VirtualGraphSupport vgs = processor.getService(VirtualGraphSupport.class);\r
-        WriteResultRequest<Resource> w = new WriteResultRequest<Resource>(vgs.getMemoryPersistent("experiments")) {\r
-            @Override\r
-            public Resource perform(WriteGraph graph) throws DatabaseException {\r
-                return activateExperiment(graph, experiment);\r
-            }\r
-        };\r
-        if (processor instanceof WriteGraph) {\r
-            return ((WriteGraph) processor).syncRequest(w);\r
-        } else {\r
-            if (asyncCallback == null)\r
-                asyncCallback = new ProcedureAdapter<>();\r
-            processor.getSession().asyncRequest(w, asyncCallback);\r
-            return null;\r
-        }\r
-    }\r
-\r
-    /**\r
-     * @param processor\r
-     * @param run\r
-     * @throws DatabaseException\r
-     */\r
-    public static void activateRun(RequestProcessor processor, Resource run) throws DatabaseException {\r
-        VirtualGraphSupport vgs = processor.getService(VirtualGraphSupport.class);\r
-        WriteRequest w = new WriteRequest(vgs.getMemoryPersistent("experiments")) {\r
-            @Override\r
-            public void perform(WriteGraph graph) throws DatabaseException {\r
-                ExperimentUtil.activateRun(graph, run);\r
-            }\r
-        };\r
-        if (processor instanceof WriteGraph) {\r
-            ((WriteGraph) processor).syncRequest(w);\r
-        } else {\r
-            processor.getSession().asyncRequest(w);\r
-        }\r
-    }\r
-\r
-    private static Resource activateExperiment(WriteGraph graph, Resource experiment) throws DatabaseException {\r
-        Layer0 L0 = Layer0.getInstance(graph);\r
-        SimulationResource SIMU = SimulationResource.getInstance(graph);\r
-\r
-        Resource experimentType = graph.getPossibleType(experiment, SIMU.Experiment);\r
-        if (experimentType == null)\r
-            throw new DatabaseException("No unique experiment type was found for experiment " + graph.getPossibleURI(experiment));\r
-        Collection<Resource> runTypes = graph.sync(new ObjectsWithType(experimentType, L0.ConsistsOf, SIMU.RunType));\r
-        if (runTypes.size() != 1)\r
-            throw new DatabaseException("No unique run type was found for experiment " + graph.getPossibleURI(experiment));\r
-        final Resource runType = runTypes.iterator().next();\r
-\r
-        VirtualGraphSupport vgs = graph.getService(VirtualGraphSupport.class);\r
-        return graph.syncRequest(new WriteResultRequest<Resource>(vgs.getMemoryPersistent("experiments")) {\r
-            @Override\r
-            public Resource perform(WriteGraph graph) throws DatabaseException {\r
-                Layer0 L0 = Layer0.getInstance(graph);\r
-                Resource run = graph.newResource();\r
-                graph.claim(run, L0.InstanceOf, runType);\r
-                graph.addLiteral(run, L0.HasName, L0.NameOf, L0.String, UUID.randomUUID().toString(), Bindings.STRING);\r
-                graph.claim(experiment, L0.ConsistsOf, run);\r
-\r
-                Resource activeRun = graph.syncRequest(new PossibleActiveExperiment(experiment));\r
-                if (activeRun != null) {\r
-                    graph.deny(activeRun, SIMU.IsActive, activeRun);\r
-                }\r
-                graph.claim(run, SIMU.IsActive, run);\r
-\r
-                return run;\r
-            }\r
-        });\r
-    }\r
-\r
-    private static void activateRun(WriteGraph graph, Resource run) throws DatabaseException {\r
-        SimulationResource SIMU = SimulationResource.getInstance(graph);\r
-        Resource activeRun = graph.syncRequest(new PossibleActiveExperiment(run));\r
-        if (activeRun != null) {\r
-            graph.deny(activeRun, SIMU.IsActive, activeRun);\r
-        }\r
-        graph.claim(run, SIMU.IsActive, run);\r
-    }\r
-\r
-}\r
+package org.simantics.simulation.experiment;
+
+import java.util.Collection;
+import java.util.UUID;
+import java.util.function.Consumer;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.ui.progress.IProgressConstants2;
+import org.simantics.DatabaseJob;
+import org.simantics.Simantics;
+import org.simantics.databoard.Bindings;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.RequestProcessor;
+import org.simantics.db.Resource;
+import org.simantics.db.Session;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.procedure.adapter.ProcedureAdapter;
+import org.simantics.db.common.request.ObjectsWithType;
+import org.simantics.db.common.request.WriteRequest;
+import org.simantics.db.common.request.WriteResultRequest;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.request.PossibleActiveExperiment;
+import org.simantics.db.layer0.request.PossibleActiveRun;
+import org.simantics.db.layer0.variable.Variable;
+import org.simantics.db.procedure.Procedure;
+import org.simantics.db.service.VirtualGraphSupport;
+import org.simantics.layer0.Layer0;
+import org.simantics.project.IProject;
+import org.simantics.simulation.ontology.SimulationResource;
+import org.simantics.simulation.project.IExperimentManager;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public final class ExperimentUtil {
+
+    public static void stepExperiment(IExperiment experiment, double duration) {
+        if(experiment instanceof IDynamicExperiment)
+            ((IDynamicExperiment)experiment).simulateDuration(duration);
+    }
+
+    public static void simulateExperiment(IExperiment experiment, boolean enabled) {
+        if(experiment instanceof IDynamicExperiment)
+            ((IDynamicExperiment)experiment).simulate(enabled);
+    }
+
+    public static void disposeExperiment(final IExperiment experiment) {
+       
+        if(experiment instanceof IDynamicExperiment) {
+               
+            ((IDynamicExperiment)experiment).shutdown(null);
+            
+            Session session = Simantics.getSession();
+                       VirtualGraphSupport vgs = session.getService(VirtualGraphSupport.class);
+                       session.asyncRequest(new WriteRequest(vgs.getMemoryPersistent("experiments")) {
+
+                               @Override
+                               public void perform(WriteGraph graph) throws DatabaseException {
+
+                                       SimulationResource SIMU = SimulationResource.getInstance(graph);
+                                       Resource activeRun = experiment.getResource();
+                                       graph.deny(activeRun, SIMU.IsActive, activeRun);
+
+                               }
+
+                       });
+
+        }
+        
+    }
+
+    public static void step(double duration) {
+        IExperimentManager manager = 
+            Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
+        IExperiment experiment = manager.getActiveExperiment();
+        if(experiment instanceof IDynamicExperiment)
+            ((IDynamicExperiment)experiment).simulateDuration(duration);
+    }
+
+    public static void simulate(boolean enabled) {
+        IExperimentManager manager =
+            Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
+        IExperiment experiment = manager.getActiveExperiment();
+        if(experiment instanceof IDynamicExperiment)
+            ((IDynamicExperiment)experiment).simulate(enabled);
+    }
+
+    /**
+     * Synchronously shutdown active experiment.
+     * 
+     * @param project
+     */
+    public static void shutdownActiveExperiment(IProject project) {
+        shutdownActiveExperiment(project, null);
+    }
+
+    /**
+     * Synchronously shutdown active experiment.
+     * 
+     * @param project
+     */
+    public static void shutdownActiveExperiment(IProject project, IProgressMonitor monitor) {
+        IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
+        IExperiment experiment = manager.getActiveExperiment();
+        if (experiment != null)
+            experiment.shutdown(monitor);
+    }
+
+    /**
+     * If there is an active experiment, schedule a job for its shutdown.
+     * 
+     * @param project
+     */
+    public static void scheduleShutdownActiveExperiment(IProject project) {
+        scheduleShutdownActiveExperiment(project, null);
+    }
+
+    /**
+     * If there is an active experiment, schedule a job for its shutdown.
+     * 
+     * @param project
+     */
+    public static void scheduleShutdownActiveExperiment(IProject project, Consumer<IExperiment> callback) {
+        IExperimentManager manager = project.getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
+        final IExperiment experiment = manager.getActiveExperiment();
+        if (experiment != null) {
+            Job job = new DatabaseJob("Shutting down experiment") {
+                @Override
+                protected IStatus run(final IProgressMonitor monitor) {
+                    try {
+                        experiment.shutdown(monitor);
+                        if (callback != null)
+                            callback.accept(null);
+                        return Status.OK_STATUS;
+                    } finally {
+                        monitor.done();
+                    }
+                }
+            };
+            job.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);
+            job.setUser(true);
+            job.schedule();
+        }
+    }
+
+    public static Variable possibleActiveRunVariable(ReadGraph graph, Resource model) throws DatabaseException {
+       return graph.syncRequest(new PossibleActiveRun(model));
+    }
+
+    /**
+     * @param processor
+     * @param experiment
+     * @param asyncCallback
+     * @return
+     * @throws DatabaseException
+     */
+    public static Resource activateExperiment(RequestProcessor processor, Resource experiment, Procedure<Resource> asyncCallback) throws DatabaseException {
+        VirtualGraphSupport vgs = processor.getService(VirtualGraphSupport.class);
+        WriteResultRequest<Resource> w = new WriteResultRequest<Resource>(vgs.getMemoryPersistent("experiments")) {
+            @Override
+            public Resource perform(WriteGraph graph) throws DatabaseException {
+                return activateExperiment(graph, experiment);
+            }
+        };
+        if (processor instanceof WriteGraph) {
+            return ((WriteGraph) processor).syncRequest(w);
+        } else {
+            if (asyncCallback == null)
+                asyncCallback = new ProcedureAdapter<>();
+            processor.getSession().asyncRequest(w, asyncCallback);
+            return null;
+        }
+    }
+
+    /**
+     * @param processor
+     * @param run
+     * @throws DatabaseException
+     */
+    public static void activateRun(RequestProcessor processor, Resource run) throws DatabaseException {
+        VirtualGraphSupport vgs = processor.getService(VirtualGraphSupport.class);
+        WriteRequest w = new WriteRequest(vgs.getMemoryPersistent("experiments")) {
+            @Override
+            public void perform(WriteGraph graph) throws DatabaseException {
+                ExperimentUtil.activateRun(graph, run);
+            }
+        };
+        if (processor instanceof WriteGraph) {
+            ((WriteGraph) processor).syncRequest(w);
+        } else {
+            processor.getSession().asyncRequest(w);
+        }
+    }
+
+    private static Resource activateExperiment(WriteGraph graph, Resource experiment) throws DatabaseException {
+        Layer0 L0 = Layer0.getInstance(graph);
+        SimulationResource SIMU = SimulationResource.getInstance(graph);
+
+        Resource experimentType = graph.getPossibleType(experiment, SIMU.Experiment);
+        if (experimentType == null)
+            throw new DatabaseException("No unique experiment type was found for experiment " + graph.getPossibleURI(experiment));
+        Collection<Resource> runTypes = graph.sync(new ObjectsWithType(experimentType, L0.ConsistsOf, SIMU.RunType));
+        if (runTypes.size() != 1)
+            throw new DatabaseException("No unique run type was found for experiment " + graph.getPossibleURI(experiment));
+        final Resource runType = runTypes.iterator().next();
+
+        VirtualGraphSupport vgs = graph.getService(VirtualGraphSupport.class);
+        return graph.syncRequest(new WriteResultRequest<Resource>(vgs.getMemoryPersistent("experiments")) {
+            @Override
+            public Resource perform(WriteGraph graph) throws DatabaseException {
+                Layer0 L0 = Layer0.getInstance(graph);
+                Resource run = graph.newResource();
+                graph.claim(run, L0.InstanceOf, runType);
+                graph.addLiteral(run, L0.HasName, L0.NameOf, L0.String, UUID.randomUUID().toString(), Bindings.STRING);
+                graph.claim(experiment, L0.ConsistsOf, run);
+
+                Resource activeRun = graph.syncRequest(new PossibleActiveExperiment(experiment));
+                if (activeRun != null) {
+                    graph.deny(activeRun, SIMU.IsActive, activeRun);
+                }
+                graph.claim(run, SIMU.IsActive, run);
+
+                return run;
+            }
+        });
+    }
+
+    private static void activateRun(WriteGraph graph, Resource run) throws DatabaseException {
+        SimulationResource SIMU = SimulationResource.getInstance(graph);
+        Resource activeRun = graph.syncRequest(new PossibleActiveExperiment(run));
+        if (activeRun != null) {
+            graph.deny(activeRun, SIMU.IsActive, activeRun);
+        }
+        graph.claim(run, SIMU.IsActive, run);
+    }
+
+}