From 830f57ac1a5895d77dae903a1bac452d45ac671b Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Wed, 21 Apr 2021 12:48:12 +0200 Subject: [PATCH] GS Styles --- .../data/clients/geoserver/GSRESTClient.java | 19 +------ .../clients/geoserver/GSRESTClientImpl.java | 21 ++------ .../clients/geoserver/GeoServerClient.java | 4 +- .../data/clients/geoserver/GSTests.java | 4 +- .../src/test/resources/testStyle.sld | 31 ++++++++++++ .../data/clients/AbstractGenericClient.java | 4 +- .../clients/AbstractGenericRESTClient.java | 49 ++++++++++++++++++- .../data/clients/GenericLoginClient.java | 3 +- .../data/clients/SDIClientManager.java | 20 ++++---- ...nericClient.java => SDIGenericPlugin.java} | 4 +- .../spatial/data/clients/SDIRESTClient.java | 15 ++++++ .../data/sdi/interfaces/SDIManagement.java | 4 +- .../gcube/spatial/data/sdi/DumbGNClient.java | 6 +-- .../sdi/proxies/DefaultSDIManagement.java | 6 +-- .../test/client/SimpleSDIManagerClient.java | 6 +-- 15 files changed, 130 insertions(+), 66 deletions(-) create mode 100644 gcube-geoserver-client/src/test/resources/testStyle.sld rename sdi-interface/src/main/java/org/gcube/spatial/data/clients/{SDIGenericClient.java => SDIGenericPlugin.java} (72%) create mode 100644 sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIRESTClient.java diff --git a/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GSRESTClient.java b/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GSRESTClient.java index 4d7b836..17793d4 100644 --- a/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GSRESTClient.java +++ b/gcube-geoserver-client/src/main/java/org/gcube/spatial/data/clients/geoserver/GSRESTClient.java @@ -1,26 +1,12 @@ package org.gcube.spatial.data.clients.geoserver; import java.util.List; -import java.util.Map; import org.gcube.spatial.data.clients.GenericLoginClient; -//import org.apache.commons.httpclient.NameValuePair; -//import org.gcube.application.geoportal.service.engine.RESTFeatureType; -//import org.gcube.application.geoportal.service.engine.RESTLayer; import org.gcube.spatial.data.sdi.model.faults.RemoteException; import org.json.simple.JSONObject; -//import it.geosolutions.geoserver.rest.GeoServerRESTPublisher.UploadMethod; -//import it.geosolutions.geoserver.rest.encoder.GSResourceEncoder.ProjectionPolicy; - public interface GSRESTClient extends GenericLoginClient{ - - - // Management - public boolean exist(); - - - // ********** READ OPS @@ -61,9 +47,8 @@ public interface GSRESTClient extends GenericLoginClient{ // *********** CREATE OPS public void createWorkspace(String ws)throws RemoteException,Exception; -// -// public void createStyle(String name,String content)throws RemoteException,Exception; -// public void createStyle(String name,InputStream content)throws RemoteException,Exception; + + public void createStyle(String name,String content)throws RemoteException,Exception; // // publish DB layer // publish local files 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 30d219c..db3fccf 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 @@ -213,7 +213,7 @@ public class GSRESTClientImpl extends AbstractGenericRESTClient implements GSRES public void createWorkspace(String ws) throws RemoteException, Exception { JSONObject obj=new JSONObject(); obj.put("name", ws); - post(WS_BASE_PATH,Entity.entity(new JSONObject(Collections.singletonMap("workspace", obj)),MediaType.APPLICATION_JSON)); + post(WS_BASE_PATH,new JSONObject(Collections.singletonMap("workspace", obj))); } @@ -222,23 +222,10 @@ public class GSRESTClientImpl extends AbstractGenericRESTClient implements GSRES post(WS_BASE_PATH+"/"+ws+"/"+DATASTORE_BASE_PATH, Entity.entity(parameters, MediaType.APPLICATION_JSON_TYPE)); } - - - - //************************* BASIC @Override - public boolean exist() { - try { - GXWebTargetAdapterRequest request =GXWebTargetAdapterRequest.newHTTPSRequest(getConn().getEndpoint()); - check(request.get(),null); - return true; - }catch(Exception e) { - return false; - } + public void createStyle(String name, String content) throws RemoteException, Exception { + put(STYLES_BASE_PATH+"/"+name, Entity.entity(content, "application/vnd.ogc.sld+xml")); } - - - - + } 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 cb6a403..ffda3bb 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,12 +1,12 @@ 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.SDIGenericPlugin; import org.gcube.spatial.data.clients.model.ClientInfo; import org.gcube.spatial.data.clients.model.engine.Engine; import org.gcube.spatial.data.clients.model.engine.Range; -public class GeoServerClient extends AbstractGenericClient implements SDIGenericClient{ +public class GeoServerClient extends AbstractGenericClient implements SDIGenericPlugin{ public GeoServerClient() { 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 1edacfc..d071e74 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 @@ -10,7 +10,7 @@ import java.util.UUID; import javax.sound.midi.SysexMessage; import org.gcube.sdi.test.GCubeSDITest; -import org.gcube.spatial.data.clients.SDIGenericClient; +import org.gcube.spatial.data.clients.SDIGenericPlugin; import org.gcube.spatial.data.clients.model.engine.Engine; import org.gcube.spatial.data.sdi.model.faults.RemoteException; import org.json.simple.JSONObject; @@ -20,7 +20,7 @@ public class GSTests extends GCubeSDITest{ protected GSRESTClient getClient() throws RemoteException, Exception { - SDIGenericClient obj=manager().getClientByEngineId(Engine.GS_ENGINE); + SDIGenericPlugin obj=manager().getClientByEngineId(Engine.GS_ENGINE); assertTrue(obj.getClass().isAssignableFrom(GeoServerClient.class)); return (GSRESTClient) obj.getRESTClient(); } diff --git a/gcube-geoserver-client/src/test/resources/testStyle.sld b/gcube-geoserver-client/src/test/resources/testStyle.sld new file mode 100644 index 0000000..9ca5906 --- /dev/null +++ b/gcube-geoserver-client/src/test/resources/testStyle.sld @@ -0,0 +1,31 @@ + + + + + default_line + + + Default Line + A sample style that draws a line + + + + + rule1 + Blue Line + A solid blue line with a 1 pixel width + + + #0000FF + + + + + + + \ No newline at end of file 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 e629000..73c91be 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 @@ -5,7 +5,7 @@ import java.lang.reflect.InvocationTargetException; import org.gcube.spatial.data.clients.model.ClientInfo; import org.gcube.spatial.data.clients.model.ConnectionDescriptor; -public abstract class AbstractGenericClient implements SDIGenericClient { +public abstract class AbstractGenericClient implements SDIGenericPlugin { private ConnectionDescriptor conn; private Class restClientClass; @@ -26,7 +26,7 @@ public abstract class AbstractGenericClient implements SDIGenericClient { } @Override - public SDIGenericClient at(ConnectionDescriptor conn) { + public SDIGenericPlugin at(ConnectionDescriptor conn) { this.conn=conn; 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 index b87c1c7..21bd34c 100644 --- 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 @@ -1,6 +1,7 @@ package org.gcube.spatial.data.clients; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.HashSet; import java.util.Set; @@ -49,6 +50,30 @@ public abstract class AbstractGenericRESTClient implements GenericLoginClient{ } + protected String getExistsPath() { + return conn.getEndpoint(); + } + + @Override + public boolean exist() { + try { + get(getExistsPath()); + return true; + }catch(IOException e) { + log.warn("Unable to check instance "+conn,e); + return false; + } catch (Exception e) { + log.warn("Unable to check instance "+conn,e); + return false; + } + } + + + @Override + public ConnectionDescriptor getInstance() { + return conn; + } + public void authenticate(AccessType type) { log.info("Setting access type {} ",type); conn.getCredentials().forEach((Credentials c)->{ @@ -114,8 +139,8 @@ public abstract class AbstractGenericRESTClient implements GenericLoginClient{ } - protected void post(String path,Object obj) { - + protected void post(String path,Object obj) throws Exception { + post(path,Entity.entity(obj, MediaType.APPLICATION_JSON_TYPE)); } protected T post(String path,Entity entity,Class returnClazz) throws Exception { @@ -128,6 +153,26 @@ public abstract class AbstractGenericRESTClient implements GenericLoginClient{ }); } + + protected void put(String path,Entity entity)throws Exception{ + post(path,entity,null); + } + + + protected void put(String path,Object obj) throws Exception { + post(path,Entity.entity(obj, MediaType.APPLICATION_JSON_TYPE)); + } + + protected T put(String path,Entity entity,Class returnClazz) throws Exception { + return makeCall(new Call() { + + public T call(GXWebTargetAdapterRequest endpoint) throws Exception { + return check(endpoint.path(path).post(entity),returnClazz); + }; + + }); + } + protected String get(String path) throws Exception { return get(path,String.class); } diff --git a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/GenericLoginClient.java b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/GenericLoginClient.java index 4f5b3f3..ff188e2 100644 --- a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/GenericLoginClient.java +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/GenericLoginClient.java @@ -2,11 +2,12 @@ package org.gcube.spatial.data.clients; import org.gcube.spatial.data.sdi.model.credentials.AccessType; -public interface GenericLoginClient { +public interface GenericLoginClient extends SDIRESTClient{ public void authenticate(); public void authenticate(AccessType type); + } 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 3307562..d28aa71 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 @@ -15,12 +15,12 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class SDIClientManager { - private List clients=new ArrayList(); + private List clients=new ArrayList(); public SDIClientManager() { - ServiceLoader.load(SDIGenericClient.class).forEach((SDIGenericClient c)->{clients.add(c);}); + ServiceLoader.load(SDIGenericPlugin.class).forEach((SDIGenericPlugin c)->{clients.add(c);}); log.info("Loaded {} clients ",clients.size()); - clients.forEach((SDIGenericClient c)->{ + clients.forEach((SDIGenericPlugin c)->{ log.debug("Loaded "+c.getInfo()); }); } @@ -33,9 +33,9 @@ public class SDIClientManager { * @param version * @return */ - public SDIGenericClient get(String engine,String version) { + public SDIGenericPlugin get(String engine,String version) { log.info("Looking for clients [target : {} {} ] ",engine,version); - for(SDIGenericClient c:clients) { + for(SDIGenericPlugin c:clients) { if(c.getInfo().getSupportedEngine().getEngineUniqueString().equals(engine) && c.getInfo().getSupportedEngine().getRange().supports(version)) return c; @@ -52,8 +52,8 @@ public class SDIClientManager { * @return * @throws Exception */ - public SDIGenericClient get(ConnectionDescriptor conn) throws Exception { - SDIGenericClient toReturn=get(conn.getEngineUniqueID(),conn.getVersion()); + public SDIGenericPlugin get(ConnectionDescriptor conn) throws Exception { + SDIGenericPlugin 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); } @@ -67,20 +67,20 @@ public class SDIClientManager { * @return * @throws Exception */ - public SDIGenericClient get(GeoServiceDescriptor service) throws Exception { + public SDIGenericPlugin get(GeoServiceDescriptor service) throws Exception { return get(service.getConnection()); } public List list(){ List toReturn=new ArrayList(); - clients.forEach((SDIGenericClient c)->{toReturn.add(c.getInfo());}); + clients.forEach((SDIGenericPlugin c)->{toReturn.add(c.getInfo());}); return toReturn; } public List list(String engineId){ List toReturn=new ArrayList(); - clients.forEach((SDIGenericClient c)->{ + clients.forEach((SDIGenericPlugin c)->{ if(c.getInfo().getSupportedEngine().getEngineUniqueString().equals(engineId)) 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/SDIGenericPlugin.java similarity index 72% rename from sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIGenericClient.java rename to sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIGenericPlugin.java index 9d9eb15..0baa1e0 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/SDIGenericPlugin.java @@ -3,13 +3,13 @@ package org.gcube.spatial.data.clients; import org.gcube.spatial.data.clients.model.ClientInfo; import org.gcube.spatial.data.clients.model.ConnectionDescriptor; -public interface SDIGenericClient { +public interface SDIGenericPlugin { public ClientInfo getInfo(); public Object getRESTClient(); - public SDIGenericClient at(ConnectionDescriptor conn); + public SDIGenericPlugin at(ConnectionDescriptor conn); } diff --git a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIRESTClient.java b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIRESTClient.java new file mode 100644 index 0000000..4e87d6b --- /dev/null +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIRESTClient.java @@ -0,0 +1,15 @@ +package org.gcube.spatial.data.clients; + +import org.gcube.spatial.data.clients.model.ConnectionDescriptor; + +public interface SDIRESTClient { + + + // Management + public boolean exist(); + + public ConnectionDescriptor getInstance(); + + + +} diff --git a/sdi-interface/src/main/java/org/gcube/spatial/data/sdi/interfaces/SDIManagement.java b/sdi-interface/src/main/java/org/gcube/spatial/data/sdi/interfaces/SDIManagement.java index be45873..163523f 100644 --- a/sdi-interface/src/main/java/org/gcube/spatial/data/sdi/interfaces/SDIManagement.java +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/sdi/interfaces/SDIManagement.java @@ -1,7 +1,7 @@ package org.gcube.spatial.data.sdi.interfaces; import org.gcube.spatia.data.model.profiles.ApplicationProfile; -import org.gcube.spatial.data.clients.SDIGenericClient; +import org.gcube.spatial.data.clients.SDIGenericPlugin; import org.gcube.spatial.data.clients.model.ConnectionDescriptor; import org.gcube.spatial.data.sdi.model.ScopeConfiguration; import org.gcube.spatial.data.sdi.model.faults.RemoteException; @@ -15,6 +15,6 @@ public interface SDIManagement { - public SDIGenericClient getClientByEngineId(String engineId) throws Exception; + public SDIGenericPlugin getClientByEngineId(String engineId) throws Exception; } 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 385e667..746ed99 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 @@ -1,12 +1,12 @@ package org.gcube.spatial.data.sdi; -import org.gcube.spatial.data.clients.SDIGenericClient; +import org.gcube.spatial.data.clients.SDIGenericPlugin; 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 DumbGNClient implements SDIGenericClient{ +public class DumbGNClient implements SDIGenericPlugin{ ClientInfo gnClient=new ClientInfo("dumb-gn","GeoNetwork 2","Client to communicate with GN 2","org.gcube.sdi.some.clients.Client", @@ -23,7 +23,7 @@ public class DumbGNClient implements SDIGenericClient{ return null; } @Override - public SDIGenericClient at(ConnectionDescriptor conn) { + public SDIGenericPlugin 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 afa1240..b9752ab 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 @@ -9,7 +9,7 @@ import org.gcube.common.clients.delegates.ProxyDelegate; import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; 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.SDIGenericPlugin; import org.gcube.spatial.data.clients.model.ClientInfo; import org.gcube.spatial.data.sdi.interfaces.SDIManagement; import org.gcube.spatial.data.sdi.model.ScopeConfiguration; @@ -87,13 +87,13 @@ public class DefaultSDIManagement implements SDIManagement{ } @Override - public SDIGenericClient getClientByEngineId(String engineId) throws Exception { + public SDIGenericPlugin getClientByEngineId(String engineId) throws Exception { List desc=getConfiguration().getByEngine(engineId); if(desc==null|| desc.isEmpty()) throw new Exception("No "+engineId+" available in current context. Check ScopeConfiguration object."); for(GeoServiceDescriptor d:desc) { - SDIGenericClient c=clientManager.get(d); + SDIGenericPlugin c=clientManager.get(d); if(c!=null) return c; } diff --git a/sdi-test-commons/src/main/java/org/gcube/sdi/test/client/SimpleSDIManagerClient.java b/sdi-test-commons/src/main/java/org/gcube/sdi/test/client/SimpleSDIManagerClient.java index e829b4a..c403abf 100644 --- a/sdi-test-commons/src/main/java/org/gcube/sdi/test/client/SimpleSDIManagerClient.java +++ b/sdi-test-commons/src/main/java/org/gcube/sdi/test/client/SimpleSDIManagerClient.java @@ -15,7 +15,7 @@ import org.gcube.common.gxrest.request.GXWebTargetAdapterRequest; import org.gcube.common.gxrest.response.inbound.GXInboundResponse; 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.SDIGenericPlugin; import org.gcube.spatial.data.clients.model.ConnectionDescriptor; import org.gcube.spatial.data.sdi.interfaces.SDIManagement; import org.gcube.spatial.data.sdi.model.ScopeConfiguration; @@ -108,13 +108,13 @@ public class SimpleSDIManagerClient implements SDIManagement{ } @Override - public SDIGenericClient getClientByEngineId(String engineId) throws Exception { + public SDIGenericPlugin getClientByEngineId(String engineId) throws Exception { List desc=getConfiguration().getByEngine(engineId); if(desc==null|| desc.isEmpty()) throw new Exception("No "+engineId+" available in current context. Check ScopeConfiguration object."); for(GeoServiceDescriptor d:desc) { - SDIGenericClient c=clientManager.get(d); + SDIGenericPlugin c=clientManager.get(d); if(c!=null) return c; }