package jalview.ws2.helpers; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import jalview.ws2.actions.api.JobI; import jalview.ws2.actions.api.TaskEventListener; import jalview.ws2.actions.api.TaskI; import jalview.ws2.api.JobStatus; public class TaskEventSupport { private TaskI source; private List> listeners = new CopyOnWriteArrayList<>(); public TaskEventSupport(TaskI source) { this.source = source; } public TaskEventSupport(TaskI source, TaskEventListener handler) { this(source); addListener(handler); } public void addListener(TaskEventListener listener) { listeners.add(listener); } public void removeListener(TaskEventListener listener) { listeners.remove(listener); } public void fireTaskStarted(List subJobs) { for (var listener : listeners) listener.taskStarted(source, subJobs); } public void fireTaskStatusChanged(JobStatus status) { for (var listener : listeners) listener.taskStatusChanged(source, status); } public void fireTaskCompleted(T result) { for (var listener : listeners) listener.taskCompleted(source, result); } public void fireTaskException(Exception e) { for (var listener : listeners) listener.taskException(source, e); } public void fireSubJobStatusChanged(JobI job, JobStatus status) { for (var listener : listeners) listener.subJobStatusChanged(source, job, status); } public void fireSubJobLogChanged(JobI job, String log) { for (var listener : listeners) listener.subJobLogChanged(source, job, log); } public void fireSubJobErrorLogChanged(JobI job, String log) { for (var listener : listeners) listener.subJobErrorLogChanged(source, job, log); } }