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;
11 public class PollingTaskExecutor
13 private ScheduledExecutorService executor = Executors
14 .newSingleThreadScheduledExecutor();
16 public void submit(final PollableTaskI task)
18 executor.submit(() -> {
22 wsThreadSupport.submitted(task);
25 Cache.log.error("Failed to submit web service jobs.", e);
26 wsThreadSupport.submissionFailed(task, e);
29 executor.schedule(() -> poll(task), 1, TimeUnit.SECONDS);
33 private void poll(PollableTaskI task)
41 Cache.log.error("Failed to poll task.", e);
42 wsThreadSupport.pollFailed(task, e);
47 executor.schedule(() -> poll(task), 1, TimeUnit.SECONDS);
52 wsThreadSupport.done(task);
56 private WebServiceThreadSupport wsThreadSupport = new WebServiceThreadSupport();
58 public void addThreadListener(PollableTaskListenerI listener)
60 wsThreadSupport.addListener(listener);
63 public void removeThreadListener(PollableTaskListenerI listener)
65 wsThreadSupport.removeListener(listener);
68 public void shutdown()
70 executor.shutdownNow();
75 class WebServiceThreadSupport implements PollableTaskListenerI
77 List<PollableTaskListenerI> listeners = new CopyOnWriteArrayList<>();
80 public void submitted(PollableTaskI task)
82 for (var listener : listeners)
83 listener.submitted(task);
87 public void submissionFailed(PollableTaskI task, Exception e)
89 for (var listener : listeners)
90 listener.submissionFailed(task, e);
94 public void pollFailed(PollableTaskI task, Exception e)
96 for (var listener : listeners)
97 listener.pollFailed(task, e);
101 public void cancelled(PollableTaskI task)
103 for (var listener : listeners)
104 listener.cancelled(task);
108 public void done(PollableTaskI task)
110 for (var listener : listeners)
114 public void addListener(PollableTaskListenerI listener)
116 if (!listeners.contains(listener))
118 listeners.add(listener);
122 public void removeListener(PollableTaskListenerI listener)
124 listeners.remove(listener);