package com.revolsys.webservice; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.function.Function; import com.revolsys.io.connection.AbstractConnectionRegistryManager; import com.revolsys.spring.resource.FileSystemResource; import com.revolsys.spring.resource.Resource; import com.revolsys.util.OS; import com.revolsys.util.Property; public class WebServiceConnectionManager extends AbstractConnectionRegistryManager<WebServiceConnectionRegistry, WebServiceConnection> { public static final String WEB_SERVICES = "Web Services"; private static final WebServiceConnectionManager INSTANCE; static { INSTANCE = new WebServiceConnectionManager(); final File webServicesDirectory = OS .getApplicationDataDirectory("com.revolsys.gis/Web Services"); INSTANCE.addConnectionRegistry("User", new FileSystemResource(webServicesDirectory)); } private static Function<WebServiceConnection, Boolean> invalidWebServiceFunction; @SuppressWarnings("rawtypes") private static Function<String, WebService> missingWebServiceFunction; public static WebServiceConnectionManager get() { return INSTANCE; } public static Function<WebServiceConnection, Boolean> getInvalidWebServiceFunction() { return WebServiceConnectionManager.invalidWebServiceFunction; } /** * Get an initialized record store. * @param connectionProperties * @return */ @SuppressWarnings("unchecked") public static <W extends WebService<?>> W getWebService( final Map<String, ? extends Object> config) { final Map<String, ? extends Object> connectionProperties = (Map<String, ? extends Object>)config .get("connection"); if (connectionProperties == null) { throw new IllegalArgumentException("Missing connection in Web Service config"); } else { final String name = (String)connectionProperties.get("name"); if (Property.hasValue(name)) { return (W)getWebService(name); } else { throw new IllegalArgumentException("Missing name in Web Service connection config"); } } } @SuppressWarnings({ "unchecked" }) public static <W extends WebService<?>> W getWebService(final String name) { final WebServiceConnectionManager connectionManager = get(); final List<WebServiceConnectionRegistry> registries = new ArrayList<>(); registries.addAll(connectionManager.getConnectionRegistries()); final WebServiceConnectionRegistry threadRegistry = WebServiceConnectionRegistry.getForThread(); if (threadRegistry != null) { registries.add(threadRegistry); } Collections.reverse(registries); for (final WebServiceConnectionRegistry registry : registries) { final WebServiceConnection webServiceConnection = registry.getConnection(name); if (webServiceConnection != null) { return webServiceConnection.getWebService(); } } if (missingWebServiceFunction == null) { return null; } else { return (W)missingWebServiceFunction.apply(name); } } public static void setInvalidWebServiceFunction( final Function<WebServiceConnection, Boolean> invalidWebServiceFunction) { WebServiceConnectionManager.invalidWebServiceFunction = invalidWebServiceFunction; } @SuppressWarnings("rawtypes") public static void setMissingWebServiceFunction( final Function<String, WebService> missingWebServiceFunction) { WebServiceConnectionManager.missingWebServiceFunction = missingWebServiceFunction; } public WebServiceConnectionManager() { super(WEB_SERVICES); } public WebServiceConnectionRegistry addConnectionRegistry(final String name, final boolean visible) { final WebServiceConnectionRegistry registry = new WebServiceConnectionRegistry(this, name, visible); addConnectionRegistry(registry); return registry; } public WebServiceConnectionRegistry addConnectionRegistry(final String name, final Resource recordStoresDirectory) { final WebServiceConnectionRegistry registry = new WebServiceConnectionRegistry(this, name, recordStoresDirectory); addConnectionRegistry(registry); return registry; } @Override public String getIconName() { return "folder:world"; } }