]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/ContinuousSynchronizationJob.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.structural.synchronization.client / src / org / simantics / structural / synchronization / ContinuousSynchronizationJob.java
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 (file)
index 0000000..38b8ce6
--- /dev/null
@@ -0,0 +1,57 @@
+package org.simantics.structural.synchronization;\r
+\r
+import java.util.concurrent.ConcurrentMap;\r
+\r
+import org.eclipse.core.runtime.IProgressMonitor;\r
+import org.eclipse.core.runtime.IStatus;\r
+import org.eclipse.core.runtime.Status;\r
+import org.eclipse.core.runtime.jobs.Job;\r
+import org.simantics.DatabaseJob;\r
+import org.simantics.Simantics;\r
+import org.simantics.simulation.experiment.ExperimentState;\r
+import org.simantics.simulation.experiment.IExperiment;\r
+\r
+public class ContinuousSynchronizationJob extends DatabaseJob {\r
+       \r
+       public static final String FAMILY = "ContinuousSynchronizationJob";\r
+\r
+       final private ConcurrentMap<IExperiment, Job> currentSyncJobs;\r
+       \r
+    IExperiment                         experiment;\r
+\r
+    public ContinuousSynchronizationJob(IExperiment experiment, ConcurrentMap<IExperiment, Job> currentSyncJobs) {\r
+        super("Synchronization");\r
+        this.experiment = experiment;\r
+        this.currentSyncJobs = currentSyncJobs;\r
+        setPriority(SHORT);\r
+        setSystem(false);\r
+    }\r
+    \r
+    @Override\r
+    public boolean belongsTo(Object family) {\r
+       if (FAMILY == family) return true;\r
+       return super.belongsTo(family);\r
+    }\r
+\r
+    @Override\r
+    public boolean shouldRun() {\r
+        return currentSyncJobs.remove(experiment, this);\r
+    }\r
+\r
+    @Override\r
+    protected IStatus run(IProgressMonitor monitor) {\r
+        try {\r
+            //System.out.println("SYNC #" + (++syncCounter));\r
+            monitor.beginTask("", IProgressMonitor.UNKNOWN);\r
+            if (experiment.getState() != ExperimentState.DISPOSED)\r
+                experiment.refresh(Simantics.getSession());\r
+            return Status.OK_STATUS;\r
+        } catch (Throwable t) {\r
+            return new Status(IStatus.ERROR, "org.simantics.structural.synchronization.client", "Failed to refresh experiment "\r
+                    + experiment + " with ID " + experiment.getIdentifier(), t);\r
+        } finally {\r
+            monitor.done();\r
+        }\r
+    }\r
+\r
+}
\ No newline at end of file