From 3249c7be04c3c2dc1fca850be602e1629a224b00 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 25 Feb 2022 11:44:56 +0100 Subject: [PATCH] Default IS Provider --- .../implementations/DefaultISProvider.java | 32 ++++ .../cms/implementations/ISInterface.java | 9 +- .../ImplementationProvider.java | 7 +- .../plugins/reports/IndexDocumentReport.java | 23 ++- .../cms/tests/BasicPluginTest.java | 64 +++----- .../application/cms/tests/TestDocuments.java | 32 ++++ .../application/cms/tests/TestProfiles.java | 5 +- .../model/configuration}/MongoConnection.java | 2 +- .../model/document/ProfiledDocument.java | 5 +- .../model/document/TemporalReference.java | 13 -- .../document/spatial/SpatialReference.java | 6 + .../document/temporal/TemporalReference.java | 14 ++ .../geoportal/common/utils/ISUtils.java | 71 +++++++++ .../geoportal/service/GeoPortalService.java | 1 - .../engine/postgis/PostgisDBManager.java | 2 +- .../service/engine/providers/ISProvider.java | 25 --- .../engine/providers/MongoClientProvider.java | 46 +++++- .../service/model/internal/db/Mongo.java | 1 + .../geoportal/service/utils/ISUtils.java | 148 ------------------ .../cms/sdi/engine/DBConstants.java | 0 .../cms/sdi/engine/PostgisDBManager.java | 0 .../cms/sdi/engine/PostgisDBManagerI.java | 0 .../cms/sdi/engine/PostgisIndexer.java | 0 .../cms/sdi/engine/PostgisTable.java | 0 .../cms/sdi/engine/SDIManager.java | 0 .../cms/sdi/engine/SDIManagerWrapper.java | 0 .../cms/sdi/faults/DataParsingException.java | 0 .../sdi/faults/SDIInteractionException.java | 0 .../cms/sdi/model/SDIConfiguration.java | 0 .../cms/sdi/plugins/SDIAbstractPlugin.java | 3 +- .../cms/sdi/plugins/SDIIndexerPlugin.java | 2 +- .../sdi/plugins/SDIMaterializerPlugin.java | 0 .../cms/sdi/plugins/IndexerTest.java | 47 ++++++ .../{ => sampleFiles}/Configuration.json | 0 .../{ => sampleFiles}/centroids_index.json | 0 .../{ => sampleFiles}/layer.json | 0 .../{ => sampleFiles}/registeredFileSet.json | 0 37 files changed, 308 insertions(+), 250 deletions(-) create mode 100644 cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/DefaultISProvider.java create mode 100644 cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestDocuments.java rename {geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db => geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration}/MongoConnection.java (87%) delete mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/TemporalReference.java create mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/spatial/SpatialReference.java create mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/temporal/TemporalReference.java create mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/ISUtils.java delete mode 100644 geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ISProvider.java delete mode 100644 geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/ISUtils.java rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManagerI.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/faults/DataParsingException.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/faults/SDIInteractionException.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java (100%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java (95%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java (98%) rename {concessioni-lifecycle => sdi-plugins}/src/main/java/org/gcube/application/cms/sdi/plugins/SDIMaterializerPlugin.java (100%) create mode 100644 sdi-plugins/src/test/java/org/gcube/application/cms/sdi/plugins/IndexerTest.java rename test-data/profiledDocuments/{ => sampleFiles}/Configuration.json (100%) rename test-data/profiledDocuments/{ => sampleFiles}/centroids_index.json (100%) rename test-data/profiledDocuments/{ => sampleFiles}/layer.json (100%) rename test-data/profiledDocuments/{ => sampleFiles}/registeredFileSet.json (100%) diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/DefaultISProvider.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/DefaultISProvider.java new file mode 100644 index 0000000..0a759cf --- /dev/null +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/DefaultISProvider.java @@ -0,0 +1,32 @@ +package org.gcube.application.cms.implementations; + +import org.gcube.application.geoportal.common.model.rest.ConfigurationException; +import org.gcube.application.geoportal.common.model.rest.DatabaseConnection; +import org.gcube.application.geoportal.common.utils.ISUtils; +import org.gcube.common.resources.gcore.ServiceEndpoint; + +import java.util.List; + +public class DefaultISProvider implements ISInterface{ + + + @Override + public DatabaseConnection queryForDatabase(String category, String platform, String flagName, String flagValue) throws ConfigurationException { + return ISUtils.performQueryForDB(category, platform, flagName, flagValue); + } + + @Override + public List performGetAP(String category, String platform, String flagName, String flagValue) { + return ISUtils.performGetAP(category, platform, flagName, flagValue); + } + + @Override + public String decryptString(String toDecrypt) { + return ISUtils.decryptString(toDecrypt); + } + + @Override + public String encryptString(String toEncrypt) { + return ISUtils.encryptString(toEncrypt); + } +} diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ISInterface.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ISInterface.java index 53845af..b80b4a2 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ISInterface.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ISInterface.java @@ -2,9 +2,14 @@ package org.gcube.application.cms.implementations; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.common.model.rest.DatabaseConnection; +import org.gcube.common.resources.gcore.ServiceEndpoint; + +import java.util.List; public interface ISInterface { - public DatabaseConnection queryForDatabase(String platform, String flag) throws ConfigurationException; - + public DatabaseConnection queryForDatabase(String category, String platform,String flagName, String flagValue) throws ConfigurationException; + public List performGetAP(String category, String platform, String flagName, String flagValue); + public String decryptString(String toDecrypt); + public String encryptString(String toEncrypt); } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ImplementationProvider.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ImplementationProvider.java index 88cc28a..787c94a 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ImplementationProvider.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/implementations/ImplementationProvider.java @@ -29,5 +29,10 @@ public class ImplementationProvider { public void setEngine(Engine engine, Class clazz){ implementationsRegistry.put(clazz,engine); } - + + + private ImplementationProvider(){ + //Defaults + + } } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/IndexDocumentReport.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/IndexDocumentReport.java index 43d99a4..a11e950 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/IndexDocumentReport.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/IndexDocumentReport.java @@ -1,11 +1,32 @@ package org.gcube.application.cms.plugins.reports; +import com.fasterxml.jackson.core.JsonProcessingException; +import lombok.Getter; import lombok.NonNull; -import org.gcube.application.cms.plugins.requests.BaseExecutionRequest; +import lombok.Setter; +import org.gcube.application.cms.plugins.faults.PluginExecutionException; import org.gcube.application.cms.plugins.requests.IndexDocumentRequest; +import org.gcube.application.geoportal.common.model.document.ProfiledDocument; +import org.gcube.application.geoportal.common.model.document.spatial.SpatialReference; +import org.gcube.application.geoportal.common.model.document.temporal.TemporalReference; +@Getter +@Setter public class IndexDocumentReport extends DocumentHandlingReport { + + public TemporalReference toSetTemporalReference; + public SpatialReference toSetSpatialReference; + + public IndexDocumentReport(@NonNull IndexDocumentRequest theRequest) { super(theRequest); } + + @Override + public ProfiledDocument prepareResult() throws JsonProcessingException, PluginExecutionException { + ProfiledDocument toReturn= super.prepareResult(); + if(toSetSpatialReference != null) toReturn.setSpatialReference(toSetSpatialReference); + if(toSetTemporalReference != null) toReturn.setTemporalReference(toSetTemporalReference); + return toReturn; + } } diff --git a/cms-test-commons/src/main/java/org/gcube/application/cms/tests/BasicPluginTest.java b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/BasicPluginTest.java index f0d30a5..89dd98b 100644 --- a/cms-test-commons/src/main/java/org/gcube/application/cms/tests/BasicPluginTest.java +++ b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/BasicPluginTest.java @@ -1,49 +1,34 @@ package org.gcube.application.cms.tests; -import ch.qos.logback.core.net.SyslogOutputStream; +import org.gcube.application.cms.implementations.ISInterface; +import org.gcube.application.cms.implementations.ImplementationProvider; import org.gcube.application.cms.plugins.InitializablePlugin; -import org.gcube.application.cms.plugins.MaterializationPlugin; import org.gcube.application.cms.plugins.Plugin; import org.gcube.application.cms.plugins.PluginsReflections; import org.gcube.application.cms.plugins.faults.InitializationException; -import org.gcube.application.cms.plugins.requests.MaterializationRequest; import org.gcube.application.geoportal.common.utils.tests.GCubeTest; import org.junit.Assert; -import org.junit.Before; import org.junit.BeforeClass; -import org.junit.Test; -import org.reflections.Reflections; -import org.reflections.util.ConfigurationBuilder; -import org.reflections.util.FilterBuilder; -import java.rmi.ServerError; -import java.util.ArrayList; -import java.util.List; -import java.util.ServiceLoader; -import java.util.concurrent.atomic.AtomicLong; - -import static org.junit.Assume.assumeTrue; +import java.util.HashMap; +import java.util.Map; public class BasicPluginTest { - protected String context; - static List plugins=new ArrayList<>(); + + protected static Map plugins=new HashMap<>(); @BeforeClass public static void checkPluginRegistration() { - plugins.addAll(PluginsReflections.load().values()); - plugins.forEach(plugin -> System.out.println()); + plugins.putAll(PluginsReflections.load()); + plugins.forEach((s,p) -> System.out.println(s+" "+p.getDescriptor())); Assert.assertFalse(plugins.isEmpty()); - System.out.println("Plugin Loading OK"); - } - @Test - public void init(){ - plugins.forEach(p->{ + plugins.forEach((s,p)->{ System.out.println("INIT Plugin "+p.getClass()); Assert.assertNotNull(p.getDescriptor()); Assert.assertNotNull(p.getDescriptor().getId()); @@ -53,35 +38,24 @@ public class BasicPluginTest { InitializablePlugin ip=(InitializablePlugin)p; try { ip.init(); + + if(GCubeTest.isTestInfrastructureEnabled()){ + TokenSetter.set(GCubeTest.getContext()); + ip.initInContext(); + } } catch (InitializationException e) { e.printStackTrace(System.err); Assert.fail("Unable to Init "+p.getDescriptor().getId()); } } }); - } - @Test - public void initInContext(){ - assumeTrue(GCubeTest.isTestInfrastructureEnabled()); - plugins.forEach(p->{ - TokenSetter.set(context); - System.out.println("INIT Plugin "+p.getClass()+" in "+context); - Assert.assertNotNull(p.getDescriptor()); - Assert.assertNotNull(p.getDescriptor().getId()); - Assert.assertNotNull(p.getDescriptor().getType()); - Assert.assertNotNull(p.getDescriptor().getVersion()); - if(p instanceof InitializablePlugin){ - InitializablePlugin ip=(InitializablePlugin)p; - try { - ip.initInContext(); - } catch (InitializationException e) { - e.printStackTrace(System.err); - Assert.fail("Unable to Init "+p.getDescriptor().getId()); - } - } - }); + System.out.println("Plugin Loading OK"); + + if(GCubeTest.isTestInfrastructureEnabled()){ + ImplementationProvider.get().setEngine(new ISProvider(), ISInterface.class); + } } } diff --git a/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestDocuments.java b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestDocuments.java new file mode 100644 index 0000000..cfd7c24 --- /dev/null +++ b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestDocuments.java @@ -0,0 +1,32 @@ +package org.gcube.application.cms.tests; + +import org.gcube.application.cms.serialization.Serialization; +import org.gcube.application.geoportal.common.model.document.ProfiledDocument; +import org.gcube.application.geoportal.common.model.profile.Profile; +import org.gcube.application.geoportal.common.utils.Files; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.HashMap; + +public class TestDocuments { + public static File BASE_FOLDER =new File("../test-data/profiledDocuments"); + public static final HashMap documentMap =new HashMap<>(); + + static{ + + for(File f:BASE_FOLDER.listFiles()){ + try { + if(!f.isDirectory()) { + ProfiledDocument p = Serialization.read( + Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()), ProfiledDocument.class); + documentMap.put(f.getName(), p); + } + } catch (IOException e) { + throw new RuntimeException("Unable to read "+f.getAbsolutePath(),e); + } + } + } + +} diff --git a/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestProfiles.java b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestProfiles.java index 8b151fa..363b929 100644 --- a/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestProfiles.java +++ b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/TestProfiles.java @@ -19,8 +19,9 @@ public class TestProfiles { for(File f:BASE_FOLDER.listFiles()){ try { - profiles.put(f.getName(), Serialization.read( - Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()),Profile.class)); + Profile p =Serialization.read( + Files.readFileAsString(f.getAbsolutePath(), Charset.defaultCharset()),Profile.class); + profiles.put(p.getId(), p); } catch (IOException e) { throw new RuntimeException("Unable to read "+f.getAbsolutePath(),e); } diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/MongoConnection.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/MongoConnection.java similarity index 87% rename from geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/MongoConnection.java rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/MongoConnection.java index 30e1509..40a1ab5 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/MongoConnection.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/MongoConnection.java @@ -1,4 +1,4 @@ -package org.gcube.application.geoportal.service.model.internal.db; +package org.gcube.application.geoportal.common.model.configuration; import lombok.Data; diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java index 0e78001..d5854d2 100644 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java @@ -1,12 +1,13 @@ package org.gcube.application.geoportal.common.model.document; import com.fasterxml.jackson.annotation.JsonProperty; -import com.mongodb.client.model.geojson.GeoJsonObjectType; import com.vdurmont.semver4j.Semver; import lombok.*; import org.bson.Document; import org.gcube.application.geoportal.common.model.document.accounting.PublicationInfo; import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation; +import org.gcube.application.geoportal.common.model.document.spatial.SpatialReference; +import org.gcube.application.geoportal.common.model.document.temporal.TemporalReference; @NoArgsConstructor @@ -52,7 +53,7 @@ public class ProfiledDocument { // Expected GEOJSON @JsonProperty(SPATIAL_REFERENCE) - private Document spatialReference; + private SpatialReference spatialReference; @JsonProperty(TEMPORAL_REFERENCE) private TemporalReference temporalReference; diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/TemporalReference.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/TemporalReference.java deleted file mode 100644 index 889db6e..0000000 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/TemporalReference.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.gcube.application.geoportal.common.model.document; - -import lombok.*; - -@NoArgsConstructor -@AllArgsConstructor -@Getter -@Setter -@ToString -public class TemporalReference { - - private String field; -} diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/spatial/SpatialReference.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/spatial/SpatialReference.java new file mode 100644 index 0000000..c38f6b9 --- /dev/null +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/spatial/SpatialReference.java @@ -0,0 +1,6 @@ +package org.gcube.application.geoportal.common.model.document.spatial; + +import org.bson.Document; + +public class SpatialReference extends Document { +} diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/temporal/TemporalReference.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/temporal/TemporalReference.java new file mode 100644 index 0000000..4e0c763 --- /dev/null +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/temporal/TemporalReference.java @@ -0,0 +1,14 @@ +package org.gcube.application.geoportal.common.model.document.temporal; + +import lombok.*; +import org.bson.Document; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +@ToString +public class TemporalReference extends Document { + + private String field; +} diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/ISUtils.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/ISUtils.java new file mode 100644 index 0000000..4cb1fce --- /dev/null +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/ISUtils.java @@ -0,0 +1,71 @@ +package org.gcube.application.geoportal.common.utils; + + +import org.gcube.application.geoportal.common.model.configuration.MongoConnection; +import org.gcube.application.geoportal.common.model.rest.DatabaseConnection; +import org.gcube.application.geoportal.common.model.rest.ConfigurationException; +import org.gcube.common.encryption.encrypter.StringEncrypter; +import org.gcube.common.resources.gcore.ServiceEndpoint; +import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint; +import org.gcube.common.resources.gcore.ServiceEndpoint.Property; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; + +import java.util.List; +import java.util.Map; + +import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; + +public class ISUtils { + + + public static DatabaseConnection performQueryForDB(String category, String platform,String flagName, String flag) throws ConfigurationException { + + List found=performGetAP(category,platform, flagName,flag); + if(found.size()>1) { + throw new ConfigurationException("Multiple SE found ["+found.size()+"] for platform : "+platform+" flag : "+flag); + }else if (found.isEmpty()){ + throw new ConfigurationException("No SE found for platform : "+platform+" flag : "+flag); + } + AccessPoint point=found.get(0); + + DatabaseConnection toReturn=new DatabaseConnection(); + toReturn.setPwd(decryptString(point.password())); + toReturn.setUser(point.username()); + toReturn.setUrl(point.address()); + return toReturn; + + } + + + public static List performGetAP(String category,String platform,String flagName,String flagValue) { + SimpleQuery query = queryFor(ServiceEndpoint.class); + + query.addCondition("$resource/Profile/Category/text() eq '"+category+"'") + .addCondition("$resource/Profile/Platform/Name/text() eq '"+platform+"'") + .addCondition("$resource/Profile/AccessPoint//Property[Name/text() eq '"+ + flagName+"'][Value/text() eq '"+flagValue+"']") + .setResult("$resource/Profile/AccessPoint"); + + DiscoveryClient client = clientFor(AccessPoint.class); + return client.submit(query); + } + + + public static String decryptString(String toDecrypt){ + try{ + return StringEncrypter.getEncrypter().decrypt(toDecrypt); + }catch(Exception e) { + throw new RuntimeException("Unable to decrypt : "+toDecrypt,e); + } + } + + public static String encryptString(String toEncrypt){ + try{ + return StringEncrypter.getEncrypter().encrypt(toEncrypt); + }catch(Exception e) { + throw new RuntimeException("Unable to decrypt : "+toEncrypt,e); + } + } +} diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/GeoPortalService.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/GeoPortalService.java index 1653a0f..77d7342 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/GeoPortalService.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/GeoPortalService.java @@ -37,7 +37,6 @@ public class GeoPortalService extends ResourceConfig{ log.info("Setting implementations .. "); - ImplementationProvider.get().setEngine(new ISProvider(),ISInterface.class); ImplementationProvider.get().setEngine(new MongoClientProvider(), Mongo.class); ImplementationProvider.get().setEngine(new StorageClientProvider(), StorageUtils.class); ImplementationProvider.get().setEngine(new PostgisConnectionProvider(), PostgisDBManager.class); diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/postgis/PostgisDBManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/postgis/PostgisDBManager.java index 57a50c7..b7bff44 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/postgis/PostgisDBManager.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/postgis/PostgisDBManager.java @@ -9,7 +9,7 @@ import org.gcube.application.cms.implementations.ImplementationProvider; import org.gcube.application.geoportal.service.model.internal.db.PostgisTable; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.service.model.internal.faults.DataParsingException; -import org.gcube.application.geoportal.service.utils.ISUtils; +import org.gcube.application.geoportal.common.utils.ISUtils; import java.sql.*; import java.util.regex.Matcher; diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ISProvider.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ISProvider.java deleted file mode 100644 index 59cbb01..0000000 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ISProvider.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.gcube.application.geoportal.service.engine.providers; - -import org.gcube.application.cms.caches.Engine; -import org.gcube.application.cms.implementations.ISInterface; -import org.gcube.application.geoportal.common.model.rest.ConfigurationException; -import org.gcube.application.geoportal.service.utils.ISUtils; - -public class ISProvider implements Engine { - - - - - - - @Override - public void init() { } - - @Override - public void shutdown() {} - - @Override - public ISInterface getObject() throws ConfigurationException { - return new ISUtils(); - } -} diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/MongoClientProvider.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/MongoClientProvider.java index a41b1e5..d30ea23 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/MongoClientProvider.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/MongoClientProvider.java @@ -6,9 +6,13 @@ import org.gcube.application.cms.implementations.ISInterface; import org.gcube.application.geoportal.service.ServiceConstants; import org.gcube.application.cms.implementations.ImplementationProvider; import org.gcube.application.geoportal.service.model.internal.db.Mongo; -import org.gcube.application.geoportal.service.model.internal.db.MongoConnection; +import org.gcube.application.geoportal.common.model.configuration.MongoConnection; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; -import org.gcube.application.geoportal.service.utils.ISUtils; +import org.gcube.application.geoportal.common.utils.ISUtils; +import org.gcube.common.resources.gcore.ServiceEndpoint; + +import java.util.List; +import java.util.Map; @Slf4j public class MongoClientProvider extends AbstractScopedMap { @@ -21,10 +25,12 @@ public class MongoClientProvider extends AbstractScopedMap { @Override protected Mongo retrieveObject() throws ConfigurationException { - MongoConnection conn=((ISUtils)ImplementationProvider.get(). - getEngineByClass(ISInterface.class)). - queryForMongoDB( - ServiceConstants.MONGO_SE_PLATFORM, ServiceConstants.MONGO_SE_GNA_FLAG); + MongoConnection conn=performQueryForMongoDB(ImplementationProvider.get(). + getEngineByClass(ISInterface.class), + ServiceConstants.SE_GNA_DB_CATEGORY, + ServiceConstants.MONGO_SE_PLATFORM, + ServiceConstants.SE_GNA_DB_FLAG, + ServiceConstants.MONGO_SE_GNA_FLAG); log.debug("Connecting to "+conn); return new Mongo(conn); @@ -39,4 +45,32 @@ public class MongoClientProvider extends AbstractScopedMap { public void init() { // TODO Auto-generated method stub } + + + private static MongoConnection performQueryForMongoDB(ISInterface is,String category, String platform,String flagName, String flagValue) throws ConfigurationException { + + List found=is.performGetAP(category,platform,flagName, flagValue); + if(found.size()>1) { + throw new ConfigurationException("Multiple SE found ["+found.size()+"] for platform : "+platform+" flag : "+flagValue); + }else if (found.isEmpty()){ + throw new ConfigurationException("No SE found for platform : "+platform+" flag : "+flagValue); + } + ServiceEndpoint.AccessPoint point=found.get(0); + MongoConnection toReturn=new MongoConnection(); + for(ServiceEndpoint.Property prop:point.properties()) { + switch(prop.name()) { + case "host" : { + toReturn.getHosts().add(prop.value()); + break;} + } + } + toReturn.getHosts().add(point.address()); + Map props=point.propertyMap(); + toReturn.setDatabase(props.get("database").value()); + toReturn.setPassword(is.decryptString(point.password())); + toReturn.setPort(Integer.parseInt(props.get("port").value())); + toReturn.setUser(point.username()); + + return toReturn; + } } diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/Mongo.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/Mongo.java index dff03dc..ed08e62 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/Mongo.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/Mongo.java @@ -7,6 +7,7 @@ import com.mongodb.ServerAddress; import lombok.Getter; import lombok.ToString; import lombok.extern.slf4j.Slf4j; +import org.gcube.application.geoportal.common.model.configuration.MongoConnection; @Slf4j @ToString diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/ISUtils.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/ISUtils.java deleted file mode 100644 index 38f577c..0000000 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/ISUtils.java +++ /dev/null @@ -1,148 +0,0 @@ -package org.gcube.application.geoportal.service.utils; - -import org.gcube.application.cms.implementations.ISInterface; -import org.gcube.application.geoportal.common.model.rest.DatabaseConnection; -import org.gcube.application.geoportal.service.ServiceConstants; -import org.gcube.application.geoportal.service.model.internal.db.MongoConnection; -import org.gcube.application.geoportal.common.model.rest.ConfigurationException; -import org.gcube.common.encryption.encrypter.StringEncrypter; -import org.gcube.common.resources.gcore.ServiceEndpoint; -import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint; -import org.gcube.common.resources.gcore.ServiceEndpoint.Property; -import org.gcube.resources.discovery.client.api.DiscoveryClient; -import org.gcube.resources.discovery.client.queries.api.SimpleQuery; - -import java.util.List; -import java.util.Map; - -import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; -import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; - -public class ISUtils implements ISInterface { - - - - - public DatabaseConnection queryForDB(String platform, String flag) throws ConfigurationException { - return ISUtils.performQueryForDB(platform,flag); - } - -// public List GetAP(String platform,String flag) { -// return performGetAP(platform,flag); -// } - - private static DatabaseConnection performQueryForDB(String platform, String flag) throws ConfigurationException { - - List found=performGetAP(platform, flag); - if(found.size()>1) { - throw new ConfigurationException("Multiple SE found ["+found.size()+"] for platform : "+platform+" flag : "+flag); - }else if (found.isEmpty()){ - throw new ConfigurationException("No SE found for platform : "+platform+" flag : "+flag); - } - AccessPoint point=found.get(0); - - DatabaseConnection toReturn=new DatabaseConnection(); - toReturn.setPwd(decryptString(point.password())); - toReturn.setUser(point.username()); - toReturn.setUrl(point.address()); - return toReturn; - - } - - - private static List performGetAP(String platform,String flag) { - SimpleQuery query = queryFor(ServiceEndpoint.class); - - query.addCondition("$resource/Profile/Category/text() eq '"+ServiceConstants.SE_GNA_DB_CATEGORY+"'") - .addCondition("$resource/Profile/Platform/Name/text() eq '"+platform+"'") - .addCondition("$resource/Profile/AccessPoint//Property[Name/text() eq '"+ - ServiceConstants.SE_GNA_DB_FLAG+"'][Value/text() eq '"+flag+"']") - .setResult("$resource/Profile/AccessPoint"); - - DiscoveryClient client = clientFor(AccessPoint.class); - return client.submit(query); - } - - public MongoConnection queryForMongoDB(String platform,String flag) throws ConfigurationException { - return performQueryForMongoDB(platform,flag); - } - - private static MongoConnection performQueryForMongoDB(String platform,String flag) throws ConfigurationException { - - List found=performGetAP(platform, flag); - if(found.size()>1) { - throw new ConfigurationException("Multiple SE found ["+found.size()+"] for platform : "+platform+" flag : "+flag); - }else if (found.isEmpty()){ - throw new ConfigurationException("No SE found for platform : "+platform+" flag : "+flag); - } - AccessPoint point=found.get(0); - MongoConnection toReturn=new MongoConnection(); - for(Property prop:point.properties()) { - switch(prop.name()) { - case "host" : { - toReturn.getHosts().add(prop.value()); - break;} - } - } - toReturn.getHosts().add(point.address()); - Map props=point.propertyMap(); - toReturn.setDatabase(props.get("database").value()); - toReturn.setPassword(decryptString(point.password())); - toReturn.setPort(Integer.parseInt(props.get("port").value())); - toReturn.setUser(point.username()); - - return toReturn; - } -// -// -// -// private static String getToken() throws ConfigurationException { -// SimpleQuery query = queryFor(ServiceEndpoint.class); -// -// query.addCondition("$resource/Profile/Category/text() eq 'Application'") -// .addCondition("$resource/Profile/Name/text() eq 'GNA-APP'") -// .setResult("$resource/Profile/AccessPoint"); -// -// DiscoveryClient client = clientFor(AccessPoint.class); -// -// List found= client.submit(query); -// if(found.size()>1) { -// throw new ConfigurationException("Multiple Token SE found ["+found.size()+"] for Category : Application name : GNA-APP"); -// }else if (found.isEmpty()){ -// throw new ConfigurationException("No Token SE found ["+found.size()+"] for Category : Application name : GNA-APP"); -// } -// -// AccessPoint point=found.get(0); -// return decryptString(point.password()); -// -// } -// -// - private static String decryptString(String toDecrypt){ - try{ - return StringEncrypter.getEncrypter().decrypt(toDecrypt); - }catch(Exception e) { - throw new RuntimeException("Unable to decrypt : "+toDecrypt,e); - } - } - - @Override - public DatabaseConnection queryForDatabase(String platform, String flag) throws ConfigurationException { - return queryForDB(platform,flag); - } -// -// -// private static String getgCubeBaseEndpoint(String category,String name) { -// -// SimpleQuery query = queryFor(ServiceEndpoint.class); -// -// query.addCondition("$resource/Profile/Category/text() eq '"+category+"'") -// .addCondition("$resource/Profile/Name/text() eq '"+name+"'"); -// DiscoveryClient client = clientFor(ServiceEndpoint.class); -// -// AccessPoint point=client.submit(query).get(0).profile().accessPoints().asCollection().iterator().next(); -// -// return point.address(); -// } - -} diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/DBConstants.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManager.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManagerI.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManagerI.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManagerI.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisDBManagerI.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisIndexer.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/PostgisTable.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManager.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/engine/SDIManagerWrapper.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/faults/DataParsingException.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/faults/DataParsingException.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/faults/DataParsingException.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/faults/DataParsingException.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/faults/SDIInteractionException.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/faults/SDIInteractionException.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/faults/SDIInteractionException.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/faults/SDIInteractionException.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/model/SDIConfiguration.java diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java similarity index 95% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java index 28f6899..467eba8 100644 --- a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java +++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIAbstractPlugin.java @@ -17,6 +17,7 @@ import org.gcube.application.cms.sdi.engine.SDIManager; import org.gcube.application.cms.sdi.engine.SDIManagerWrapper; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.common.model.rest.DatabaseConnection; +import org.gcube.data.transfer.model.ServiceConstants; import java.time.Duration; import java.time.temporal.ChronoUnit; @@ -52,7 +53,7 @@ public abstract class SDIAbstractPlugin extends AbstractPlugin implements Initia protected DatabaseConnection retrieveObject() throws ConfigurationException { try { return ImplementationProvider.get().getEngineByClass(ISInterface.class). - queryForDatabase("postgis", "Concessioni"); + queryForDatabase("Database","postgis", "GNA_DB","Concessioni"); } catch (Exception e) { throw new ConfigurationException(e); } diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java similarity index 98% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java index 1b45995..4e7e4c7 100644 --- a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java +++ b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIIndexerPlugin.java @@ -42,7 +42,7 @@ public class SDIIndexerPlugin extends SDIAbstractPlugin implements IndexerPlugin - private static final PluginDescriptor DESCRIPTOR=new PluginDescriptor("SDI-Indexer-Plugin", + static final PluginDescriptor DESCRIPTOR=new PluginDescriptor("SDI-Indexer-Plugin", PluginDescriptor.BaseTypes.INDEXER); static { diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/plugins/SDIMaterializerPlugin.java b/sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIMaterializerPlugin.java similarity index 100% rename from concessioni-lifecycle/src/main/java/org/gcube/application/cms/sdi/plugins/SDIMaterializerPlugin.java rename to sdi-plugins/src/main/java/org/gcube/application/cms/sdi/plugins/SDIMaterializerPlugin.java diff --git a/sdi-plugins/src/test/java/org/gcube/application/cms/sdi/plugins/IndexerTest.java b/sdi-plugins/src/test/java/org/gcube/application/cms/sdi/plugins/IndexerTest.java new file mode 100644 index 0000000..4a24e8d --- /dev/null +++ b/sdi-plugins/src/test/java/org/gcube/application/cms/sdi/plugins/IndexerTest.java @@ -0,0 +1,47 @@ +package org.gcube.application.cms.sdi.plugins; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.bson.Document; +import org.gcube.application.cms.plugins.IndexerPluginInterface; +import org.gcube.application.cms.plugins.faults.PluginExecutionException; +import org.gcube.application.cms.plugins.reports.IndexDocumentReport; +import org.gcube.application.cms.plugins.reports.Report; +import org.gcube.application.cms.plugins.requests.IndexDocumentRequest; +import org.gcube.application.cms.sdi.plugins.SDIIndexerPlugin; +import org.gcube.application.cms.serialization.Serialization; +import org.gcube.application.cms.tests.BasicPluginTest; +import org.gcube.application.cms.tests.TestDocuments; +import org.gcube.application.cms.tests.TestProfiles; +import org.gcube.application.geoportal.common.model.document.ProfiledDocument; +import org.gcube.application.geoportal.common.utils.Files; +import org.gcube.application.geoportal.common.utils.tests.GCubeTest; +import org.junit.Test; + +import static org.junit.Assume.assumeTrue; + +public class IndexerTest extends BasicPluginTest { + + @Test + public void testIndexRequest() throws PluginExecutionException, JsonProcessingException { + assumeTrue(GCubeTest.isTestInfrastructureEnabled()); + IndexDocumentRequest request=new IndexDocumentRequest(); + + ProfiledDocument doc= TestDocuments.documentMap.get("profiledConcessioniExample.json"); + request.setProfile(TestProfiles.profiles.get(doc.getProfileID())); + request.setDocument(doc); + Document parameters = new Document(); + parameters.put("workspace", "testing_workspace"); + parameters.put("indexName", "unique_index"+System.currentTimeMillis()); + request.setCallParameters(parameters); + + IndexerPluginInterface plugin = (IndexerPluginInterface) plugins.get(SDIIndexerPlugin.DESCRIPTOR.getId()); + + IndexDocumentReport response = plugin.index(request); + assumeTrue(response!=null); + response.validate(); + + assumeTrue(response.getStatus().equals(Report.Status.OK)); + assumeTrue(response.prepareResult().getSpatialReference()!=null); + } + +} diff --git a/test-data/profiledDocuments/Configuration.json b/test-data/profiledDocuments/sampleFiles/Configuration.json similarity index 100% rename from test-data/profiledDocuments/Configuration.json rename to test-data/profiledDocuments/sampleFiles/Configuration.json diff --git a/test-data/profiledDocuments/centroids_index.json b/test-data/profiledDocuments/sampleFiles/centroids_index.json similarity index 100% rename from test-data/profiledDocuments/centroids_index.json rename to test-data/profiledDocuments/sampleFiles/centroids_index.json diff --git a/test-data/profiledDocuments/layer.json b/test-data/profiledDocuments/sampleFiles/layer.json similarity index 100% rename from test-data/profiledDocuments/layer.json rename to test-data/profiledDocuments/sampleFiles/layer.json diff --git a/test-data/profiledDocuments/registeredFileSet.json b/test-data/profiledDocuments/sampleFiles/registeredFileSet.json similarity index 100% rename from test-data/profiledDocuments/registeredFileSet.json rename to test-data/profiledDocuments/sampleFiles/registeredFileSet.json