From 79c0533999d37638c33758aaa7170b7b112e6b04 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 19 Feb 2021 12:25:00 +0100 Subject: [PATCH] Client automatic loading from IS configuration --- .../clients/geoserver/GSRESTClientImpl.java | 12 +- .../clients/geoserver/GeoServerClient.java | 13 +- .../data/clients/geoserver/GSTests.java | 23 ++- .../data/clients/AbstractGenericClient.java | 155 +++--------------- .../clients/AbstractGenericRESTClient.java | 153 +++++++++++++++++ .../spatial/data/clients/TestClient.java | 2 +- .../org/gcube/spatial/data/clients/Tests.java | 41 ++++- .../data/clients/SDIClientManager.java | 28 +++- .../data/clients/SDIGenericClient.java | 4 +- .../clients/model/ConnectionDescriptor.java | 3 + .../data/sdi/model/service/Version.java | 6 + .../org/gcube/spatial/data/sdi/Clients.java | 2 + .../gcube/spatial/data/sdi/DumbGNClient.java | 7 +- .../sdi/proxies/DefaultSDIManagement.java | 41 +++-- .../org/gcube/spatial/data/sdi/SDITests.java | 5 + 15 files changed, 324 insertions(+), 171 deletions(-) create mode 100644 sdi-generic-client/src/main/java/org/gcube/spatial/data/clients/AbstractGenericRESTClient.java diff --git a/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GSRESTClientImpl.java b/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GSRESTClientImpl.java index 77e4502..63397ee 100644 --- a/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GSRESTClientImpl.java +++ b/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GSRESTClientImpl.java @@ -7,7 +7,7 @@ import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import org.gcube.common.clients.Call; -import org.gcube.spatial.data.clients.AbstractGenericClient; +import org.gcube.spatial.data.clients.AbstractGenericRESTClient; import org.gcube.spatial.data.clients.GenericLoginClient; import org.gcube.spatial.data.clients.model.ConnectionDescriptor; import org.gcube.spatial.data.sdi.model.credentials.Credentials; @@ -20,7 +20,7 @@ import org.json.simple.JSONObject; import lombok.extern.slf4j.Slf4j; @Slf4j -public class GSRESTClientImpl extends AbstractGenericClient implements GSRESTClient,GenericLoginClient{ +public class GSRESTClientImpl extends AbstractGenericRESTClient implements GSRESTClient,GenericLoginClient{ private static final String API_BASE_PATH="rest"; @@ -29,11 +29,11 @@ public class GSRESTClientImpl extends AbstractGenericClient implements GSRESTCli private static final String STYLES_BASE_PATH="styles"; private static final String LAYERS_BASE_PATH="layers"; - protected GSRESTClientImpl(ConnectionDescriptor conn) { + public GSRESTClientImpl(ConnectionDescriptor conn) { super(conn); -// localhost:8080/geoserver/rest -// register(providerClass); -// getClient(). + + setBasePath(API_BASE_PATH); + log.info("Connecting to GS @ "+conn.getEndpoint()); Credentials cr=conn.getCredentials().get(0); diff --git a/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GeoServerClient.java b/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GeoServerClient.java index 3319c16..cb6a403 100644 --- a/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GeoServerClient.java +++ b/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GeoServerClient.java @@ -1,24 +1,25 @@ package org.gcube.spatial.data.clients.geoserver; +import org.gcube.spatial.data.clients.AbstractGenericClient; import org.gcube.spatial.data.clients.SDIGenericClient; import org.gcube.spatial.data.clients.model.ClientInfo; -import org.gcube.spatial.data.clients.model.ConnectionDescriptor; import org.gcube.spatial.data.clients.model.engine.Engine; import org.gcube.spatial.data.clients.model.engine.Range; -public class GeoServerClient implements SDIGenericClient{ +public class GeoServerClient extends AbstractGenericClient implements SDIGenericClient{ + public GeoServerClient() { + super(GSRESTClientImpl.class); + } + @Override public ClientInfo getInfo() { return new ClientInfo("gs-rest", "GeoServer REST", "GeoServer REST client", "come class", new Engine(Engine.GS_ENGINE, "Default GeoServerVersion", new Range("2.0.0", null))); } - @Override - public GSRESTClient getRESTClient(ConnectionDescriptor conn) { - return new GSRESTClientImpl(conn); - } + } diff --git a/gcube-geoserver-client/src/test/java/org/gcube/spatial/data/clients/geoserver/GSTests.java b/gcube-geoserver-client/src/test/java/org/gcube/spatial/data/clients/geoserver/GSTests.java index 9d1dac1..e57dfb2 100644 --- a/gcube-geoserver-client/src/test/java/org/gcube/spatial/data/clients/geoserver/GSTests.java +++ b/gcube-geoserver-client/src/test/java/org/gcube/spatial/data/clients/geoserver/GSTests.java @@ -1,6 +1,9 @@ package org.gcube.spatial.data.clients.geoserver; import org.gcube.spatial.data.clients.model.ConnectionDescriptor; +import org.gcube.spatial.data.clients.model.engine.Engine; +import org.gcube.spatial.data.sdi.model.credentials.AccessType; +import org.gcube.spatial.data.sdi.model.credentials.Credentials; import org.gcube.spatial.data.sdi.model.faults.RemoteException; import org.junit.BeforeClass; import org.junit.Test; @@ -14,14 +17,28 @@ public class GSTests { // String sdiHostname="sdi-d-d4s.d4science.org"; static String scope = "/gcube/devsec/devVRE"; + static ConnectionDescriptor desc; + + @BeforeClass + public static void gatherCredentials() { + desc=new ConnectionDescriptor("https://geoserver1.dev.d4science.org/geoserver"); + desc.add(new Credentials("admin", "GS-d3v-98751", AccessType.ADMIN)); + } + @BeforeClass public static void setScope(){ - TokenSetter.set(scope); +// TokenSetter.set(scope); } @Test - public void getWS() throws RemoteException, Exception { - System.out.println(new GSRESTClientImpl(new ConnectionDescriptor("https://geoserver1.dev.d4science.org/geoserver/rest")).getWorkspaces()); + public void gets() throws RemoteException, Exception { +// System.out.println(new GSRESTClientImpl(new ConnectionDescriptor("https://geoserver1.dev.d4science.org/geoserver/rest")).getWorkspaces()); + GSRESTClient client=new GSRESTClientImpl(desc); + System.out.println(client.getStyles()); + + System.out.println(client.getWorkspaces()); + + } diff --git a/sdi-generic-client/src/main/java/org/gcube/spatial/data/clients/AbstractGenericClient.java b/sdi-generic-client/src/main/java/org/gcube/spatial/data/clients/AbstractGenericClient.java index a0a2aad..e629000 100644 --- a/sdi-generic-client/src/main/java/org/gcube/spatial/data/clients/AbstractGenericClient.java +++ b/sdi-generic-client/src/main/java/org/gcube/spatial/data/clients/AbstractGenericClient.java @@ -1,147 +1,34 @@ package org.gcube.spatial.data.clients; +import java.lang.reflect.InvocationTargetException; -import java.io.IOException; -import java.util.Set; - -import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; -import javax.ws.rs.client.Entity; -import javax.ws.rs.client.WebTarget; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import org.gcube.common.clients.Call; +import org.gcube.spatial.data.clients.model.ClientInfo; import org.gcube.spatial.data.clients.model.ConnectionDescriptor; -import org.gcube.spatial.data.sdi.model.faults.RemoteException; -import org.gcube.spatial.data.sdi.model.metadata.TemplateDescriptor; -import org.glassfish.jersey.client.ClientConfig; -import org.glassfish.jersey.client.ClientProperties; -import org.json.simple.JSONObject; -import com.fasterxml.jackson.annotation.JsonInclude.Include; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; +public abstract class AbstractGenericClient implements SDIGenericClient { -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public abstract class AbstractGenericClient { - - private static ObjectMapper mapper = new ObjectMapper(); - - static { - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); - mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); - mapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, false); - mapper.setSerializationInclusion(Include.NON_NULL); - } - - @Getter - private ClientConfig config=new ClientConfig(); private ConnectionDescriptor conn; + private Class restClientClass; - private Client client; + public AbstractGenericClient(Class clazz) { + this.restClientClass=clazz; + } - - - - protected AbstractGenericClient(ConnectionDescriptor conn) { + @Override + public Object getRESTClient() { + try { + return restClientClass.getConstructor(ConnectionDescriptor.class).newInstance(conn); + } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException + | NoSuchMethodException | SecurityException e) { + throw new RuntimeException("Unable to instantiate class "+restClientClass,e); + } + } + + @Override + public SDIGenericClient at(ConnectionDescriptor conn) { this.conn=conn; - config.register(AuthorizationFilter.class); - } - - protected void register(Class providerClass) { - config.register(providerClass); - client=null; - } - - protected void register(Object provider) { - config.register(provider); - client=null; - } - - public Client getClient() { - if(client==null) { - client = ClientBuilder.newClient(config) - .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); - } - return client; - } - - - protected WebTarget resolve() { - return getClient().target(conn.getEndpoint()); - } - - - protected T makeCall(Call call) throws Exception{ - try{ - return call.call(resolve()); - }catch(RemoteException e) { - throw e; - }catch(Throwable t) { - throw new Exception(t); - } - } - - protected JSONObject get(String path) throws Exception { - return get(path,JSONObject.class); - } - - protected void delete(String path) throws Exception { - check(resolve().path(path).request(MediaType.APPLICATION_JSON).delete(),null); - } - - protected void post(String path,Entity entity)throws Exception{ - post(path,entity,null); - } - - protected T post(String path,Entity entity,Class returnClazz) throws Exception { - return makeCall(new Call() { - - public T call(WebTarget endpoint) throws Exception { - return check(endpoint.path(path).request(MediaType.APPLICATION_JSON). - post(entity),returnClazz); - }; - - }); - } - - - protected T get(String path, Class clazz) throws Exception{ - return makeCall(new Call() { - - public T call(WebTarget endpoint) throws Exception { - return check(endpoint.path(path).request(MediaType.APPLICATION_JSON).get(),clazz); - }; - - }); - } - - - - - protected static T check(Response resp, Class clazz) throws RemoteException{ - if(resp.getStatus()<200||resp.getStatus()>=300) { - String remoteMessage=resp.readEntity(String.class); - Integer httpCode=resp.getStatus(); - RemoteException e=new RemoteException("RESP STATUS IS "+httpCode+". Message : "+remoteMessage); - e.setRemoteMessage(remoteMessage); - e.setResponseHTTPCode(httpCode); - throw e; - }else { - if(clazz==null) return null; - String respString=resp.readEntity(String.class); - if(clazz==String.class) return (T) respString; - try { - return mapper.readValue(respString, clazz); - } catch (IOException e) { - throw new RemoteException("Unable to parse response from Zenodo. Content was : \n "+respString,e); - } - } + return this; } + } diff --git a/sdi-generic-client/src/main/java/org/gcube/spatial/data/clients/AbstractGenericRESTClient.java b/sdi-generic-client/src/main/java/org/gcube/spatial/data/clients/AbstractGenericRESTClient.java new file mode 100644 index 0000000..dc7606c --- /dev/null +++ b/sdi-generic-client/src/main/java/org/gcube/spatial/data/clients/AbstractGenericRESTClient.java @@ -0,0 +1,153 @@ +package org.gcube.spatial.data.clients; + + +import java.io.IOException; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.gcube.common.clients.Call; +import org.gcube.spatial.data.clients.model.ConnectionDescriptor; +import org.gcube.spatial.data.sdi.model.faults.RemoteException; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.ClientProperties; +import org.json.simple.JSONObject; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public abstract class AbstractGenericRESTClient { + + private static ObjectMapper mapper = new ObjectMapper(); + + static { + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); + mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS,false); + mapper.configure(SerializationFeature.WRITE_EMPTY_JSON_ARRAYS, false); + mapper.setSerializationInclusion(Include.NON_NULL); + } + + @Getter + private ClientConfig config=new ClientConfig(); + private ConnectionDescriptor conn; + + + private Client client; + + @Setter + private String basePath=null; + + + + protected AbstractGenericRESTClient(ConnectionDescriptor conn) { + this.conn=conn; + config.register(AuthorizationFilter.class); + } + + protected void register(Class providerClass) { + config.register(providerClass); + client=null; + } + + protected void register(Object provider) { + config.register(provider); + client=null; + } + + public Client getClient() { + if(client==null) { + client = ClientBuilder.newClient(config) + .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); + } + return client; + } + + + protected WebTarget resolve() { + WebTarget toReturn =getClient().target(conn.getEndpoint()); + if(basePath!=null) return toReturn.path(basePath); + else return toReturn; + } + + + protected T makeCall(Call call) throws Exception{ + try{ + return call.call(resolve()); + }catch(RemoteException e) { + throw e; + }catch(Throwable t) { + throw new Exception(t); + } + } + + protected JSONObject get(String path) throws Exception { + return get(path,JSONObject.class); + } + + protected void delete(String path) throws Exception { + check(resolve().path(path).request(MediaType.APPLICATION_JSON).delete(),null); + } + + protected void post(String path,Entity entity)throws Exception{ + post(path,entity,null); + } + + protected T post(String path,Entity entity,Class returnClazz) throws Exception { + return makeCall(new Call() { + + public T call(WebTarget endpoint) throws Exception { + return check(endpoint.path(path).request(MediaType.APPLICATION_JSON). + post(entity),returnClazz); + }; + + }); + } + + + protected T get(String path, Class clazz) throws Exception{ + return makeCall(new Call() { + + public T call(WebTarget endpoint) throws Exception { + return check(endpoint.path(path).request(MediaType.APPLICATION_JSON).get(),clazz); + }; + + }); + } + + + + + protected static T check(Response resp, Class clazz) throws RemoteException{ + if(resp.getStatus()<200||resp.getStatus()>=300) { + String remoteMessage=resp.readEntity(String.class); + Integer httpCode=resp.getStatus(); + RemoteException e=new RemoteException("RESP STATUS IS "+httpCode+". Message : "+remoteMessage); + e.setRemoteMessage(remoteMessage); + e.setResponseHTTPCode(httpCode); + throw e; + }else { + if(clazz==null) return null; + String respString=resp.readEntity(String.class); + if(clazz==String.class) return (T) respString; + try { + return mapper.readValue(respString, clazz); + } catch (IOException e) { + throw new RemoteException("Unable to parse response from Zenodo. Content was : \n "+respString,e); + } + } + } + + + +} diff --git a/sdi-generic-client/src/test/java/org/gcube/spatial/data/clients/TestClient.java b/sdi-generic-client/src/test/java/org/gcube/spatial/data/clients/TestClient.java index ce0113e..004cb4b 100644 --- a/sdi-generic-client/src/test/java/org/gcube/spatial/data/clients/TestClient.java +++ b/sdi-generic-client/src/test/java/org/gcube/spatial/data/clients/TestClient.java @@ -3,7 +3,7 @@ package org.gcube.spatial.data.clients; import org.gcube.spatial.data.clients.model.ConnectionDescriptor; import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; -public class TestClient extends AbstractGenericClient{ +public class TestClient extends AbstractGenericRESTClient{ diff --git a/sdi-generic-client/src/test/java/org/gcube/spatial/data/clients/Tests.java b/sdi-generic-client/src/test/java/org/gcube/spatial/data/clients/Tests.java index fe9a684..98a8468 100644 --- a/sdi-generic-client/src/test/java/org/gcube/spatial/data/clients/Tests.java +++ b/sdi-generic-client/src/test/java/org/gcube/spatial/data/clients/Tests.java @@ -1,13 +1,48 @@ package org.gcube.spatial.data.clients; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - +import org.gcube.spatial.data.clients.model.ConnectionDescriptor; +import org.gcube.spatial.data.clients.model.engine.Engine; +import org.gcube.spatial.data.sdi.model.faults.RemoteException; +import org.junit.BeforeClass; import org.junit.Test; public class Tests { + +// static String sdiHostname="sdi-t.pre.d4science.org"; +// static String scope ="/pred4s/preprod/preVRE"; +// + static String basePath=""; + static String scope = "/gcube/devsec/devVRE"; + + + static ConnectionDescriptor DEV_SDI=new ConnectionDescriptor("https://sdi.d4science.org/sdi-service/gcube/service/"); + + static ConnectionDescriptor DEV_GS=new ConnectionDescriptor("https://geoserver1.dev.d4science.org/geoserver/rest"); + + @BeforeClass + public static void setScope(){ + TokenSetter.set(scope); + } + + @Test + public void testContext() throws RemoteException, Exception { + + + new TestClient(DEV_SDI).get("SDI"); + + } + + @Test + public void testBasicAuth() throws RemoteException, Exception { + + + TestClient c=new TestClient(DEV_GS); + c.setHttpBasicAuth("admin", "GS-d3v-98751"); + c.get("workspaces"); + + } } diff --git a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIClientManager.java b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIClientManager.java index add1736..1a43d59 100644 --- a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIClientManager.java +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIClientManager.java @@ -2,14 +2,19 @@ package org.gcube.spatial.data.clients; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.ServiceLoader; +import org.gcube.spatial.data.clients.model.ClientInfo; +import org.gcube.spatial.data.clients.model.ConnectionDescriptor; + import lombok.extern.slf4j.Slf4j; @Slf4j public class SDIClientManager { - private Collection clients=new ArrayList(); + private List clients=new ArrayList(); public SDIClientManager() { ServiceLoader.load(SDIGenericClient.class).forEach((SDIGenericClient c)->{clients.add(c);}); @@ -36,4 +41,25 @@ public class SDIClientManager { } return null; } + + + /** + * Returns the implementation for the target engine's Connection. Null if no suitable plugin is found + * + * @param engine + * @param version + * @return + * @throws Exception + */ + public SDIGenericClient get(ConnectionDescriptor conn) throws Exception { + SDIGenericClient toReturn=get(conn.getEngineUniqueID(),conn.getVersion()); + if(toReturn==null) throw new Exception("Unable to get client for "+conn.getEngineUniqueID()+" "+conn.getVersion()); + return toReturn.at(conn); + } + + public List list(){ + List toReturn=new ArrayList(); + clients.forEach((SDIGenericClient c)->{toReturn.add(c.getInfo());}); + return toReturn; + } } diff --git a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIGenericClient.java b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIGenericClient.java index 395c0f0..9d9eb15 100644 --- a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIGenericClient.java +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIGenericClient.java @@ -8,8 +8,8 @@ public interface SDIGenericClient { public ClientInfo getInfo(); - public Object getRESTClient(ConnectionDescriptor conn); - + public Object getRESTClient(); + public SDIGenericClient at(ConnectionDescriptor conn); } diff --git a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/model/ConnectionDescriptor.java b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/model/ConnectionDescriptor.java index ff34c2e..dc56ef6 100644 --- a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/model/ConnectionDescriptor.java +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/model/ConnectionDescriptor.java @@ -17,4 +17,7 @@ public class ConnectionDescriptor { @Delegate private List credentials=new ArrayList(); + + private String engineUniqueID; + private String version; } diff --git a/sdi-interface/src/main/java/org/gcube/spatial/data/sdi/model/service/Version.java b/sdi-interface/src/main/java/org/gcube/spatial/data/sdi/model/service/Version.java index 7b542bc..aab969d 100644 --- a/sdi-interface/src/main/java/org/gcube/spatial/data/sdi/model/service/Version.java +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/sdi/model/service/Version.java @@ -4,6 +4,8 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; +import org.gcube.spatial.data.clients.model.engine.ComparableVersion; + import lombok.Data; import lombok.NoArgsConstructor; import lombok.NonNull; @@ -26,4 +28,8 @@ public class Version { public Version(Integer maj,Integer min, Integer build){ this(maj.shortValue(),min.shortValue(),build.shortValue()); } + + public ComparableVersion asComparable() { + return new ComparableVersion(major+"."+minor+"."+build); + } } diff --git a/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/Clients.java b/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/Clients.java index 3b06f21..3979aee 100644 --- a/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/Clients.java +++ b/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/Clients.java @@ -4,6 +4,8 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.gcube.spatial.data.clients.SDIClientManager; +import org.gcube.spatial.data.clients.model.ConnectionDescriptor; +import org.gcube.spatial.data.clients.model.engine.ComparableVersion; import org.gcube.spatial.data.clients.model.engine.Range; import org.junit.Test; diff --git a/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/DumbGNClient.java b/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/DumbGNClient.java index 97aad32..385e667 100644 --- a/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/DumbGNClient.java +++ b/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/DumbGNClient.java @@ -18,7 +18,12 @@ public class DumbGNClient implements SDIGenericClient{ } @Override - public Object getRESTClient(ConnectionDescriptor conn) { + public Object getRESTClient() { + // TODO Auto-generated method stub + return null; + } + @Override + public SDIGenericClient at(ConnectionDescriptor conn) { // TODO Auto-generated method stub return null; } diff --git a/sdi-library/src/main/java/org/gcube/spatial/data/sdi/proxies/DefaultSDIManagement.java b/sdi-library/src/main/java/org/gcube/spatial/data/sdi/proxies/DefaultSDIManagement.java index 7fa8c2c..079be95 100644 --- a/sdi-library/src/main/java/org/gcube/spatial/data/sdi/proxies/DefaultSDIManagement.java +++ b/sdi-library/src/main/java/org/gcube/spatial/data/sdi/proxies/DefaultSDIManagement.java @@ -8,6 +8,8 @@ import org.gcube.common.clients.delegates.ProxyDelegate; import org.gcube.spatia.data.model.profiles.ApplicationProfile; import org.gcube.spatial.data.clients.SDIClientManager; import org.gcube.spatial.data.clients.SDIGenericClient; +import org.gcube.spatial.data.clients.model.ClientInfo; +import org.gcube.spatial.data.clients.model.ConnectionDescriptor; import org.gcube.spatial.data.clients.model.engine.Engine; import org.gcube.spatial.data.sdi.interfaces.SDIManagement; import org.gcube.spatial.data.sdi.model.ScopeConfiguration; @@ -21,15 +23,19 @@ import lombok.extern.slf4j.Slf4j; public class DefaultSDIManagement implements SDIManagement{ private final ProxyDelegate delegate; - - private SDIClientManager clientManager=new SDIClientManager(); - + + private SDIClientManager clientManager=null; + public DefaultSDIManagement(ProxyDelegate delegate) { this.delegate=delegate; - + clientManager=new SDIClientManager(); + log.debug("Available clients are "); + clientManager.list().forEach((ClientInfo c)->{ + log.debug("{}",c); + }); } - + @Override public ScopeConfiguration getConfiguration() throws RemoteException { Call call=new Call(){ @@ -44,7 +50,7 @@ public class DefaultSDIManagement implements SDIManagement{ throw new RemoteException(e); } } - + @Override public HealthReport getReport() throws RemoteException { Call call=new Call(){ @@ -59,8 +65,8 @@ public class DefaultSDIManagement implements SDIManagement{ throw new RemoteException(e); } } - - + + @Override public ApplicationProfile getProfile(String serviceClass,String serviceName) throws RemoteException { Call call=new Call(){ @@ -76,14 +82,14 @@ public class DefaultSDIManagement implements SDIManagement{ throw new RemoteException(e); } } - + @Override public SDIGenericClient getClientByEngineId(String engineId) throws Exception { ScopeConfiguration conf=getConfiguration(); - + GeoServiceDescriptor desc=null; log.info("Looking for {} under {} ",engineId,conf.getContextName()); - + switch (engineId) { case Engine.GN_ENGINE: if(conf.getGeonetworkConfiguration().size()>0) @@ -100,10 +106,17 @@ public class DefaultSDIManagement implements SDIManagement{ default: break; } - + if(desc==null) throw new Exception("No "+engineId+" available in current context. Check ScopeConfiguration object."); else log.info("Getting client for "+desc); - - return clientManager.get(engineId, desc.getVersion().toString()); + + SDIGenericClient c=clientManager.get(engineId, desc.getVersion().asComparable().getCanonical()); + if(c==null) throw new RuntimeException("No implementation available for "+engineId +":"+desc.getVersion().asComparable().getCanonical()); + + ConnectionDescriptor conn=new ConnectionDescriptor(desc.getBaseEndpoint()); + conn.addAll(desc.getAccessibleCredentials()); + log.debug("Setting defult connection {}",conn); + + return c.at(conn); } } diff --git a/sdi-library/src/test/java/org/gcube/spatial/data/sdi/SDITests.java b/sdi-library/src/test/java/org/gcube/spatial/data/sdi/SDITests.java index 36d6ba1..7dc8c75 100644 --- a/sdi-library/src/test/java/org/gcube/spatial/data/sdi/SDITests.java +++ b/sdi-library/src/test/java/org/gcube/spatial/data/sdi/SDITests.java @@ -2,6 +2,7 @@ package org.gcube.spatial.data.sdi; import java.net.MalformedURLException; +import org.gcube.spatial.data.clients.geoserver.GSRESTClient; import org.gcube.spatial.data.clients.model.engine.Engine; import org.gcube.spatial.data.sdi.interfaces.SDIManagement; import org.gcube.spatial.data.sdi.model.faults.RemoteException; @@ -28,5 +29,9 @@ public class SDITests extends BasicScopedTests{ public void getGS() throws Exception { System.out.println( SDIAbstractPlugin.management().build().getClientByEngineId(Engine.GS_ENGINE).getInfo()); + + GSRESTClient gs=(GSRESTClient) SDIAbstractPlugin.management().build().getClientByEngineId(Engine.GS_ENGINE).getRESTClient(); + gs.getWorkspaces(); + } }