JAL-3878 Create base interfaces for new web services.
[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 public interface WebServiceDiscoverer
11 {
12   public static final int STATUS_OK = 1;
13   public static final int STATUS_NO_SERVICES = 0;
14   public static final int STATUS_INVALID = -1;
15   public static final int STATUS_UNKNOWN = -2;
16
17   public List<String> getUrls();
18
19   public void setUrls(List<String> wsUrls);
20
21   public boolean testUrl(URL url);
22
23   public int getStatusForUrl(String url);
24
25   public List<WebServiceI> getServices();
26
27   public boolean hasServices();
28
29   public boolean isRunning();
30
31   public boolean isDone();
32
33   public CompletableFuture<WebServiceDiscoverer> startDiscoverer();
34
35   public String getErrorMessages();
36
37   @FunctionalInterface
38   static interface ServiceChangeListener {
39     public void servicesChanged(WebServiceDiscoverer discoverer,
40             Collection<? extends WebServiceI> services);
41   }
42
43   List<ServiceChangeListener> serviceListeners = new CopyOnWriteArrayList<>();
44
45   public default void addServiceChangeListener(ServiceChangeListener listener) {
46     serviceListeners.add(listener);
47   }
48
49   public default void removeServiceChangeListener(ServiceChangeListener listener) {
50     serviceListeners.remove(listener);
51   }
52
53   default void fireServicesChanged(List<WebServiceI> services) {
54     for (var listener: serviceListeners) {
55       listener.servicesChanged(this, services);
56     }
57   }
58 }