X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.structural.synchronization.client%2Fsrc%2Forg%2Fsimantics%2Fstructural%2Fsynchronization%2Fclient%2FContinuousSynchronizationJob.java;fp=bundles%2Forg.simantics.structural.synchronization.client%2Fsrc%2Forg%2Fsimantics%2Fstructural%2Fsynchronization%2Fclient%2FContinuousSynchronizationJob.java;h=47e9fa004a8112ca1fe2422cd87290d6b401ae00;hb=e4007b17057ff4acc2e900c5c811743b74f71f41;hp=0000000000000000000000000000000000000000;hpb=3fe6778c21d6437e90d08987de6dae7bca89bc6d;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/client/ContinuousSynchronizationJob.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/client/ContinuousSynchronizationJob.java new file mode 100644 index 000000000..47e9fa004 --- /dev/null +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/client/ContinuousSynchronizationJob.java @@ -0,0 +1,57 @@ +package org.simantics.structural.synchronization.client; + +import java.util.concurrent.ConcurrentMap; + +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.simantics.DatabaseJob; +import org.simantics.Simantics; +import org.simantics.simulation.experiment.ExperimentState; +import org.simantics.simulation.experiment.IExperiment; + +public class ContinuousSynchronizationJob extends DatabaseJob { + + public static final String FAMILY = "ContinuousSynchronizationJob"; + + final private ConcurrentMap currentSyncJobs; + + IExperiment experiment; + + public ContinuousSynchronizationJob(IExperiment experiment, ConcurrentMap currentSyncJobs) { + super("Synchronization"); + this.experiment = experiment; + this.currentSyncJobs = currentSyncJobs; + setPriority(SHORT); + setSystem(false); + } + + @Override + public boolean belongsTo(Object family) { + if (FAMILY == family) return true; + return super.belongsTo(family); + } + + @Override + public boolean shouldRun() { + return currentSyncJobs.remove(experiment, this); + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + //System.out.println("SYNC #" + (++syncCounter)); + monitor.beginTask("", IProgressMonitor.UNKNOWN); + if (experiment.getState() != ExperimentState.DISPOSED) + experiment.refresh(Simantics.getSession()); + return Status.OK_STATUS; + } catch (Throwable t) { + return new Status(IStatus.ERROR, "org.simantics.structural.synchronization.client", "Failed to refresh experiment " + + experiment + " with ID " + experiment.getIdentifier(), t); + } finally { + monitor.done(); + } + } + +} \ No newline at end of file