From b827ba2f136ebef2a682cc3a87e0bd57f3eacd66 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Thu, 10 Mar 2022 18:15:10 +0100 Subject: [PATCH] Configuration --- .../cms/caches/AbstractScopedMap.java | 62 ++++---------- .../gcube/application/cms/caches/Cache.java | 8 ++ .../application/cms/caches/TimedMap.java | 58 +++++++++++++ .../ImplementationProvider.java | 3 +- .../cms/plugins/LifecycleManager.java | 2 +- .../plugins/reports/IndexDocumentReport.java | 1 - .../cms/tests/model/DummyPlugin.java | 2 +- .../plugins/ConcessioniLifeCycleManager.java | 2 +- .../client/DefaultDocumentsClient.java | 3 +- .../client/DefaultMongoConcessioni.java | 2 +- .../client/DefaultProfiledConcessioni.java | 2 +- .../geoportal/client/ResponseCommons.java | 2 + .../clients/ProfiledDocumentsTest.java | 2 +- .../geoportal/clients/UCDTests.java | 27 ++++-- .../common/model/BasicJSONObject.java | 7 -- .../common/model/configuration/Archive.java | 22 +++++ .../model/configuration/Configuration.java | 37 +++++++++ .../common/model/configuration/Index.java | 16 ++++ .../common/model/document/Project.java | 1 - .../document/spatial/SpatialReference.java | 6 -- .../common/model/rest/Configuration.java | 41 --------- .../common/rest/MongoConcessioni.java | 2 +- .../geoportal/common/rest/Projects.java | 2 +- .../common/utils/tests/GCubeTest.java | 4 +- .../geoportal/service/GeoPortalService.java | 1 + .../service/engine/WorkspaceManager.java | 6 ++ .../geoportal/service/engine/cache/Cache.java | 9 -- .../handlers/SimpleLifeCycleManager.java | 2 +- .../service/engine/mongo/MongoManagerI.java | 2 +- .../engine/mongo/ProfiledMongoManager.java | 32 ++++++- .../engine/providers/ConfigurationCache.java | 64 ++++++++++++++ .../engine/providers/MongoClientProvider.java | 7 +- .../engine/providers/PluginManager.java | 3 +- .../providers/PostgisConnectionProvider.java | 2 +- .../engine/providers/ProfileMapCache.java | 2 +- .../providers/StorageClientProvider.java | 2 +- .../service/engine/providers/UCDManager.java | 2 +- .../service/rest/ConcessioniOverMongo.java | 3 +- .../geoportal/service/rest/Plugins.java | 9 ++ .../service/rest/ProfiledDocuments.java | 10 ++- .../geoportal/service/UCDTests.java | 56 +++++++++++++ .../service/engine/caches/DummyCache.java | 2 +- .../AbstractProfiledDocumentsTests.java | 2 +- .../cms/sdi/plugins/SDIAbstractPlugin.java | 6 +- .../cms/sdi/plugins/SDIIndexerPlugin.java | 1 - .../sampleFiles/Configuration.json | 6 +- .../ExportConcessioniAsProfiledDocuments.java | 4 + ...xport.java => ExportMongoConcessioni.java} | 83 ++----------------- 48 files changed, 395 insertions(+), 235 deletions(-) create mode 100644 cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/Cache.java create mode 100644 cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/TimedMap.java delete mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/BasicJSONObject.java create mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Archive.java create mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Configuration.java delete mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/spatial/SpatialReference.java delete mode 100644 geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/rest/Configuration.java delete mode 100644 geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/cache/Cache.java create mode 100644 geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ConfigurationCache.java create mode 100644 geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Plugins.java create mode 100644 geoportal-service/src/test/java/org/gcube/application/geoportal/service/UCDTests.java create mode 100644 use-cases/src/test/java/org/gcube/application/cms/usecases/ExportConcessioniAsProfiledDocuments.java rename use-cases/src/test/java/org/gcube/application/cms/usecases/{Export.java => ExportMongoConcessioni.java} (56%) diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/AbstractScopedMap.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/AbstractScopedMap.java index 8dbb654..6e2e30c 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/AbstractScopedMap.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/AbstractScopedMap.java @@ -14,45 +14,25 @@ import java.time.temporal.TemporalAmount; import java.util.concurrent.ConcurrentHashMap; @Slf4j -@RequiredArgsConstructor -public abstract class AbstractScopedMap implements Engine{ +/** + * TTL Map Context -> T + * + */ +public abstract class AbstractScopedMap extends TimedMap implements Engine{ - // scope-> object - private ConcurrentHashMap> scopeMap=new ConcurrentHashMap>(); - - @Setter - private TemporalAmount TTL=null; - - @NonNull - private String name; - @Synchronized - public T getObject() throws ConfigurationException { - String currentScope= ContextUtils.getCurrentScope(); - log.debug(name+" : obtaining object for context "+currentScope); - - TTLObject found=scopeMap.get(currentScope); - - if(found== null){ - log.debug(name+" : init object for context "+currentScope); - TTLObject toPut=new TTLObject(LocalDateTime.now(),retrieveObject()); - scopeMap.put(currentScope, toPut); - return toPut.getTheObject(); - } - - if(TTL!=null) { - if(found.getCreationTime().plus(TTL).isBefore(LocalDateTime.now())) { - log.debug(name+" : elapsed TTL, disposing.."); - dispose(found.getTheObject()); - TTLObject newer=new TTLObject(LocalDateTime.now(),retrieveObject()); - scopeMap.put(currentScope, newer); - found=scopeMap.get(currentScope); - } - }else {log.debug(name+" : TTL is null, never disposing..");} - log.debug(name+"Returning {} ",found); - return found.getTheObject(); + public AbstractScopedMap(@NonNull String name) { + super(name); } - - + + @Override + public T getObject() throws ConfigurationException { + return get(ContextUtils.getCurrentScope()); + } + + + @Override + public void init() {} + @Override public void shutdown() { log.warn(name + ": shutting down"); @@ -60,15 +40,9 @@ public abstract class AbstractScopedMap implements Engine{ try{if(o!=null&&o.getTheObject()!=null) dispose(o.getTheObject()); }catch(Throwable t) { - log.warn(name +": unable to dispose ",t); + log.warn(name +": unable to dispose ",t); } }); } - - protected abstract T retrieveObject() throws ConfigurationException; - - protected void dispose(T toDispose){}; - @Override - public void init() {} } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/Cache.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/Cache.java new file mode 100644 index 0000000..2da1918 --- /dev/null +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/Cache.java @@ -0,0 +1,8 @@ +package org.gcube.application.cms.caches; + +import org.gcube.application.geoportal.common.model.rest.ConfigurationException; + +public interface Cache{ + + public V get(K key) throws ConfigurationException; +} diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/TimedMap.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/TimedMap.java new file mode 100644 index 0000000..ad37383 --- /dev/null +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/caches/TimedMap.java @@ -0,0 +1,58 @@ +package org.gcube.application.cms.caches; + +import lombok.Getter; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.gcube.application.geoportal.common.model.rest.ConfigurationException; +import org.gcube.application.geoportal.common.utils.ContextUtils; + +import java.time.LocalDateTime; +import java.time.temporal.TemporalAmount; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Slf4j +@RequiredArgsConstructor +public abstract class TimedMap implements Cache { + + protected ConcurrentHashMap> scopeMap=new ConcurrentHashMap>(); + + @Setter + @Getter + protected TemporalAmount TTL=null; + + @NonNull + protected String name; + + @Override + public V get(K key) throws ConfigurationException { + log.trace(name+" : obtaining object by "+key); + + TTLObject found=scopeMap.get(key); + + if(found== null){ + log.debug(name+" : init object for key "+key); + TTLObject toPut=new TTLObject(LocalDateTime.now(),retrieveObject(key)); + scopeMap.put(key, toPut); + return toPut.getTheObject(); + } + + if(getTTL()!=null) { + if(found.getCreationTime().plus(getTTL()).isBefore(LocalDateTime.now())) { + log.debug(name+" : elapsed TTL, disposing.."); + dispose(found.getTheObject()); + TTLObject newer=new TTLObject(LocalDateTime.now(),retrieveObject(key)); + scopeMap.put(key, newer); + found=scopeMap.get(key); + } + }else {log.debug(name+" : TTL is null, never disposing..");} + log.debug(name+"Returning {} ",found); + return found.getTheObject(); + } + + protected abstract V retrieveObject(K key) throws ConfigurationException; + protected void dispose(V toDispose){}; +} 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 24027c4..fd51ec9 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 @@ -2,6 +2,7 @@ package org.gcube.application.cms.implementations; import lombok.Synchronized; +import org.gcube.application.cms.caches.Cache; import org.gcube.application.cms.caches.Engine; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; @@ -24,13 +25,13 @@ public class ImplementationProvider { return (T) implementationsRegistry.get(clazz).getObject(); } + private ConcurrentHashMap implementationsRegistry=new ConcurrentHashMap<>(); public void setEngine(Engine engine, Class clazz){ implementationsRegistry.put(clazz,engine); } - private ImplementationProvider(){ //Defaults setEngine(new DefaultISProvider(),ISInterface.class); diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/LifecycleManager.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/LifecycleManager.java index cfc3113..ed9d8ac 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/LifecycleManager.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/LifecycleManager.java @@ -7,7 +7,7 @@ import org.gcube.application.cms.plugins.reports.EventExecutionReport; import org.gcube.application.cms.plugins.reports.StepExecutionReport; import org.gcube.application.cms.plugins.requests.EventExecutionRequest; import org.gcube.application.cms.plugins.requests.StepExecutionRequest; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; 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 37a0b23..9366231 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 @@ -9,7 +9,6 @@ import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException; import org.gcube.application.cms.plugins.faults.PluginExecutionException; import org.gcube.application.cms.plugins.requests.IndexDocumentRequest; import org.gcube.application.geoportal.common.model.document.Project; -import org.gcube.application.geoportal.common.model.document.spatial.SpatialReference; import org.gcube.application.geoportal.common.model.document.temporal.TemporalReference; @Getter diff --git a/cms-test-commons/src/main/java/org/gcube/application/cms/tests/model/DummyPlugin.java b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/model/DummyPlugin.java index fc0a4e7..5f1bed0 100644 --- a/cms-test-commons/src/main/java/org/gcube/application/cms/tests/model/DummyPlugin.java +++ b/cms-test-commons/src/main/java/org/gcube/application/cms/tests/model/DummyPlugin.java @@ -12,7 +12,7 @@ import org.gcube.application.cms.plugins.requests.EventExecutionRequest; import org.gcube.application.cms.plugins.requests.IndexDocumentRequest; import org.gcube.application.cms.plugins.requests.MaterializationRequest; import org.gcube.application.cms.plugins.requests.StepExecutionRequest; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; public class DummyPlugin implements LifecycleManager, IndexerPluginInterface, MaterializationPlugin { diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/plugins/ConcessioniLifeCycleManager.java b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/plugins/ConcessioniLifeCycleManager.java index d047633..0650048 100644 --- a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/plugins/ConcessioniLifeCycleManager.java +++ b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/plugins/ConcessioniLifeCycleManager.java @@ -27,7 +27,7 @@ import org.gcube.application.geoportal.common.model.document.filesets.Registered import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation; import org.gcube.application.geoportal.common.model.document.lifecycle.TriggeredEvents; import org.gcube.application.geoportal.common.model.legacy.report.ConstraintCheck; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.common.utils.ContextUtils; import org.gcube.application.geoportal.common.utils.Files; diff --git a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultDocumentsClient.java b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultDocumentsClient.java index d7684b5..96cad7b 100644 --- a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultDocumentsClient.java +++ b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultDocumentsClient.java @@ -6,7 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.bson.Document; import org.gcube.application.geoportal.client.utils.Serialization; import org.gcube.application.geoportal.common.model.document.Project; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest; import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest; @@ -18,7 +18,6 @@ import org.gcube.common.clients.delegates.ProxyDelegate; 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 java.io.IOException; import java.rmi.RemoteException; import java.util.Iterator; diff --git a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java index 8f97649..b4fce3d 100644 --- a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java +++ b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultMongoConcessioni.java @@ -7,7 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.gcube.application.geoportal.client.utils.Serialization; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.rest.InterfaceConstants; import org.gcube.application.geoportal.common.rest.MongoConcessioni; diff --git a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultProfiledConcessioni.java b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultProfiledConcessioni.java index 7102c15..ec9099b 100644 --- a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultProfiledConcessioni.java +++ b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/DefaultProfiledConcessioni.java @@ -2,7 +2,7 @@ package org.gcube.application.geoportal.client; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.rest.MongoConcessioni; diff --git a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/ResponseCommons.java b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/ResponseCommons.java index bae0f4a..8a75827 100644 --- a/geoportal-client/src/main/java/org/gcube/application/geoportal/client/ResponseCommons.java +++ b/geoportal-client/src/main/java/org/gcube/application/geoportal/client/ResponseCommons.java @@ -12,6 +12,8 @@ public class ResponseCommons { String resString=resp.readEntity(String.class); if(resp.getStatus()<200||resp.getStatus()>=300) throw new RemoteException("RESP STATUS IS "+resp.getStatus()+". Message : "+resString); + if(clazz.equals(String.class)) + return (R) resString; if(clazz!=null) return Serialization.read(resString, clazz); else return null; diff --git a/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/ProfiledDocumentsTest.java b/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/ProfiledDocumentsTest.java index 3aa0e7f..9f2968c 100644 --- a/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/ProfiledDocumentsTest.java +++ b/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/ProfiledDocumentsTest.java @@ -2,7 +2,7 @@ package org.gcube.application.geoportal.clients; import org.gcube.application.geoportal.client.DefaultDocumentsClient; import org.gcube.application.geoportal.common.model.document.Project; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.rest.Projects; import org.gcube.application.geoportal.common.utils.tests.GCubeTest; diff --git a/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/UCDTests.java b/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/UCDTests.java index 0851571..adca966 100644 --- a/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/UCDTests.java +++ b/geoportal-client/src/test/java/org/gcube/application/geoportal/clients/UCDTests.java @@ -1,6 +1,8 @@ package org.gcube.application.geoportal.clients; import org.bson.Document; +import org.gcube.application.cms.tests.TokenSetter; +import org.gcube.application.geoportal.client.UseCaseDescriptors; import org.gcube.application.geoportal.client.utils.Queries; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.rest.UseCaseDescriptorsI; @@ -14,18 +16,20 @@ import java.util.concurrent.atomic.AtomicLong; import static org.gcube.application.geoportal.client.plugins.GeoportalAbstractPlugin.useCaseDescriptors; import static org.junit.Assume.assumeTrue; -public class UCDTests { +public class UCDTests{ - UseCaseDescriptorsI client =null; - @Before - public void getClient(){ + + + public UseCaseDescriptorsI getClient(){ assumeTrue(GCubeTest.isTestInfrastructureEnabled()); - client =useCaseDescriptors().build(); + TokenSetter.set(GCubeTest.getContext()); + return useCaseDescriptors().build(); } @Test public void query() throws Exception { + UseCaseDescriptorsI client =getClient(); QueryRequest request = new QueryRequest(); // All AtomicLong counter = new AtomicLong(0l); @@ -38,19 +42,26 @@ public class UCDTests { } @Test - public void getById() throws Exception { - UseCaseDescriptorsI client = useCaseDescriptors().build(); + public void getByIdAll() throws Exception { + UseCaseDescriptorsI client =getClient(); QueryRequest request = new QueryRequest(); // All client.query(request).forEachRemaining(u -> { try { - client.getById(u.getId()); + System.out.println("Obtained "+client.getById(u.getId()).getId()); } catch (Exception e) { e.printStackTrace(System.err); Assert.fail("Unable to get "+u.getId()); } }); } + + @Test + public void getById() throws Exception { + UseCaseDescriptorsI client =getClient(); + + System.out.println(client.getById("profiledConcessioni")); + } } diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/BasicJSONObject.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/BasicJSONObject.java deleted file mode 100644 index 3ba4e81..0000000 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/BasicJSONObject.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.gcube.application.geoportal.common.model; - -public class BasicJSONObject { - - - -} diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Archive.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Archive.java new file mode 100644 index 0000000..eb752b0 --- /dev/null +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Archive.java @@ -0,0 +1,22 @@ +package org.gcube.application.geoportal.common.model.configuration; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.bson.Document; + +public class Archive extends Document { + public static final String TYPE = "_type"; + + @JsonIgnore + public String getType() { + return super.getString(TYPE); + } + + public Archive() { + super(); + } + + @JsonIgnore + public Archive(String type) { + this.put(TYPE, type); + } +} diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Configuration.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Configuration.java new file mode 100644 index 0000000..98ceb4a --- /dev/null +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Configuration.java @@ -0,0 +1,37 @@ +package org.gcube.application.geoportal.common.model.configuration; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.xml.bind.annotation.XmlRootElement; +import java.time.LocalDateTime; +import java.util.List; + +@XmlRootElement +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Configuration{ + + public static final String PROFILE_ID="profile_id"; + public static final String CONTEXT = "context"; + public static final String LAST_UPDATED_TIME = "last_updated_time"; + + public static final String INDEXES = "indexes"; + public static final String ARCHIVES = "archives"; + + @JsonProperty(PROFILE_ID) + private String profileId; + @JsonProperty(CONTEXT) + private String context; + @JsonProperty(LAST_UPDATED_TIME) + private LocalDateTime lastUpdatedTime; + + @JsonProperty(INDEXES) + private List indexes; + @JsonProperty(ARCHIVES) + private List archives; + +} diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Index.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Index.java index bfa32b3..cef5592 100644 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Index.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/configuration/Index.java @@ -1,6 +1,22 @@ package org.gcube.application.geoportal.common.model.configuration; +import com.fasterxml.jackson.annotation.JsonIgnore; import org.bson.Document; public class Index extends Document { + public static final String TYPE = "_type"; + + @JsonIgnore + public String getType() { + return super.getString(TYPE); + } + + public Index() { + super(); + } + + @JsonIgnore + public Index(String type) { + this.put(TYPE, type); + } } diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Project.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Project.java index c34d4cd..979949e 100644 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Project.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Project.java @@ -6,7 +6,6 @@ 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; 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 deleted file mode 100644 index c38f6b9..0000000 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/spatial/SpatialReference.java +++ /dev/null @@ -1,6 +0,0 @@ -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/rest/Configuration.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/rest/Configuration.java deleted file mode 100644 index 28f1956..0000000 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/rest/Configuration.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.gcube.application.geoportal.common.model.rest; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import org.bson.Document; - -import javax.xml.bind.annotation.XmlRootElement; -import java.time.LocalDateTime; -import java.util.List; - -@XmlRootElement -@Data -@AllArgsConstructor -@NoArgsConstructor -public class Configuration{ - - public class Index extends Document { - - } - - public class Archive extends Document { - - } - - public static String PROFILE_ID="profile_id"; - public static String CONTEXT = "context"; - public static String LAST_UPDATED_TIME = ""; - - public static String INDEXES = "indexes"; - public static String ARCHIVES = "archives"; - - - private String profile_id; - private String context; - private LocalDateTime lastUpdatedTime; - - private List indexes; - private List archives; - -} diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/MongoConcessioni.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/MongoConcessioni.java index e7e107e..47ddfcb 100644 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/MongoConcessioni.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/MongoConcessioni.java @@ -2,7 +2,7 @@ package org.gcube.application.geoportal.common.rest; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import java.util.Iterator; diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/Projects.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/Projects.java index e603a18..bfd4e78 100644 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/Projects.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/Projects.java @@ -2,7 +2,7 @@ package org.gcube.application.geoportal.common.rest; import org.bson.Document; import org.gcube.application.geoportal.common.model.document.Project; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest; import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest; diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/tests/GCubeTest.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/tests/GCubeTest.java index 1490bbc..5abada9 100644 --- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/tests/GCubeTest.java +++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/tests/GCubeTest.java @@ -11,8 +11,8 @@ public class GCubeTest { } - testContext = "/pred4s/preprod/preVRE"; - // testContext = "/gcube/devsec/devVRE"; + //testContext = "/pred4s/preprod/preVRE"; + testContext = "/gcube/devsec/devVRE"; System.out.println("TEST CONTEXT = "+testContext); 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 b7e3ddf..1573f33 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 @@ -44,6 +44,7 @@ public class GeoPortalService extends ResourceConfig{ ImplementationProvider.get().setEngine(new PluginManager(), PluginManager.PluginMap.class); ImplementationProvider.get().setEngine(new StorageHubProvider(), StorageHubClient.class); ImplementationProvider.get().setEngine(new UCDManager(),UCDManagerI.class); + ImplementationProvider.get().setEngine(new ConfigurationCache(), ConfigurationCache.ConfigurationMap.class); JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(); diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/WorkspaceManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/WorkspaceManager.java index cf865ad..4b4a0da 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/WorkspaceManager.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/WorkspaceManager.java @@ -3,6 +3,7 @@ package org.gcube.application.geoportal.service.engine; import lombok.*; import lombok.extern.slf4j.Slf4j; import org.gcube.application.cms.implementations.ImplementationProvider; +import org.gcube.application.geoportal.common.model.configuration.Archive; import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFile; import org.gcube.application.geoportal.common.model.legacy.WorkspaceContent; import org.gcube.application.geoportal.common.utils.Files; @@ -51,6 +52,11 @@ public class WorkspaceManager { } + public Archive getConfiguration(){ + Archive toReturn = new Archive("W-STORAGE"); + toReturn.put("folder_id",appBase.getId()); + return toReturn; + } public WorkspaceManager() throws ConfigurationException, StorageHubException { sgClient= ImplementationProvider.get().getEngineByManagedClass(StorageHubClient.class); diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/cache/Cache.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/cache/Cache.java deleted file mode 100644 index 158c59a..0000000 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/cache/Cache.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.gcube.application.geoportal.service.engine.cache; - -public class Cache { - - public Cache() { - // TODO Auto-generated constructor stub - } - -} diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/handlers/SimpleLifeCycleManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/handlers/SimpleLifeCycleManager.java index 30e5ee4..a6a7da5 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/handlers/SimpleLifeCycleManager.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/handlers/SimpleLifeCycleManager.java @@ -14,7 +14,7 @@ import org.gcube.application.cms.plugins.reports.InitializationReport; import org.gcube.application.cms.plugins.requests.EventExecutionRequest; import org.gcube.application.cms.plugins.requests.StepExecutionRequest; import org.gcube.application.cms.plugins.model.ComparableVersion; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; @Slf4j diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManagerI.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManagerI.java index dbfb227..2f9496c 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManagerI.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManagerI.java @@ -5,7 +5,7 @@ import org.bson.Document; import org.gcube.application.cms.plugins.faults.EventException; import org.gcube.application.cms.plugins.faults.StepException; import org.gcube.application.geoportal.common.faults.StorageException; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ProfiledMongoManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ProfiledMongoManager.java index ef8d739..8bb2d2e 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ProfiledMongoManager.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ProfiledMongoManager.java @@ -1,6 +1,7 @@ package org.gcube.application.geoportal.service.engine.mongo; import com.fasterxml.jackson.core.JsonProcessingException; +import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.vdurmont.semver4j.Semver; import lombok.Getter; @@ -17,6 +18,7 @@ import org.gcube.application.cms.plugins.reports.StepExecutionReport; import org.gcube.application.cms.plugins.requests.EventExecutionRequest; import org.gcube.application.cms.plugins.requests.StepExecutionRequest; import org.gcube.application.geoportal.common.faults.StorageException; +import org.gcube.application.geoportal.common.model.configuration.Archive; import org.gcube.application.geoportal.common.model.document.*; import org.gcube.application.geoportal.common.model.document.access.Access; import org.gcube.application.geoportal.common.model.document.access.AccessPolicy; @@ -25,22 +27,21 @@ import org.gcube.application.geoportal.common.model.document.accounting.Publicat import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFile; import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet; import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation; -import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.model.useCaseDescriptor.Field; import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration; import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest; import org.gcube.application.geoportal.common.model.rest.TempFile; import org.gcube.application.geoportal.common.model.JSONPathWrapper; +import org.gcube.application.geoportal.common.utils.ContextUtils; import org.gcube.application.geoportal.common.utils.StorageUtils; import org.gcube.application.cms.implementations.ImplementationProvider; import org.gcube.application.geoportal.service.engine.WorkspaceManager; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.service.engine.providers.PluginManager; import org.gcube.application.geoportal.service.engine.providers.ProfileMapCache; -import org.gcube.application.geoportal.service.engine.providers.UCDManager; import org.gcube.application.geoportal.service.model.internal.faults.DeletionException; import org.gcube.application.cms.serialization.Serialization; import org.gcube.application.geoportal.service.model.internal.faults.RegistrationException; @@ -54,6 +55,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.security.InvalidParameterException; +import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.LinkedBlockingQueue; import java.util.function.Consumer; @@ -392,7 +394,29 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI< @Override public Configuration getConfiguration() throws ConfigurationException { log.debug("Asking configuration for {} in {} ", useCaseDescriptor.getId(), UserUtils.getCurrent().getContext()); - Configuration toReturn= getManager().getCurrentConfiguration(); + Configuration toReturn= new Configuration(); + List archives = new ArrayList<>(); + // Set Basic Info + toReturn.setArchives(archives); + toReturn.setProfileId(this.getUseCaseDescriptor().getId()); + toReturn.setContext(ContextUtils.getCurrentScope()); + toReturn.setLastUpdatedTime(LocalDateTime.now()); + + + // Add Mongo Info + Archive mongoArchive = new Archive("DOCUMENT-STORE-COLLECTION"); + MongoCollection coll=getDatabase().getCollection(getCollectionName()); + mongoArchive.put("count",coll.count()); + mongoArchive.put("collection_name",getCollectionName()); + archives.add(mongoArchive); + + // Set WS Info + try { + archives.add(new WorkspaceManager().getConfiguration()); + }catch (StorageHubException e) { + throw new ConfigurationException("Unable to get WS Configuration",e); + } + log.debug("Returning current configuration {}",toReturn); return toReturn; } diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ConfigurationCache.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ConfigurationCache.java new file mode 100644 index 0000000..7f03fdc --- /dev/null +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ConfigurationCache.java @@ -0,0 +1,64 @@ +package org.gcube.application.geoportal.service.engine.providers; + +import jdk.nashorn.internal.runtime.regexp.joni.Config; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; +import org.gcube.application.cms.caches.AbstractScopedMap; +import org.gcube.application.cms.caches.Cache; +import org.gcube.application.cms.caches.TimedMap; +import org.gcube.application.cms.implementations.ImplementationProvider; +import org.gcube.application.geoportal.common.model.configuration.Configuration; +import org.gcube.application.geoportal.common.model.rest.ConfigurationException; +import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager; +import org.gcube.application.geoportal.service.model.internal.faults.RegistrationException; + +import java.time.Duration; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalAmount; +import java.time.temporal.TemporalUnit; + +@Slf4j +public class ConfigurationCache extends AbstractScopedMap { + + public static class ConfigurationMap extends TimedMap{ + public ConfigurationMap(@NonNull String name) { + super(name); + } + + @Override + public TemporalAmount getTTL(){ + return Duration.of(2, ChronoUnit.MINUTES); + } + + @Override + protected Configuration retrieveObject(String key) throws ConfigurationException { + return getForProfile(key); + } + } + + + public ConfigurationCache() { + super("Configuration Cache"); + } + + @Override + protected ConfigurationMap retrieveObject(String key) throws ConfigurationException { + return new ConfigurationMap(key+"_configuration_cache") { + }; + } + + + private static Configuration getForProfile(String profileID) throws ConfigurationException{ + log.info("Evaluating Configuration for profile {} ",profileID); + try{ + return new ProfiledMongoManager(profileID).getConfiguration(); + } catch (ConfigurationException e) { + log.error("Unable to get configuration for {} ",profileID,e); + throw e; + } catch (Throwable t){ + log.error("Unable to get configuration for {} ",profileID,t); + throw new ConfigurationException("Unable to get configuration for "+profileID,t); + } + + } +} 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 16e2b3b..da19b70 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 @@ -23,7 +23,7 @@ public class MongoClientProvider extends AbstractScopedMap { } @Override - protected Mongo retrieveObject() throws ConfigurationException { + protected Mongo retrieveObject(String context) throws ConfigurationException { MongoConnection conn=performQueryForMongoDB(ImplementationProvider.get(). getEngineByManagedClass(ISInterface.class), ServiceConstants.SE_GNA_DB_CATEGORY, @@ -40,11 +40,6 @@ public class MongoClientProvider extends AbstractScopedMap { toDispose.close(); } - @Override - public void init() { - // TODO Auto-generated method stub - } - private static MongoConnection performQueryForMongoDB(ISInterface is,String category, String platform,String flagName, String flagValue) throws ConfigurationException { diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PluginManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PluginManager.java index e1df3f8..0768fea 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PluginManager.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PluginManager.java @@ -56,8 +56,7 @@ public class PluginManager extends AbstractScopedMap im @Override - protected PluginMap retrieveObject() throws ConfigurationException { - String context=ContextUtils.getCurrentScope(); + protected PluginMap retrieveObject(String context) throws ConfigurationException { log.warn("PLUGIN INITIALIZTIONS IN CONTEXT {} ",context); // Init plugins implementations.forEach((id,p)->{ diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PostgisConnectionProvider.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PostgisConnectionProvider.java index adf36ce..327ef9a 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PostgisConnectionProvider.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PostgisConnectionProvider.java @@ -14,7 +14,7 @@ public class PostgisConnectionProvider extends AbstractScopedMap { } @Override - protected StorageUtils retrieveObject() throws ConfigurationException { + protected StorageUtils retrieveObject(String Context) throws ConfigurationException { try{ return new StorageUtils(); }catch(Throwable t){ diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/UCDManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/UCDManager.java index a96c1a1..7a012f1 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/UCDManager.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/UCDManager.java @@ -94,7 +94,7 @@ public class UCDManager extends AbstractScopedMap implements UCDMan @Override - protected UCDManagerI retrieveObject() throws ConfigurationException { + protected UCDManagerI retrieveObject(String context) throws ConfigurationException { forceUpdateCache(); return this; } diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java index 8124b85..6bdf7f4 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java @@ -4,10 +4,9 @@ import lombok.extern.slf4j.Slf4j; import org.bson.Document; import org.gcube.application.geoportal.common.model.legacy.Concessione; import org.gcube.application.geoportal.common.model.rest.AddSectionToConcessioneRequest; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.rest.InterfaceConstants; import org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager; -import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex; import org.gcube.application.geoportal.service.model.internal.faults.DeletionException; import org.gcube.application.cms.serialization.Serialization; import org.json.JSONArray; diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Plugins.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Plugins.java new file mode 100644 index 0000000..e2c5371 --- /dev/null +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Plugins.java @@ -0,0 +1,9 @@ +package org.gcube.application.geoportal.service.rest; + +public class Plugins { + + // get status (configuration + report) + + // force reinitialization + +} diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java index c0a24d0..5b2e2e1 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java @@ -2,8 +2,9 @@ package org.gcube.application.geoportal.service.rest; import lombok.extern.slf4j.Slf4j; import org.bson.Document; +import org.gcube.application.cms.implementations.ImplementationProvider; import org.gcube.application.geoportal.common.model.document.Project; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.rest.InterfaceConstants; import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest; @@ -11,6 +12,7 @@ import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest; import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.cms.serialization.Serialization; +import org.gcube.application.geoportal.service.engine.providers.ConfigurationCache; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; @@ -22,7 +24,7 @@ public class ProfiledDocuments { private ProfiledMongoManager manager; public ProfiledDocuments(@PathParam(InterfaceConstants.Parameters.UCID) String profileID) throws ConfigurationException { - log.info("Accessing profiles "+profileID); + log.info("Accessing profile "+profileID); manager=new GuardedMethod(){ @Override protected ProfiledMongoManager run() throws Exception { @@ -34,12 +36,12 @@ public class ProfiledDocuments { @GET @Path(InterfaceConstants.Methods.CONFIGURATION_PATH) @Produces(MediaType.APPLICATION_JSON) - public Configuration getConfiguration(){ + public Configuration getConfiguration(@PathParam(InterfaceConstants.Parameters.UCID) String profileID){ return new GuardedMethod(){ @Override protected Configuration run() throws Exception, WebApplicationException { - return manager.getConfiguration(); + return ImplementationProvider.get().getEngineByManagedClass(ConfigurationCache.ConfigurationMap.class).get(profileID); } }.execute().getResult(); } diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/UCDTests.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/UCDTests.java new file mode 100644 index 0000000..6f56b8b --- /dev/null +++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/UCDTests.java @@ -0,0 +1,56 @@ +package org.gcube.application.geoportal.service; + +import lombok.extern.slf4j.Slf4j; +import org.gcube.application.cms.serialization.Serialization; +import org.gcube.application.cms.tests.TokenSetter; +import org.gcube.application.geoportal.common.model.rest.QueryRequest; +import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; +import org.gcube.application.geoportal.common.rest.InterfaceConstants; +import org.gcube.application.geoportal.common.utils.tests.GCubeTest; +import org.junit.Before; +import org.junit.Test; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; + +import java.util.Iterator; +import java.util.concurrent.atomic.AtomicLong; + +import static org.junit.Assume.assumeTrue; + +@Slf4j +public class UCDTests extends BasicServiceTestUnit{ + + @Before + public void setContext(){ + assumeTrue(GCubeTest.isTestInfrastructureEnabled()); + TokenSetter.set(GCubeTest.getContext()); + } + + + protected WebTarget baseTarget(){ + return super.target(InterfaceConstants.Methods.UCD); + } + + + private Iterator query(QueryRequest request) throws Exception { + String json = check(baseTarget().path(InterfaceConstants.Methods.QUERY_PATH). + request(MediaType.APPLICATION_JSON).post(Entity.entity(request,MediaType.APPLICATION_JSON)), + String.class); + try{ + return Serialization.readCollection(json, UseCaseDescriptor.class); + }catch(Throwable t){ + log.error("Unable to query UCD with {} ",request,t); + throw new Exception("Unable to parse collection. Check projection settings.",t); + } + } + + @Test + public void queryAll() throws Exception { + QueryRequest request=new QueryRequest(); + AtomicLong l = new AtomicLong(); + query(request).forEachRemaining(u->l.incrementAndGet()); + assumeTrue(l.get()>0); + } +} diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/caches/DummyCache.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/caches/DummyCache.java index 80c81e8..988feb4 100644 --- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/caches/DummyCache.java +++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/caches/DummyCache.java @@ -15,7 +15,7 @@ public class DummyCache extends AbstractScopedMap { } @Override - protected LocalDateTime retrieveObject() throws ConfigurationException { + protected LocalDateTime retrieveObject(String context) throws ConfigurationException { return LocalDateTime.now(); } diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/profiledDocuments/AbstractProfiledDocumentsTests.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/profiledDocuments/AbstractProfiledDocumentsTests.java index ab60404..8ef0d95 100644 --- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/profiledDocuments/AbstractProfiledDocumentsTests.java +++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/profiledDocuments/AbstractProfiledDocumentsTests.java @@ -7,7 +7,7 @@ import org.gcube.application.cms.tests.TokenSetter; import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel; import org.gcube.application.geoportal.common.model.document.Project; import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation; -import org.gcube.application.geoportal.common.model.rest.Configuration; +import org.gcube.application.geoportal.common.model.configuration.Configuration; import org.gcube.application.geoportal.common.model.rest.QueryRequest; import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest; import org.gcube.application.geoportal.common.model.rest.StepExecutionRequest; diff --git a/sdi-plugins/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 index 6d4377b..daf420f 100644 --- a/sdi-plugins/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 @@ -32,7 +32,7 @@ public abstract class SDIAbstractPlugin extends AbstractPlugin implements Initia log.info("Creating internal caches.. "); sdiCache = new AbstractScopedMap("SDI-CACHE") { @Override - protected SDIManagerWrapper retrieveObject() throws ConfigurationException { + protected SDIManagerWrapper retrieveObject(String context) throws ConfigurationException { try { return new SDIManagerWrapper(); } catch (Exception e) { @@ -45,11 +45,11 @@ public abstract class SDIAbstractPlugin extends AbstractPlugin implements Initia if(postgisCache==null) { postgisCache = new AbstractScopedMap("POSTGIS-CREDENTIALS") { @Override - protected DatabaseConnection retrieveObject() throws ConfigurationException { + protected DatabaseConnection retrieveObject(String context) throws ConfigurationException { try { DatabaseConnection db = ImplementationProvider.get().getEngineByManagedClass(ISInterface.class). queryForDatabase("Database","postgis", "GNA_DB","Concessioni"); - log.debug("Postgis Connection in {} is {} ", ContextUtils.getCurrentScope(),db); + log.debug("Postgis Connection in {} is {} ", context,db); return db; } catch (Exception e) { throw new ConfigurationException(e); diff --git a/sdi-plugins/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 index 4346764..fe7d6a0 100644 --- a/sdi-plugins/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 @@ -21,7 +21,6 @@ import org.gcube.application.geoportal.common.model.JSONPathWrapper; import org.gcube.application.cms.plugins.model.ComparableVersion; import org.gcube.application.geoportal.common.model.document.Project; import org.gcube.application.geoportal.common.model.document.filesets.GCubeSDILayer; -import org.gcube.application.geoportal.common.model.document.spatial.SpatialReference; import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; import org.geojson.Crs; import org.geojson.GeoJsonObject; diff --git a/test-data/profiledDocuments/sampleFiles/Configuration.json b/test-data/profiledDocuments/sampleFiles/Configuration.json index 2929295..21fc86b 100644 --- a/test-data/profiledDocuments/sampleFiles/Configuration.json +++ b/test-data/profiledDocuments/sampleFiles/Configuration.json @@ -19,4 +19,8 @@ "count" : 10000, "collection_name" : "...."} ] -} \ No newline at end of file +} + + +TM k,v ABSM V +Vget(K) V get(String) diff --git a/use-cases/src/test/java/org/gcube/application/cms/usecases/ExportConcessioniAsProfiledDocuments.java b/use-cases/src/test/java/org/gcube/application/cms/usecases/ExportConcessioniAsProfiledDocuments.java new file mode 100644 index 0000000..8bb46bf --- /dev/null +++ b/use-cases/src/test/java/org/gcube/application/cms/usecases/ExportConcessioniAsProfiledDocuments.java @@ -0,0 +1,4 @@ +package org.gcube.application.cms.usecases; + +public class ExportConcessioniAsProfiledDocuments { +} diff --git a/use-cases/src/test/java/org/gcube/application/cms/usecases/Export.java b/use-cases/src/test/java/org/gcube/application/cms/usecases/ExportMongoConcessioni.java similarity index 56% rename from use-cases/src/test/java/org/gcube/application/cms/usecases/Export.java rename to use-cases/src/test/java/org/gcube/application/cms/usecases/ExportMongoConcessioni.java index 7f5c1f6..91ad05a 100644 --- a/use-cases/src/test/java/org/gcube/application/cms/usecases/Export.java +++ b/use-cases/src/test/java/org/gcube/application/cms/usecases/ExportMongoConcessioni.java @@ -1,6 +1,7 @@ package org.gcube.application.cms.usecases; import lombok.extern.slf4j.Slf4j; +import org.bson.Document; import org.gcube.application.cms.tests.TokenSetter; import org.gcube.application.geoportal.client.legacy.ConcessioniManagerI; import org.gcube.application.geoportal.client.utils.Serialization; @@ -28,7 +29,7 @@ import static org.gcube.application.geoportal.client.plugins.GeoportalAbstractPl /* Pushes concessioni JSON from folder to geoportal-service */ -public class Export { +public class ExportMongoConcessioni { public static void main(String[] args) { @@ -63,8 +64,9 @@ public class Export { for (Concessione c : found) { try { log.info("Using {} {}",c.getNome(),c.getMongo_id()); - Concessione result = push(c, targetManager, new File(dir.getAbsolutePath(), - c.getId() + ""), storage); + + + if (!result.getReport().getStatus().equals(ValidationReport.ValidationStatus.PASSED)) warnCount.incrementAndGet(); } catch (Throwable throwable) { @@ -78,77 +80,7 @@ public class Export { System.out.println("Done "+count.get()+" [warn : "+warnCount.get()+", err : "+errCount.get()+"]"); } - public static Concessione push(Concessione c, ConcessioniManagerI manager, File dir, StorageUtils storage) throws Exception { - // remove GIS references - LayerConcessione posizionamento= c.getPosizionamentoScavo(); - c.setPosizionamentoScavo(null); - List piante=c.getPianteFineScavo(); - c.setPianteFineScavo(new ArrayList()); - - List imgs=c.getImmaginiRappresentative(); - c.setImmaginiRappresentative(new ArrayList()); - - List other=c.getGenericContent(); - c.setGenericContent(new ArrayList()); - - RelazioneScavo rel=c.getRelazioneScavo(); - c.setRelazioneScavo(null); - - c.setAbstractRelazione(null); - - // remove source folder id - c.setFolderId(null); - c.setMongo_id(null); - - - // PUSH PROJECT - manager.createNew(c); - - - // UPLOAD WOrKSPaCE content - // Relazione - removeContent(rel); - manager.setRelazioneScavo(rel, fromPath(dir.toPath().toAbsolutePath()+File.separator+"rel",storage)[0]); - - //Abstract - manager.setRelazioneScavo(rel, fromPath(dir.toPath().toAbsolutePath()+File.separator+"rel",storage)[0]); - - - // Posizionamento - removeContent(posizionamento); - manager.setPosizionamento(posizionamento, - fromPath(dir.toPath().toAbsolutePath()+File.separator+"pos", storage)); - - - //Piante - for(int i=0; i());} + private static Document getCleanDocument(Concessione c){ + Document toReturn = new Document(); + + } }