1 package org.simantics.structural.synchronization;
\r
3 import java.util.concurrent.ConcurrentMap;
\r
5 import org.eclipse.core.runtime.IProgressMonitor;
\r
6 import org.eclipse.core.runtime.IStatus;
\r
7 import org.eclipse.core.runtime.Status;
\r
8 import org.eclipse.core.runtime.jobs.Job;
\r
9 import org.simantics.DatabaseJob;
\r
10 import org.simantics.Simantics;
\r
11 import org.simantics.simulation.experiment.ExperimentState;
\r
12 import org.simantics.simulation.experiment.IExperiment;
\r
14 public class ContinuousSynchronizationJob extends DatabaseJob {
\r
16 public static final String FAMILY = "ContinuousSynchronizationJob";
\r
18 final private ConcurrentMap<IExperiment, Job> currentSyncJobs;
\r
20 IExperiment experiment;
\r
22 public ContinuousSynchronizationJob(IExperiment experiment, ConcurrentMap<IExperiment, Job> currentSyncJobs) {
\r
23 super("Synchronization");
\r
24 this.experiment = experiment;
\r
25 this.currentSyncJobs = currentSyncJobs;
\r
31 public boolean belongsTo(Object family) {
\r
32 if (FAMILY == family) return true;
\r
33 return super.belongsTo(family);
\r
37 public boolean shouldRun() {
\r
38 return currentSyncJobs.remove(experiment, this);
\r
42 protected IStatus run(IProgressMonitor monitor) {
\r
44 //System.out.println("SYNC #" + (++syncCounter));
\r
45 monitor.beginTask("", IProgressMonitor.UNKNOWN);
\r
46 if (experiment.getState() != ExperimentState.DISPOSED)
\r
47 experiment.refresh(Simantics.getSession());
\r
48 return Status.OK_STATUS;
\r
49 } catch (Throwable t) {
\r
50 return new Status(IStatus.ERROR, "org.simantics.structural.synchronization.client", "Failed to refresh experiment "
\r
51 + experiment + " with ID " + experiment.getIdentifier(), t);
\r