4 import java.util.concurrent.CopyOnWriteArrayList;
5 import java.util.function.Consumer;
8 * Utility class that manages a list of {@link WebServiceWorkerListener} and
9 * dispatches signals to them. An instance of this class can be used as a member
10 * field of the {@link WebServiceWorkerI} object to easily store listeners and
11 * delegate signals to them. Firing any signal with this object will invoke a
12 * corresponding method on all registered listeners in order they were
18 public class WebServiceWorkerListenersList
20 private WebServiceWorkerI owner;
22 private List<WebServiceWorkerListener> listeners = new CopyOnWriteArrayList<>();
25 * Constructs a listeners list object with the worker which will be given
26 * to the listeners as the source of the signals.
28 * @param worker the worker to be given as the source for signals
30 public WebServiceWorkerListenersList(WebServiceWorkerI worker)
36 * Add listener to the listeners list. The listener will be notified of
37 * any signals triggered with this object.
39 * @param listener listener to add
41 public void addListener(WebServiceWorkerListener listener)
43 listeners.add(listener);
47 * Remove listener from the lsiteners list. The listener will no longer be
48 * notified of the emitted signals.
50 * @param listener listener to remove
52 public void removeListener(WebServiceWorkerListener listener)
54 listeners.remove(listener);
58 * Emit "worker started" signal to all listeners.
60 public void fireWorkerStarted()
62 for (var listener : listeners)
63 listener.workerStarted(owner);
67 * Emit "worker not started" signal to all listeners.
69 public void fireWorkerNotStarted()
71 for (var listener : listeners)
72 listener.workerNotStarted(owner);
76 * Emit "job created" signal to all listeners passing the job that has been
79 * @param job newly created job
81 public void fireJobCreated(WSJob job)
83 for (var listener : listeners)
84 listener.jobCreated(owner, job);
88 * Emit "poll exception" signal to all listener when an exception occurred
89 * during job polling. The job which caused an exception as well as the exception
90 * are passed to all listeners.
92 * @param job polled job
93 * @param e exception that occurred
95 public void firePollException(WSJob job, Exception e)
97 for (var listener : listeners)
98 listener.pollException(owner, job, e);
102 * Emit "worker completing" signal to all listeners when the worker starts
103 * collecting and parsing the results.
105 public void fireWorkerCompleting()
107 for (var listener : listeners)
108 listener.workerCompleting(owner);
112 * Emit "worker completed" signal to all listeners indicating that the worker
113 * finished processing data and finalized the jobs.
115 public void fireWorkerCompleted()
117 for (var listener : listeners)
118 listener.workerCompleted(owner);
122 * Get the list of registered listeners. The returned list should not be
123 * modified externally and its content may change when workers are added
124 * or removed from the list.
127 public List<WebServiceWorkerListener> getListeners()
133 * Execute an operation for each listener in the listeners list.
135 * @param consumer listener object consumer
137 public void forEach(Consumer<WebServiceWorkerListener> consumer)
139 for (var listener : listeners)
140 consumer.accept(listener);