import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;
+/**
+ * Utility class that manages a list of {@link WebServiceWorkerListener} and
+ * dispatches signals to them. An instance of this class can be used as a member
+ * field of the {@link WebServiceWorkerI} object to easily store listeners and
+ * delegate signals to them. Firing any signal with this object will invoke a
+ * corresponding method on all registered listeners in order they were
+ * registered.
+ *
+ * @author mmwarowny
+ *
+ */
public class WebServiceWorkerListenersList
{
private WebServiceWorkerI owner;
+
private List<WebServiceWorkerListener> listeners = new CopyOnWriteArrayList<>();
-
+
+ /**
+ * Constructs a listeners list object with the worker which will be given
+ * to the listeners as the source of the signals.
+ *
+ * @param worker the worker to be given as the source for signals
+ */
public WebServiceWorkerListenersList(WebServiceWorkerI worker)
{
this.owner = worker;
}
-
+
+ /**
+ * Add listener to the listeners list. The listener will be notified of
+ * any signals triggered with this object.
+ *
+ * @param listener listener to add
+ */
public void addListener(WebServiceWorkerListener listener)
{
listeners.add(listener);
}
-
+
+ /**
+ * Remove listener from the lsiteners list. The listener will no longer be
+ * notified of the emitted signals.
+ *
+ * @param listener listener to remove
+ */
public void removeListener(WebServiceWorkerListener listener)
{
listeners.remove(listener);
}
-
+
+ /**
+ * Emit "worker started" signal to all listeners.
+ */
public void fireWorkerStarted()
{
for (var listener : listeners)
listener.workerStarted(owner);
}
-
+
+ /**
+ * Emit "worker not started" signal to all listeners.
+ */
public void fireWorkerNotStarted()
{
for (var listener : listeners)
listener.workerNotStarted(owner);
}
-
+
+ /**
+ * Emit "job created" signal to all listeners passing the job that has been
+ * created to them.
+ *
+ * @param job newly created job
+ */
public void fireJobCreated(WSJob job)
{
for (var listener : listeners)
listener.jobCreated(owner, job);
}
-
+
+ /**
+ * Emit "poll exception" signal to all listener when an exception occurred
+ * during job polling. The job which caused an exception as well as the exception
+ * are passed to all listeners.
+ *
+ * @param job polled job
+ * @param e exception that occurred
+ */
public void firePollException(WSJob job, Exception e)
{
for (var listener : listeners)
listener.pollException(owner, job, e);
}
-
+
+ /**
+ * Emit "worker completing" signal to all listeners when the worker starts
+ * collecting and parsing the results.
+ */
public void fireWorkerCompleting()
{
for (var listener : listeners)
listener.workerCompleting(owner);
}
-
+
+ /**
+ * Emit "worker completed" signal to all listeners indicating that the worker
+ * finished processing data and finalized the jobs.
+ */
public void fireWorkerCompleted()
{
for (var listener : listeners)
listener.workerCompleted(owner);
}
+ /**
+ * Get the list of registered listeners. The returned list should not be
+ * modified externally and its content may change when workers are added
+ * or removed from the list.
+ * @return
+ */
public List<WebServiceWorkerListener> getListeners()
{
return listeners;
}
-
+
+ /**
+ * Execute an operation for each listener in the listeners list.
+ *
+ * @param consumer listener object consumer
+ */
public void forEach(Consumer<WebServiceWorkerListener> consumer)
{
for (var listener : listeners)