]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.structural.synchronization.client/src/org/simantics/structural/synchronization/ContinuousSynchronizationJob.java
Sync git svn branch with SVN repository r33364.
[simantics/platform.git] / bundles / org.simantics.structural.synchronization.client / src / org / simantics / structural / synchronization / ContinuousSynchronizationJob.java
1 package org.simantics.structural.synchronization;\r
2 \r
3 import java.util.concurrent.ConcurrentMap;\r
4 \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
13 \r
14 public class ContinuousSynchronizationJob extends DatabaseJob {\r
15         \r
16         public static final String FAMILY = "ContinuousSynchronizationJob";\r
17 \r
18         final private ConcurrentMap<IExperiment, Job> currentSyncJobs;\r
19         \r
20     IExperiment                         experiment;\r
21 \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
26         setPriority(SHORT);\r
27         setSystem(false);\r
28     }\r
29     \r
30     @Override\r
31     public boolean belongsTo(Object family) {\r
32         if (FAMILY == family) return true;\r
33         return super.belongsTo(family);\r
34     }\r
35 \r
36     @Override\r
37     public boolean shouldRun() {\r
38         return currentSyncJobs.remove(experiment, this);\r
39     }\r
40 \r
41     @Override\r
42     protected IStatus run(IProgressMonitor monitor) {\r
43         try {\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
52         } finally {\r
53             monitor.done();\r
54         }\r
55     }\r
56 \r
57 }