]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.osgi/src/org/simantics/scl/osgi/SCLProgressMonitor.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.scl.osgi / src / org / simantics / scl / osgi / SCLProgressMonitor.java
1 package org.simantics.scl.osgi;
2
3 import org.eclipse.core.runtime.IProgressMonitor;
4 import org.simantics.scl.runtime.function.Function1;
5 import org.simantics.scl.runtime.function.Function2;
6 import org.simantics.scl.runtime.tuple.Tuple0;
7
8 public class SCLProgressMonitor implements IProgressMonitor {
9
10         int recordedWork = 0;
11         String currentSubtask = "";
12         
13     private final Function2<String, Float, Tuple0> beginTask;
14     private final Function1<Tuple0, Tuple0> done;
15     private final Function1<Tuple0, Boolean> isCanceled;
16     private final Function1<Boolean, Tuple0> setCanceled;
17     private final Function1<String, Tuple0> setTaskName;
18     private final Function1<String, Tuple0> subTask;
19     private final Function1<Float, Tuple0> worked;
20
21     public SCLProgressMonitor(Function2<String, Float, Tuple0> beginTask, Function1<Tuple0, Tuple0> done,
22             Function1<Tuple0, Boolean> isCanceled, Function1<Boolean, Tuple0> setCanceled,
23             Function1<String, Tuple0> setTaskName, Function1<String, Tuple0> subTask, Function1<Float, Tuple0> worked) {
24         this.beginTask = beginTask;
25         this.done = done;
26         this.isCanceled = isCanceled;
27         this.setCanceled = setCanceled;
28         this.setTaskName = setTaskName;
29         this.subTask = subTask;
30         this.worked = worked;
31     }
32     
33     @Override
34     public void beginTask(String name, int totalWork) {
35         beginTask.apply(name, new Float(totalWork));
36     }
37
38     @Override
39     public void done() {
40         done.apply(Tuple0.INSTANCE);
41     }
42
43     @Override
44     public void internalWorked(double work) {
45     }
46
47     @Override
48     public boolean isCanceled() {
49         return isCanceled.apply(Tuple0.INSTANCE);
50     }
51
52     @Override
53     public void setCanceled(boolean value) {
54         setCanceled.apply(value);
55     }
56
57     @Override
58     public void setTaskName(String name) {
59         setTaskName.apply(name);
60     }
61
62     @Override
63     public void subTask(String name) {
64         subTask.apply(name);
65         currentSubtask = name;
66     }
67
68     @Override
69     public void worked(int work) {
70         worked.apply(new Float(work));
71         recordedWork += work;
72     }
73     
74     public float getWork() {
75         return recordedWork;
76     }
77
78     public String getSubTask() {
79         return currentSubtask;
80     }
81
82 }