]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/client/ContinuousSynchronizationJob.java
Separate DB and non-DB code to different structural sync bundles
[simantics/platform.git] / bundles / org.simantics.structural.synchronization.client / src / org / simantics / structural / synchronization / client / ContinuousSynchronizationJob.java
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 (file)
index 0000000..47e9fa0
--- /dev/null
@@ -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<IExperiment, Job> currentSyncJobs;
+       
+    IExperiment                         experiment;
+
+    public ContinuousSynchronizationJob(IExperiment experiment, ConcurrentMap<IExperiment, Job> 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