X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.structural.synchronization.client%2Fsrc%2Forg%2Fsimantics%2Fstructural%2Fsynchronization%2FContinuousSynchronizationJob.java;fp=bundles%2Forg.simantics.structural.synchronization.client%2Fsrc%2Forg%2Fsimantics%2Fstructural%2Fsynchronization%2FContinuousSynchronizationJob.java;h=38b8ce67f7839261eac755ef597eea14c5784395;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/ContinuousSynchronizationJob.java b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/ContinuousSynchronizationJob.java new file mode 100644 index 000000000..38b8ce67f --- /dev/null +++ b/bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/ContinuousSynchronizationJob.java @@ -0,0 +1,57 @@ +package org.simantics.structural.synchronization; + +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