4 import java.util.concurrent.CopyOnWriteArrayList;
5 import java.util.concurrent.Executors;
6 import java.util.concurrent.ScheduledExecutorService;
7 import java.util.concurrent.TimeUnit;
9 import jalview.bin.Cache;
10 import jalview.bin.Console;
12 public class PollingTaskExecutor
14 private ScheduledExecutorService executor = Executors
15 .newSingleThreadScheduledExecutor();
17 public void submit(final PollableTaskI task)
19 executor.submit(() -> {
23 wsThreadSupport.submitted(task);
26 Console.error("Failed to submit web service jobs.", e);
27 wsThreadSupport.submissionFailed(task, e);
30 executor.schedule(() -> poll(task), 1, TimeUnit.SECONDS);
34 private void poll(PollableTaskI task)
42 Console.error("Failed to poll task.", e);
43 wsThreadSupport.pollFailed(task, e);
48 executor.schedule(() -> poll(task), 1, TimeUnit.SECONDS);
53 wsThreadSupport.done(task);
57 private WebServiceThreadSupport wsThreadSupport = new WebServiceThreadSupport();
59 public void addThreadListener(PollableTaskListenerI listener)
61 wsThreadSupport.addListener(listener);
64 public void removeThreadListener(PollableTaskListenerI listener)
66 wsThreadSupport.removeListener(listener);
69 public void shutdown()
71 executor.shutdownNow();
76 class WebServiceThreadSupport implements PollableTaskListenerI
78 List<PollableTaskListenerI> listeners = new CopyOnWriteArrayList<>();
81 public void submitted(PollableTaskI task)
83 for (var listener : listeners)
84 listener.submitted(task);
88 public void submissionFailed(PollableTaskI task, Exception e)
90 for (var listener : listeners)
91 listener.submissionFailed(task, e);
95 public void pollFailed(PollableTaskI task, Exception e)
97 for (var listener : listeners)
98 listener.pollFailed(task, e);
102 public void cancelled(PollableTaskI task)
104 for (var listener : listeners)
105 listener.cancelled(task);
109 public void done(PollableTaskI task)
111 for (var listener : listeners)
115 public void addListener(PollableTaskListenerI listener)
117 if (!listeners.contains(listener))
119 listeners.add(listener);
123 public void removeListener(PollableTaskListenerI listener)
125 listeners.remove(listener);