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 new file mode 100644 index 0000000..add1736 --- /dev/null +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIClientManager.java @@ -0,0 +1,39 @@ +package org.gcube.spatial.data.clients; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.ServiceLoader; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class SDIClientManager { + + private Collection clients=new ArrayList(); + + public SDIClientManager() { + ServiceLoader.load(SDIGenericClient.class).forEach((SDIGenericClient c)->{clients.add(c);}); + log.info("Loaded {} clients ",clients.size()); + clients.forEach((SDIGenericClient c)->{ + log.debug("Loaded "+c.getInfo()); + }); + } + + + /** + * Returns the implementation for the target engine. Null if no suitable plugin is found + * + * @param engine + * @param version + * @return + */ + public SDIGenericClient get(String engine,String version) { + log.info("Looking for clients [target : {} {} ] ",engine,version); + for(SDIGenericClient c:clients) { + if(c.getInfo().getSupportedEngine().getEngineUniqueString().equals(engine) + && c.getInfo().getSupportedEngine().getRange().supports(version)) + return c; + } + return null; + } +} diff --git a/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIClientValidator.java b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIClientValidator.java new file mode 100644 index 0000000..7be8a75 --- /dev/null +++ b/sdi-interface/src/main/java/org/gcube/spatial/data/clients/SDIClientValidator.java @@ -0,0 +1,5 @@ +package org.gcube.spatial.data.clients; + +public class SDIClientValidator { + +} 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 5606815..3b06f21 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 @@ -3,8 +3,7 @@ package org.gcube.spatial.data.sdi; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import org.gcube.spatial.data.clients.model.ClientInfo; -import org.gcube.spatial.data.clients.model.engine.Engine; +import org.gcube.spatial.data.clients.SDIClientManager; import org.gcube.spatial.data.clients.model.engine.Range; import org.junit.Test; @@ -12,8 +11,7 @@ public class Clients { @Test public void testRanges() { - ClientInfo gnClient=new ClientInfo("gn2-client","GeoNetwork 2","Client to communicate with GN 2","org.gcube.sdi.some.clients.Client", - new Engine(Engine.GN_ENGINE,"",new Range("1.1.0",null))); + assertFalse(new Range("1.1.0",null).supports("0.0.1")); @@ -27,4 +25,9 @@ public class Clients { } + + @Test + public void testLoading() { + System.out.println(new SDIClientManager().get("dumb-gn", "1.5.7rc").getInfo()); + } } 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 new file mode 100644 index 0000000..97aad32 --- /dev/null +++ b/sdi-interface/src/test/java/org/gcube/spatial/data/sdi/DumbGNClient.java @@ -0,0 +1,25 @@ +package org.gcube.spatial.data.sdi; + +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 DumbGNClient implements SDIGenericClient{ + + + ClientInfo gnClient=new ClientInfo("dumb-gn","GeoNetwork 2","Client to communicate with GN 2","org.gcube.sdi.some.clients.Client", + new Engine("dumb-gn","",new Range("1.1.0","2.20"))); + + @Override + public ClientInfo getInfo() { + return gnClient; + } + + @Override + public Object getRESTClient(ConnectionDescriptor conn) { + // TODO Auto-generated method stub + return null; + } +} diff --git a/sdi-interface/src/test/resources/META-INF/services/org.gcube.spatial.data.clients.SDIGenericClient b/sdi-interface/src/test/resources/META-INF/services/org.gcube.spatial.data.clients.SDIGenericClient new file mode 100644 index 0000000..c9f4111 --- /dev/null +++ b/sdi-interface/src/test/resources/META-INF/services/org.gcube.spatial.data.clients.SDIGenericClient @@ -0,0 +1 @@ +org.gcube.spatial.data.sdi.DumbGNClient \ No newline at end of file