JAL-3878 Move listeners list from the WebServiceDiscoverer interface.
[jalview.git] / src / jalview / ws2 / OperationsChangeListenerList.java
1 package jalview.ws2;
2
3 import java.util.List;
4 import java.util.concurrent.CopyOnWriteArrayList;
5 import jalview.ws2.WebServiceDiscovererI.OperationsChangeListener;
6 import jalview.ws2.operations.Operation;
7
8 /**
9  * A helper class that manages a list of OperationsChangeListeners
10  * Used by web service discoverers to store listeners.
11  * @author mmwarowny
12  *
13  */
14 public class OperationsChangeListenerList
15 {
16   private List<OperationsChangeListener> listeners = new CopyOnWriteArrayList<>();
17   private WebServiceDiscovererI discoverer;
18   
19   public OperationsChangeListenerList(WebServiceDiscovererI discoverer)
20   {
21     this.discoverer = discoverer;
22   }
23   
24   /**
25    * Add an operations list observer that will be notified of any changes.
26    * 
27    * @param listener
28    *          operations list listener
29    */
30   public void addListener(OperationsChangeListener listener)
31   {
32     listeners.add(listener);
33   }
34
35   /**
36    * Remove the listener from the observers list.
37    * 
38    * @param listener
39    *          listener to be removed
40    */
41   public void removeListener(OperationsChangeListener listener)
42   {
43     listeners.remove(listener);
44   }
45
46   /**
47    * Called whenever the list of operations changes. Notifies all listeners of
48    * the change to the operations list. Typically, should be called with an
49    * empty list at the beginning of the service discovery process and for the
50    * second time with the list of discovered operations after that.
51    * 
52    * @param list
53    *          new list of discovered operations
54    */
55   public void fireOperationsChanged(List<Operation> list)
56   {
57     for (var listener : listeners)
58     {
59       listener.operationsChanged(discoverer, list);
60     }
61   }
62 }