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; import jalview.ws2.operations.Operation; 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 getOperations(); public boolean hasServices(); public boolean isRunning(); public boolean isDone(); public CompletableFuture startDiscoverer(); public String getErrorMessages(); @FunctionalInterface static interface ServiceChangeListener { public void operationsChanged(WebServiceDiscoverer discoverer, List list); } List serviceListeners = new CopyOnWriteArrayList<>(); public default void addServiceChangeListener( ServiceChangeListener listener) { serviceListeners.add(listener); } public default void removeServiceChangeListener( ServiceChangeListener listener) { serviceListeners.remove(listener); } default void fireOperationsChanged(List list) { for (var listener : serviceListeners) { listener.operationsChanged(this, list); } } }