513610cb715e6ba8e3423b11f60181492ebabb84
[jalview.git] / src / jalview / ws2 / WebServiceDiscoverer.java
1 package jalview.ws2;
2
3 import java.net.URL;
4 import java.util.ArrayList;
5 import java.util.Collection;
6 import java.util.List;
7 import java.util.concurrent.CompletableFuture;
8 import java.util.concurrent.CopyOnWriteArrayList;
9
10 import jalview.ws2.operations.Operation;
11
12 public interface WebServiceDiscoverer
13 {
14   public static final int STATUS_OK = 1;
15
16   public static final int STATUS_NO_SERVICES = 0;
17
18   public static final int STATUS_INVALID = -1;
19
20   public static final int STATUS_UNKNOWN = -2;
21
22   public List<String> getUrls();
23
24   public void setUrls(List<String> wsUrls);
25
26   public boolean testUrl(URL url);
27
28   public int getStatusForUrl(String url);
29
30   public List<Operation> getOperations();
31
32   public boolean hasServices();
33
34   public boolean isRunning();
35
36   public boolean isDone();
37
38   public CompletableFuture<WebServiceDiscoverer> startDiscoverer();
39
40   public String getErrorMessages();
41
42   @FunctionalInterface
43   static interface ServiceChangeListener
44   {
45     public void operationsChanged(WebServiceDiscoverer discoverer,
46             List<Operation> list);
47   }
48
49   List<ServiceChangeListener> serviceListeners = new CopyOnWriteArrayList<>();
50
51   public default void addServiceChangeListener(
52           ServiceChangeListener listener)
53   {
54     serviceListeners.add(listener);
55   }
56
57   public default void removeServiceChangeListener(
58           ServiceChangeListener listener)
59   {
60     serviceListeners.remove(listener);
61   }
62
63   default void fireOperationsChanged(List<Operation> list)
64   {
65     for (var listener : serviceListeners)
66     {
67       listener.operationsChanged(this, list);
68     }
69   }
70 }