X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.simulation%2Fsrc%2Forg%2Fsimantics%2Fsimulation%2Fexperiment%2FExperiment.java;h=827677451ab3d33d067e466f9db829869a3ad8a1;hp=b4222df012e4a56d8533914fa0c751adfd724fef;hb=7ffbcb78ddb8c619bd5a88fbbcd6f079cc1684fc;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07 diff --git a/bundles/org.simantics.simulation/src/org/simantics/simulation/experiment/Experiment.java b/bundles/org.simantics.simulation/src/org/simantics/simulation/experiment/Experiment.java index b4222df01..827677451 100644 --- a/bundles/org.simantics.simulation/src/org/simantics/simulation/experiment/Experiment.java +++ b/bundles/org.simantics.simulation/src/org/simantics/simulation/experiment/Experiment.java @@ -19,6 +19,8 @@ import org.simantics.databoard.accessor.Accessor; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.exception.DatabaseException; +import org.simantics.db.procedure.Listener; +import org.simantics.db.request.ExternalRead; import org.simantics.utils.datastructures.ListenerList; public abstract class Experiment implements IExperiment { @@ -64,7 +66,7 @@ public abstract class Experiment implements IExperiment { @Override public ExperimentState getState(ReadGraph graph) throws DatabaseException { - throw new UnsupportedOperationException(); + return graph.syncRequest(EXPERIMENT_STATE_READ); } public void changeState(ExperimentState newState) { @@ -79,6 +81,7 @@ public abstract class Experiment implements IExperiment { localStateChange(); for(IExperimentListener listener : listeners.getListeners()) listener.stateChanged(newState); + EXPERIMENT_STATE_READ.run(); } } @@ -136,4 +139,37 @@ public abstract class Experiment implements IExperiment { return identifier; } + static class ExperimentStateRead implements ExternalRead, Runnable { + + final private Experiment experiment; + private Listener listener = null; + + ExperimentStateRead(Experiment experiment) { + this.experiment = experiment; + } + + @Override + public void register(ReadGraph graph, final Listener procedure) { + //System.out.println("IcTrackerRequest.register: " + procedure); + listener = procedure; + procedure.execute(experiment.state); + } + + @Override + public void unregistered() { + //System.out.println("IcTrackerRequest.unregister: " + listener); + listener = null; + } + + @Override + public void run() { + Listener l = listener; + //System.out.println("IcTrackerRequest.run: " + l); + if (l != null) + l.execute(experiment.state); + } + } + + private ExperimentStateRead EXPERIMENT_STATE_READ = new ExperimentStateRead(this); + }