*/
public final class ExperimentUtil {
+ public static void refreshExperiment(ReadGraph graph, IExperiment experiment) {
+ experiment.refresh(graph);
+ }
+
public static void stepExperiment(IExperiment experiment, double duration) {
if(experiment instanceof IDynamicExperiment)
((IDynamicExperiment)experiment).simulateDuration(duration);
((IDynamicExperiment)experiment).simulateDuration(duration);
}
+ public static boolean canStepUntil(double endTime) {
+ IExperimentManager manager =
+ Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
+ IExperiment experiment = manager.getActiveExperiment();
+ if (experiment instanceof IDynamicExperiment) {
+ IDynamicExperiment exp = (IDynamicExperiment) experiment;
+ double currentTime = exp.getSimulationTime();
+ return currentTime < endTime;
+ }
+ return false;
+ }
+
+ public static void stepUntil(double endTime) {
+ IExperimentManager manager =
+ Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
+ IExperiment experiment = manager.getActiveExperiment();
+ if (experiment instanceof IDynamicExperiment) {
+ IDynamicExperiment exp = (IDynamicExperiment) experiment;
+ double currentTime = exp.getSimulationTime();
+ if (currentTime < endTime) {
+ exp.simulateDuration(endTime - currentTime);
+ }
+ }
+ }
+
public static void simulate(boolean enabled) {
IExperimentManager manager =
Simantics.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER);
protected IStatus run(final IProgressMonitor monitor) {
try {
experiment.shutdown(monitor);
- if (callback != null)
- callback.accept(null);
return Status.OK_STATUS;
} finally {
monitor.done();
+ if (callback != null)
+ callback.accept(null);
}
}
};
job.setProperty(IProgressConstants2.SHOW_IN_TASKBAR_ICON_PROPERTY, Boolean.TRUE);
job.setUser(true);
job.schedule();
+ } else {
+ if (callback != null)
+ callback.accept(null);
}
}
}
}
- private static Resource activateExperiment(WriteGraph graph, Resource experiment) throws DatabaseException {
+ public static Resource activateExperiment(WriteGraph graph, Resource experiment) throws DatabaseException {
+
+ VirtualGraphSupport vgs = graph.getService(VirtualGraphSupport.class);
+ return graph.syncRequest(new WriteResultRequest<Resource>(vgs.getMemoryPersistent("experiments")) {
+ @Override
+ public Resource perform(WriteGraph graph) throws DatabaseException {
+ return createExperimentRun(graph, experiment);
+ }
+ });
+
+ }
+
+ public static Resource createExperimentRun(WriteGraph graph, Resource experiment) throws DatabaseException {
+
Layer0 L0 = Layer0.getInstance(graph);
SimulationResource SIMU = SimulationResource.getInstance(graph);
if (runTypes.size() != 1)
throw new DatabaseException("No unique run type was found for experiment " + graph.getPossibleURI(experiment));
final Resource runType = runTypes.iterator().next();
+
+ return createExperimentRunWithType(graph, experiment, runType);
+
+ }
- 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);
+ public static Resource createExperimentRunWithType(WriteGraph graph, Resource experiment, Resource runType) throws DatabaseException {
+
+ Layer0 L0 = Layer0.getInstance(graph);
- return run;
- }
- });
+ 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);
+
+ activateRun(graph, run);
+
+ return run;
+
}
- private static void activateRun(WriteGraph graph, Resource run) throws DatabaseException {
+ public 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);
+
}
}