package jalview.ws2; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CopyOnWriteArrayList; public interface WebServiceDiscoverer { public static final int STATUS_OK = 1; public static final int STATUS_NO_SERVICES = 0; public static final int STATUS_INVALID = -1; public static final int STATUS_UNKNOWN = -2; public List getUrls(); public void setUrls(List wsUrls); public boolean testUrl(URL url); public int getStatusForUrl(String url); public List getServices(); public boolean hasServices(); public boolean isRunning(); public boolean isDone(); public CompletableFuture startDiscoverer(); public String getErrorMessages(); @FunctionalInterface static interface ServiceChangeListener { public void servicesChanged(WebServiceDiscoverer discoverer, Collection services); } List serviceListeners = new CopyOnWriteArrayList<>(); public default void addServiceChangeListener( ServiceChangeListener listener) { serviceListeners.add(listener); } public default void removeServiceChangeListener( ServiceChangeListener listener) { serviceListeners.remove(listener); } default void fireServicesChanged(List services) { for (var listener : serviceListeners) { listener.servicesChanged(this, services); } } }