JAL-4199 Allow multiple listeners in TaskEventSupport
[jalview.git] / src / jalview / ws2 / helpers / TaskEventSupport.java
1 package jalview.ws2.helpers;
2
3 import java.util.List;
4 import java.util.concurrent.CopyOnWriteArrayList;
5
6 import jalview.ws2.actions.api.JobI;
7 import jalview.ws2.actions.api.TaskEventListener;
8 import jalview.ws2.actions.api.TaskI;
9 import jalview.ws2.api.JobStatus;
10
11 public class TaskEventSupport<T>
12 {
13   private TaskI<T> source;
14
15   private List<TaskEventListener<T>> listeners = new CopyOnWriteArrayList<>();
16
17   public TaskEventSupport(TaskI<T> source)
18   {
19     this.source = source;
20   }
21
22   public TaskEventSupport(TaskI<T> source, TaskEventListener<T> handler)
23   {
24     this(source);
25     addListener(handler);
26   }
27
28   public void addListener(TaskEventListener<T> listener)
29   {
30     listeners.add(listener);
31   }
32   
33   public void removeListener(TaskEventListener<T> listener)
34   {
35     listeners.remove(listener);
36   }
37
38   public void fireTaskStarted(List<? extends JobI> subJobs)
39   {
40     for (var listener : listeners)
41       listener.taskStarted(source, subJobs);
42   }
43
44   public void fireTaskStatusChanged(JobStatus status)
45   {
46     for (var listener : listeners)
47       listener.taskStatusChanged(source, status);
48   }
49
50   public void fireTaskCompleted(T result)
51   {
52     for (var listener : listeners)
53       listener.taskCompleted(source, result);
54   }
55
56   public void fireTaskException(Exception e)
57   {
58     for (var listener : listeners)
59       listener.taskException(source, e);
60   }
61
62   public void fireSubJobStatusChanged(JobI job, JobStatus status)
63   {
64     for (var listener : listeners)
65       listener.subJobStatusChanged(source, job, status);
66   }
67
68   public void fireSubJobLogChanged(JobI job, String log)
69   {
70     for (var listener : listeners)
71       listener.subJobLogChanged(source, job, log);
72   }
73
74   public void fireSubJobErrorLogChanged(JobI job, String log)
75   {
76     for (var listener : listeners)
77       listener.subJobErrorLogChanged(source, job, log);
78   }
79 }