messages;
-
-}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/project/StatusPhase.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/project/StatusPhase.java
deleted file mode 100644
index 522532c..0000000
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/project/StatusPhase.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.gcube.application.geoportal.common.model.project;
-
-public enum StatusPhase {
-
- DRAFT,
- UNDER_VALIDATION,
- INVALID,
- VALID,
- UNDER_PUBLICATION,
- PUBLICATION_ERROR,
- PUBLISHED
-
-}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java
deleted file mode 100644
index 1309362..0000000
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/project/StoredFile.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.gcube.application.geoportal.common.model.project;
-
-
-
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/InterfaceConstants.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/InterfaceConstants.java
index 3ed42f4..1dac42a 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/InterfaceConstants.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/InterfaceConstants.java
@@ -13,6 +13,7 @@ public class InterfaceConstants {
public static final String PROFILES="profiles";
public static final String SECTIONS="sections";
public static final String PROJECTS="projects";
+
public static final String CONCESSIONI="concessioni";
public static final String MONGO_CONCESSIONI="mongo-concessioni";
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/ProfiledDocumentsI.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/ProfiledDocumentsI.java
new file mode 100644
index 0000000..c7aaabd
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/ProfiledDocumentsI.java
@@ -0,0 +1,28 @@
+package org.gcube.application.geoportal.common.rest;
+
+import org.bson.Document;
+import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
+import org.gcube.application.geoportal.common.model.rest.Configuration;
+import org.gcube.application.geoportal.common.model.rest.QueryRequest;
+
+import java.rmi.RemoteException;
+import java.util.Iterator;
+
+public interface ProfiledDocumentsI {
+
+ // CRUD
+ public P createNew(Document toCreate)throws RemoteException;
+ public void deleteById(String id) throws RemoteException;
+ public void deleteById(String id,Boolean force) throws RemoteException;
+ public P getById(String id) throws RemoteException;
+
+ // CONFIG
+ public Configuration getConfiguration() throws RemoteException;
+
+ // QUERY
+ public Iterator
query (QueryRequest request) throws RemoteException;
+ public String querForJSON(QueryRequest request)throws RemoteException;
+
+ //Execution
+ public P performStep(String id, String step, Document request);
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java
deleted file mode 100644
index 6ff8a00..0000000
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/rest/ProjectsI.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.gcube.application.geoportal.common.rest;
-
-import org.gcube.application.geoportal.common.model.project.Project;
-
-import java.util.Iterator;
-
-public interface ProjectsI {
-
-
- public Iterator getAll() throws Exception;
- public Iterator getByProfile(String profileId) throws Exception;
- public Project getById(String profileId,String id) throws Exception;
- public Iterator getByFilter(String filter)throws Exception;
- public Iterator getByFilter(String filter, String profileId)throws Exception;
- public Project registrNew(String profileId, String jsonDocument)throws Exception;
- public Project update(String profileId, String projectId,String jsonDocument) throws Exception;
- public void deleteById(String profileId, String projectId)throws Exception;
- public void deleteById(String profileId, String projectId, Boolean force)throws Exception;
-}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/Files.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/Files.java
index 1bb66bd..fc04d6b 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/Files.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/Files.java
@@ -85,6 +85,8 @@ public class Files {
}
public static String fixFilename(String toFix) {
+ if(toFix.startsWith("\\."))
+ toFix=toFix.replaceFirst("\\.","_");
String extension="";
if(toFix.contains(".")) {
//preserve extension
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java
new file mode 100644
index 0000000..3b0cfdf
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/utils/JSONPathWrapper.java
@@ -0,0 +1,34 @@
+package org.gcube.application.geoportal.common.utils;
+
+import com.jayway.jsonpath.Configuration;
+import com.jayway.jsonpath.DocumentContext;
+import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.Option;
+import lombok.Getter;
+
+import java.util.List;
+
+public class JSONPathWrapper {
+
+ public static Configuration JSON_PATH_ALWAYS_LIST_CONFIG=null;
+ public static Configuration JSON_PATH_PATHS_CONFIGURATION=null;
+
+ static {
+ JSON_PATH_ALWAYS_LIST_CONFIG= Configuration.builder().options(Option.ALWAYS_RETURN_LIST,Option.SUPPRESS_EXCEPTIONS,Option.DEFAULT_PATH_LEAF_TO_NULL).build();
+ JSON_PATH_PATHS_CONFIGURATION = Configuration.builder().options(Option.AS_PATH_LIST,Option.SUPPRESS_EXCEPTIONS,Option.DEFAULT_PATH_LEAF_TO_NULL).build();
+ }
+
+
+ @Getter
+ DocumentContext ctx=null;
+
+ public JSONPathWrapper(String json) {
+ ctx=JsonPath.using(JSON_PATH_ALWAYS_LIST_CONFIG).parse(json);
+ }
+
+ public List getByPath(String path){
+ throw new RuntimeException("TO IMPLEMENT");
+ }
+
+
+}
diff --git a/geoportal-common/src/test/java/org/gcube/application/geoportal/common/legacy/DefaultsTests.java b/geoportal-common/src/test/java/org/gcube/application/geoportal/common/legacy/DefaultsTests.java
new file mode 100644
index 0000000..61549c1
--- /dev/null
+++ b/geoportal-common/src/test/java/org/gcube/application/geoportal/common/legacy/DefaultsTests.java
@@ -0,0 +1,43 @@
+package org.gcube.application.geoportal.common.legacy;
+
+import org.gcube.application.geoportal.common.model.legacy.AccessPolicy;
+import org.gcube.application.geoportal.common.model.legacy.Concessione;
+import org.gcube.application.geoportal.common.model.legacy.RelazioneScavo;
+import org.gcube.application.geoportal.common.model.legacy.report.ConstraintCheck;
+import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class DefaultsTests {
+
+ @Test
+ public void checkConstraints(){
+ assertEquals(AccessPolicy.OPEN,ConstraintCheck.defaultFor(null,AccessPolicy.OPEN).evaluate());
+ assertEquals(AccessPolicy.EMBARGOED,ConstraintCheck.defaultFor(AccessPolicy.EMBARGOED,AccessPolicy.OPEN).evaluate());
+ }
+
+
+ @Test
+ public void checkDefaults(){
+
+ Concessione c= new Concessione();
+
+ c.setDefaults();
+ c.validate();
+ System.out.println(c.getReport());
+ // Mandatory fields without defaults
+ assertEquals(ValidationReport.ValidationStatus.ERROR,c.getReport().getStatus());
+
+ c=new Concessione();
+ c.setRelazioneScavo(new RelazioneScavo());
+ c.getRelazioneScavo().setPolicy(AccessPolicy.EMBARGOED);
+ c.setPolicy(AccessPolicy.OPEN);
+ assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
+ c.setDefaults();
+ assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
+ }
+
+
+
+}
diff --git a/geoportal-service/CHANGELOG.md b/geoportal-service/CHANGELOG.md
index b09f888..d89cf4e 100644
--- a/geoportal-service/CHANGELOG.md
+++ b/geoportal-service/CHANGELOG.md
@@ -2,36 +2,40 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for org.gcube.application.geoportal-service
+## [v1.0.8] 2021-09-20
+- Logging
+- Fixes [#22193](https://support.d4science.org/issues/22193)
+- Fixes [#22280](https://support.d4science.org/issues/22280)
+- Fixes [#20755](https://support.d4science.org/issues/20755)
+- Profiled Documents
+
+
## [v1.0.6] 2021-09-20
-Refactored repositories
-Fixes #22193
-Fixes #22217
+- Refactored repositories
+- Fixes #22193
+- Fixes #22217
## [v1.0.5-SNAPSHOT] 2021-07-23
-Upgrade to gcube-smartgears-bom 2.1.0
-Fix register postgis table layer
-Added PostgisIndexRecordManager
+- Upgrade to gcube-smartgears-bom 2.1.0
+- Fix register postgis table layer
+- Added PostgisIndexRecordManager
## [v1.0.4] 2020-11-11
-Mongo integration with Concessione
-Project interface
-TempFile management
-WorkspaceContent and publication for Concessioni-over-mongo
+- Mongo integration with Concessione
+- Project interface
+- TempFile management
+- WorkspaceContent and publication for Concessioni-over-mongo
## [v1.0.3] 2020-11-11
-Fixed HTTP method
+- Fixed HTTP method
## [v1.0.2] 2020-11-11
-Delete method
-Excluded upper bound release gCube 5
+- Delete method
+- Excluded upper bound release gCube 5
## [v1.0.1] 2020-11-11
-
-Project interface
+- Project interface
## [v1.0.0] 2020-11-11
-
-First release
-
-
+- First release
\ No newline at end of file
diff --git a/geoportal-service/pom.xml b/geoportal-service/pom.xml
index 4c95743..b837b74 100644
--- a/geoportal-service/pom.xml
+++ b/geoportal-service/pom.xml
@@ -4,14 +4,14 @@
4.0.0
org.gcube.application
geoportal-service
- 1.0.6
+ 1.0.8
Geoportal Service
war
org.gcube.application.cms
gcube-cms-suite
- 1.0.0
+ 1.0.1
@@ -83,10 +83,15 @@
- org.gcube.application
+ org.gcube.application.cms
geoportal-common
+
+ org.gcube.application.cms
+ cms-plugin-framework
+
+
@@ -185,6 +190,11 @@
jackson-datatype-jsr310
+
+ org.reflections
+ reflections
+
+
org.gcube.contentmanagement
@@ -203,6 +213,12 @@
test
+
+ org.gcube.application.cms
+ concessioni-lifecycle
+ test
+
+
junit
junit
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 7fb5902..d06a0f5 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
@@ -3,8 +3,9 @@ package org.gcube.application.geoportal.service;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.service.rest.ConcessioniOverMongo;
-import org.gcube.application.geoportal.service.rest.Profiles;
-import org.gcube.application.geoportal.service.rest.Projects;
+
+
+import org.gcube.application.geoportal.service.rest.ProfiledDocuments;
import org.gcube.application.geoportal.service.rest.Sections;
import org.gcube.application.geoportal.service.utils.Serialization;
import org.glassfish.jersey.server.ResourceConfig;
@@ -21,9 +22,9 @@ public class GeoPortalService extends ResourceConfig{
//Register interrfaces
// registerClasses(Concessioni.class);
registerClasses(ConcessioniOverMongo.class);
- registerClasses(Projects.class);
+ registerClasses(ProfiledDocuments.class);
registerClasses(Sections.class);
- registerClasses(Profiles.class);
+
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/ImplementationProvider.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/ImplementationProvider.java
index 3f62f97..1494cd9 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/ImplementationProvider.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/ImplementationProvider.java
@@ -6,6 +6,7 @@ package org.gcube.application.geoportal.service.engine;
import lombok.Getter;
import lombok.Setter;
import lombok.Synchronized;
+import org.gcube.application.cms.plugins.Plugin;
import org.gcube.application.geoportal.service.engine.providers.*;
public class ImplementationProvider {
@@ -38,25 +39,29 @@ public class ImplementationProvider {
@Setter
private ISProvider isProvider=new ISProvider();
-// @Getter
-// @Setter
-// private EMFProvider emfProvider=new ScopedEMFProvider();
-
+ @Getter
+ @Setter
+ private ProfileMapCache profiles=new ProfileMapCache();
+
+ @Getter
+ @Setter
+ private PluginManager pluginManager=new PluginManager();
@Getter
@Setter
private StorageHubProvider sHubProvider=new StorageHubProvider();
- public void shutdown() {
- // Stop JPA
-// AbstractRecordManager.shutdown();
-
- mongoClientProvider.shutdown();
- }
-
- public void startup() {
-// AbstractRecordManager.setDefaultProvider(emfProvider);
-
- mongoClientProvider.init();
- }
+// public void shutdown() {
+// // Stop JPA
+//// AbstractRecordManager.shutdown();
+//
+// mongoClientProvider.shutdown();
+// pluginManager.shutdown();
+// }
+//
+// public void startup() {
+//// AbstractRecordManager.setDefaultProvider(emfProvider);
+// pluginManager.init();
+// mongoClientProvider.init();
+// }
}
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
new file mode 100644
index 0000000..689bd5b
--- /dev/null
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/handlers/SimpleLifeCycleManager.java
@@ -0,0 +1,77 @@
+package org.gcube.application.geoportal.service.engine.handlers;
+
+import com.google.protobuf.DescriptorProtos;
+import lombok.extern.slf4j.Slf4j;
+import org.gcube.application.cms.plugins.LifecycleManager;
+import org.gcube.application.cms.plugins.faults.InitializationException;
+import org.gcube.application.cms.plugins.faults.ShutDownException;
+import org.gcube.application.cms.plugins.faults.StepException;
+import org.gcube.application.cms.plugins.model.PluginDescriptor;
+import org.gcube.application.cms.plugins.reports.ExecutionReport;
+import org.gcube.application.cms.plugins.reports.InitializationReport;
+import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
+import org.gcube.application.geoportal.common.model.document.ComparableVersion;
+
+@Slf4j
+public class SimpleLifeCycleManager implements LifecycleManager {
+
+
+ private static final PluginDescriptor DESCRIPTOR=new PluginDescriptor("SIMPLE-LIFECYCLE", "Simple Lifecycle manager");
+ static {
+ DESCRIPTOR.setDescription("Simple Lifecycle Management. This plugin supports a simple publication lifecycle.");
+ DESCRIPTOR.setVersion(new ComparableVersion("1.0.0"));
+ }
+
+ @Override
+ public InitializationReport initInContext() throws InitializationException {
+ return null;
+ }
+
+ @Override
+ public InitializationReport init() throws InitializationException {
+ return null;
+ }
+
+ @Override
+ public void shutdown() throws ShutDownException {
+
+ }
+
+ @Override
+ public ExecutionReport performStep(StepExecutionRequest request) throws StepException {
+ log.info("Received Request ");
+
+ switch(request.getStep()){
+ case StepExecutionRequest.Steps.ON_INIT_DOCUMENT:{
+ break;
+ }
+ case StepExecutionRequest.Steps.ON_MATERIALIZE_DOCUMENT:{
+ break;
+ }
+ case StepExecutionRequest.Steps.ON_DEMATERIALIZE_DOCUMENT:{
+ break;
+ }
+ case StepExecutionRequest.Steps.ON_DEINDEX_DOCUMENT:{
+ break;
+ }
+ case StepExecutionRequest.Steps.ON_INDEX_DOCUMENT:{
+ break;
+ }
+ case StepExecutionRequest.Steps.ON_DELETE_DOCUMENT:{
+ break;
+ }
+ default : throw new StepException("Invalid Step "+request.getStep());
+ }
+
+
+ throw new StepException("Still to implement");
+ }
+
+
+
+
+ @Override
+ public PluginDescriptor getDescriptor() {
+ return null;
+ }
+}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/materialization/SDIManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/materialization/SDIManager.java
index 0cdbed6..1691198 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/materialization/SDIManager.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/materialization/SDIManager.java
@@ -67,7 +67,7 @@ public class SDIManager {
geoserverHostName=new URL(currentGeoserver.getUrl()).getHost();
log.debug("Contacting Data Transfer from geoserver {} ",geoserverHostName);
- dtGeoServer=DataTransferClient.getInstanceByEndpoint("http://"+geoserverHostName);
+ dtGeoServer=DataTransferClient.getInstanceByEndpoint("https://"+geoserverHostName);
if(!currentGeoserver.getReader().existGeoserver())
throw new Exception("Geoserver not reachable");
}catch(Exception e) {
@@ -222,7 +222,7 @@ public class SDIManager {
RESTLayer l=gsReader.getLayer(workspace, toSetLayerName);
RESTFeatureType f= gsReader.getFeatureType(l);
- /*http://geoserver1.dev.d4science.org/geoserver/gna_conc_18/wms?
+ /*https://geoserver1.dev.d4science.org/geoserver/gna_conc_18/wms?
service=WMS&version=1.1.0&request=GetMap&layers=gna_conc_18:pos&
styles=&bbox=8.62091913167495,40.62975046683799,8.621178639172953,40.630257904721645&
width=392&height=768&srs=EPSG:4326&format=application/openlayers */
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java
index 07e7c7e..fe9c811 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java
@@ -24,6 +24,7 @@ import org.gcube.application.geoportal.service.engine.WorkspaceManager.FolderOpt
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
import org.gcube.application.geoportal.service.model.internal.faults.*;
import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.geoportal.service.utils.UserUtils;
import org.gcube.common.storagehub.client.dsl.FolderContainer;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import org.gcube.data.transfer.library.faults.RemoteServiceException;
@@ -33,6 +34,7 @@ import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.SQLException;
+import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@@ -48,7 +50,7 @@ public class ConcessioniMongoManager extends MongoManager{
super();
}
private static final String collectionName="legacyConcessioni";
- private static final String DB_NAME="gna_dev";
+ //private static final String DB_NAME="gna_dev";
private MongoDatabase db=null;
@@ -78,34 +80,46 @@ public class ConcessioniMongoManager extends MongoManager{
}
- // *** PUBLIC METHODS
+
+
+
+
+ /****************************** PUBLIC METHODS ***********************/
+
+
+
public Concessione registerNew(Concessione toRegister) throws IOException {
- log.trace("Registering {} ",toRegister);
- toRegister.setDefaults();
+ log.trace("Going to register {} ",toRegister);
+ toRegister=onUpdate(toRegister);
+ log.trace("Concessione with defaults is {}",toRegister);
ObjectId id=insert(asDocument(toRegister), collectionName);
+ log.trace("Obtained id {}",id);
Concessione toReturn=asConcessione(getById(id,collectionName));
toReturn.setMongo_id(asString(id));
- return asConcessione(replace(asDocument(toReturn),collectionName));
+
+ toReturn = asConcessione(replace(asDocument(toReturn),collectionName));
+ log.debug("Registered {} ",toReturn);
+ return toReturn;
}
public Concessione replace(Concessione toRegister) throws IOException {
log.trace("Replacing {} ",toRegister);
- toRegister.setDefaults();
+ toRegister=onUpdate(toRegister);
return asConcessione(replace(asDocument(toRegister),collectionName));
}
- public Concessione update(String id,String json) throws IOException {
+/* public Concessione update(String id,String json) throws IOException {
log.trace("Updating id {} with {} ",id,json);
Concessione toReturn=asConcessione(update(asId(id),asDoc(json),collectionName));
log.debug("Refreshing defaults..");
toReturn.setDefaults();
return asConcessione(replace(asDocument(toReturn),collectionName));
}
-
+*/
public Iterable list(){
@@ -171,6 +185,7 @@ public class ConcessioniMongoManager extends MongoManager{
delete(asId(id), collectionName);
}catch(DeletionException e) {
//storing updated - partially deleted
+ concessione=onUpdate(concessione);
replace(asDocument(concessione), collectionName);
throw e;
}
@@ -188,15 +203,17 @@ public class ConcessioniMongoManager extends MongoManager{
log.debug("Removed from centroids "+toReturn.getMongo_id());
toReturn = unpublish(toReturn);
log.debug("Concessione after unpublishing is "+toReturn);
+ toReturn = onUpdate(toReturn);
+
return asConcessione(replace(asDocument(toReturn),collectionName));
}catch(Throwable t){
throw new DeletionException("Unable to unpublish "+id,t);
}
}
- public Concessione publish(String id) throws JsonProcessingException, IOException, InvalidStateException{
+ public Concessione publish(String id) throws IOException{
Concessione toReturn=asConcessione(getById(asId(id),collectionName));
- toReturn.setDefaults();
+ toReturn=onUpdate(toReturn);
toReturn.validate();
// MATERIALIZE LAYERS
@@ -211,35 +228,6 @@ public class ConcessioniMongoManager extends MongoManager{
}
-
-
- private static Concessione removeContent(Concessione concessione) throws DeletionException {
- if(concessione.getFolderId()==null) {
- log.debug("No content for " + concessione.getMongo_id());
- return concessione;
- }
- try {
- log.debug("Removing content for " + concessione.getMongo_id());
- WorkspaceManager manager = new WorkspaceManager();
- manager.removeFolderById(concessione.getFolderId());
-
- //Removing references from Object
- concessione.setFolderId(null);
- ArrayList list = new ArrayList<>();
- list.add(concessione.getPosizionamentoScavo());
- list.addAll(concessione.getPianteFineScavo());
- list.addAll(concessione.getImmaginiRappresentative());
- list.addAll(concessione.getGenericContent());
- for (AssociatedContent c : list) {
- c.getActualContent().clear();
- }
- return concessione;
- }catch(Throwable t){
- throw new DeletionException("Unable to delete from WS ",t);
- }
-
- }
-
public Concessione unregisterFileset(String id, String toClearPath) throws Exception {
log.info("Clearing Fileset at {} for {} ",toClearPath,id);
try {
@@ -258,8 +246,7 @@ public class ConcessioniMongoManager extends MongoManager{
}
toClearContent.getActualContent().clear();
- log.debug("Updating dafults for {} ",c);
- c.setDefaults();
+ c=onUpdate(c);
return asConcessione(replace(asDocument(c),collectionName));
}catch(Exception e) {
@@ -288,14 +275,39 @@ public class ConcessioniMongoManager extends MongoManager{
AssociatedContent section=c.getContentByPath(destinationPath);
log.debug("Found section {} for path {}",section,destinationPath);
store(section,files,ws,storage,baseFolder);
- log.debug("Updating dafults for {} ",c);
- c.setDefaults();
+
+ c=onUpdate(c);
return asConcessione(replace(asDocument(c),collectionName));
}catch(Exception e) {
throw new Exception("Unable to save file.",e);
}
}
+
+ /************************** STATIC ROUTINES *******************************/
+
+
+ /**
+ Sets Accounting data and Defaults
+ */
+ private static Concessione onUpdate(Concessione c){
+ log.debug("Updating Account data for {} ",c);
+
+ // SET ACCOUNTING
+ c.setLastUpdateTime(LocalDateTime.now());
+ try{
+ c.setLastUpdateUser(UserUtils.getCurrent().getUser().getId());
+ }catch(Throwable t){
+ log.warn("Unable to get User details ",t);
+ }
+
+ log.debug("Updating defaults for {}",c);
+ // Set Defaults
+ c.setDefaults();
+ return c;
+ }
+
+
private static Concessione index(Concessione record) {
log.info("Indexing {} ",record.getId());
ValidationReport report= new ValidationReport("Index Report ");
@@ -400,6 +412,8 @@ public class ConcessioniMongoManager extends MongoManager{
((LayerConcessione) c).setBbox(null);
((LayerConcessione) c).setWmsLink(null);
((LayerConcessione) c).setWorkspace(null);
+ ((LayerConcessione) c).setLayerName(null);
+
//Remove reference to removed content
c.getActualContent().removeAll(toRemove);
@@ -467,4 +481,31 @@ public class ConcessioniMongoManager extends MongoManager{
content.setMongo_id(asString(new ObjectId()));
}
+
+ private static Concessione removeContent(Concessione concessione) throws DeletionException {
+ if(concessione.getFolderId()==null) {
+ log.debug("No content for " + concessione.getMongo_id());
+ return concessione;
+ }
+ try {
+ log.debug("Removing content for " + concessione.getMongo_id());
+ WorkspaceManager manager = new WorkspaceManager();
+ manager.removeFolderById(concessione.getFolderId());
+
+ //Removing references from Object
+ concessione.setFolderId(null);
+ ArrayList list = new ArrayList<>();
+ list.add(concessione.getPosizionamentoScavo());
+ list.addAll(concessione.getPianteFineScavo());
+ list.addAll(concessione.getImmaginiRappresentative());
+ list.addAll(concessione.getGenericContent());
+ for (AssociatedContent c : list) {
+ c.getActualContent().clear();
+ }
+ return concessione;
+ }catch(Throwable t){
+ throw new DeletionException("Unable to delete from WS ",t);
+ }
+
+ }
}
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
new file mode 100644
index 0000000..adb71f1
--- /dev/null
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/MongoManagerI.java
@@ -0,0 +1,49 @@
+package org.gcube.application.geoportal.service.engine.mongo;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import org.bson.Document;
+import org.gcube.application.cms.plugins.faults.StepException;
+import org.gcube.application.geoportal.common.model.rest.QueryRequest;
+import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
+
+import java.io.IOException;
+
+public interface MongoManagerI {
+
+
+ // create
+
+ public T registerNew(Document toRegister) throws IOException, StepException;
+
+ // update
+ public T update(String id,T toSet) throws IOException, StepException;
+
+ // delete
+
+ public void delete(String id,boolean force) throws DeletionException;
+
+ // get By ID
+
+ public T getByID(String id) throws IOException;
+
+ // query
+
+ public Iterable query(QueryRequest request);
+ public Iterable filter(QueryRequest request);
+
+ // materialize
+
+ public T materialize(String id);
+
+ // dematerialize
+
+ public T dematerialize(String id);
+ // index
+
+ public T index(String id);
+
+ // deIndex
+ public T deIndex(String id);
+
+ public T performStep(String id, String step, Document options);
+}
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 55de3e1..df93e8b 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,5 +1,256 @@
package org.gcube.application.geoportal.service.engine.mongo;
-public class ProfiledMongoManager {
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.mongodb.client.MongoDatabase;
+import lombok.Synchronized;
+import lombok.extern.slf4j.Slf4j;
+import org.bson.Document;
+import org.bson.types.ObjectId;
+import org.gcube.application.cms.plugins.LifecycleManager;
+import org.gcube.application.cms.plugins.faults.StepException;
+import org.gcube.application.cms.plugins.model.PluginDescriptor;
+import org.gcube.application.cms.plugins.reports.ExecutionReport;
+import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
+import org.gcube.application.geoportal.common.model.document.*;
+import org.gcube.application.geoportal.common.model.legacy.Concessione;
+import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport;
+import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
+import org.gcube.application.geoportal.common.model.profile.Profile;
+import org.gcube.application.geoportal.common.model.rest.QueryRequest;
+import org.gcube.application.geoportal.service.engine.ImplementationProvider;
+import org.gcube.application.geoportal.service.engine.providers.PluginManager;
+import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
+import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
+import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.geoportal.service.utils.UserUtils;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+import java.io.IOException;
+import java.security.InvalidParameterException;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.function.Consumer;
+
+import static org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager.asConcessione;
+
+@Slf4j
+public class ProfiledMongoManager extends MongoManager implements MongoManagerI{
+
+
+ Profile profile;
+ MongoDatabase db=null;
+
+ LifecycleManager lfManager;
+
+
+ public ProfiledMongoManager(String profileId) throws ConfigurationException {
+ // Check Profile ID
+ log.info("Loading profile ID {} ",profileId);
+ if(profileId==null) throw new InvalidParameterException("Profile ID cannot be null");
+ Map profiles=ImplementationProvider.get().getProfiles().getObject();
+ if(!profiles.containsKey(profileId)) {
+ log.debug("Asked profile {} not found. Available ones are {} ",profileId,profiles.keySet());
+ throw new WebApplicationException("Profile " + profileId + " not registered", Response.Status.NOT_FOUND);
+ }
+ profile=profiles.get(profileId);
+ log.debug("Loaded Profile {} ",profile);
+
+
+
+
+ //Getting Lifecycle Manager declaration from Profile
+ List handlerDeclarations= profile.getHandlersMap().get(PluginDescriptor.BaseTypes.LIFECYCLE_MANAGER);
+ if(handlerDeclarations==null || handlerDeclarations.isEmpty()) throw new ConfigurationException("No Lifecycle Handler defined for profile ID "+profileId);
+ if(handlerDeclarations.size()>1) throw new ConfigurationException("Too many Lifecycle Handlers defined ("+handlerDeclarations+") in profile ID "+profileId);
+
+ HandlerDeclaration lcHandlerDeclaration=handlerDeclarations.get(0);
+
+ // Loading Lifecycle Manager
+ log.debug("Looking for handler {} ",lcHandlerDeclaration);
+ try{
+ lfManager=(LifecycleManager) ImplementationProvider.get().getPluginManager().getObject().get(lcHandlerDeclaration.getId());
+ if(lfManager==null) throw new ConfigurationException("Unable to find Lifecycle Manager Plugin. ID "+lcHandlerDeclaration.getId());
+ }catch(ClassCastException e){
+ throw new ConfigurationException("Unable to use "+lcHandlerDeclaration.getId()+" as Lifecycle Manager");
+ }
+
+
+ // Connect to DB
+ String toUseDB=super.client.getConnection().getDatabase();
+ log.info("Connecting to DB {} ",toUseDB);
+
+ // TODO MAP OF DATABASES?
+ db=client.getTheClient().getDatabase(toUseDB);
+ }
+
+
+
+
+ private ProfiledDocument onUpdate(ProfiledDocument updatedDocument) throws StepException {
+
+ UserUtils.AuthenticatedUser u = UserUtils.getCurrent();
+ updatedDocument.getInfo().setLastEditInfo(u.asInfo());
+
+ return step(updatedDocument,StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT).getResult();
+ }
+
+ private Document asDocument(ProfiledDocument d) throws JsonProcessingException {
+ return Document.parse(Serialization.write(d));
+ }
+
+ private ProfiledDocument asProfiledDocument(Document d) throws IOException {
+ return Serialization.read(d.toJson(),ProfiledDocument.class);
+ }
+
+ private String getCollectionName(){
+ // TODO Profile can directly specify, use ID only as default
+
+ return profile.getId();
+ }
+
+ @Override
+ public MongoDatabase getDatabase(){
+ return db;
+ }
+
+ @Override
+ public ProfiledDocument registerNew(Document toRegisterDoc) throws IOException, StepException {
+ log.info("Registering new document in {} ",profile.getId());
+ log.debug("Going to register {}",toRegisterDoc.toJson());
+
+ ProfiledDocument toRegister = new ProfiledDocument();
+ toRegister.setTheDocument(toRegisterDoc);
+
+
+ PublicationInfo pubInfo=new PublicationInfo();
+ pubInfo.setCreationInfo(UserUtils.getCurrent().asInfo());
+
+ // TODO Set Access From Profile
+ Access access=new Access();
+ access.setLicense("");
+ access.setPolicy(AccessPolicy.OPEN);
+ pubInfo.setAccess(access);
+
+ toRegister.setInfo(pubInfo);
+
+ toRegister.setProfileID(profile.getId());
+ toRegister.setProfileVersion(profile.getVersion());
+ toRegister.setVersion(new ComparableVersion("1.0.0"));
+
+ // Apply Lifecycle
+
+ toRegister=step(toRegister,StepExecutionRequest.Steps.ON_INIT_DOCUMENT).getResult();
+
+ log.debug("Going to register {} ",toRegister);
+
+ // Insert object
+ ObjectId id =insert(asDocument(toRegister),getCollectionName());
+
+ log.info("Obtained id {} ",id);
+ return getByID(id.toHexString());
+ }
+
+ @Override
+ public ProfiledDocument update(String id, ProfiledDocument toSet) throws IOException, StepException {
+ log.trace("Replacing {} ",toSet);
+ toSet=onUpdate(toSet);
+ return asProfiledDocument(replace(asDocument(toSet),getCollectionName()));
+ }
+
+ @Override
+ public void delete(String id,boolean force) throws DeletionException {
+ log.debug("Deleting by ID {}, force {}",id,force);
+ try{
+ ProfiledDocument doc =getByID(id);
+
+ // TODO INVOKE LIFECYCLE
+
+ //if(!force&&isPublished(id)) throw new Exception("Cannot delete published documents. Unpublish it or use force = true");
+
+ try{
+ // TODO CHECK PHASE AND STATUS
+ // DEINDEX
+ // DEMATERIALIZE
+ // DELETE CONTENT
+ // DELETE ENTRY
+ throw new DeletionException("IMPLEMENT THIS");
+ // delete(asId(id), getCollectionName());
+ }catch(DeletionException e) {
+ //storing updated - partially deleted
+ // concessione=onUpdate(concessione);
+ // replace(asDocument(concessione), collectionName);
+ throw e;
+ }
+ }catch(Throwable t){
+ throw new DeletionException("Unable to delete "+id,t);
+ }
+ }
+
+ @Override
+ public ProfiledDocument getByID(String id) throws IOException {
+ return asProfiledDocument(super.getById(asId(id),getCollectionName()));
+ }
+
+ @Override
+ public Iterable query(QueryRequest queryRequest) {
+ log.info("Querying {} ",queryRequest);
+ LinkedBlockingQueue queue=new LinkedBlockingQueue();
+ query(queryRequest,getCollectionName()).forEach(
+ (Consumer super Document>) (Document d)->{try{
+ queue.put(d);
+ }catch(Throwable t){log.warn("Unable to translate "+d);}});
+ log.info("Returned {} elements ",queue.size());
+ return queue;
+ }
+
+ @Override
+ public Iterable filter(QueryRequest queryRequest) {
+ log.info("Searching concessione for filter {} ",queryRequest);
+ LinkedBlockingQueue queue=new LinkedBlockingQueue();
+ query(queryRequest,getCollectionName()).forEach(
+ (Consumer super Document>) (Document d)->{try{
+ queue.put(d);
+ }catch(Throwable t){log.warn("Unable to translate "+d);}});
+ log.info("Returned {} elements ",queue.size());
+ return queue;
+ }
+
+ @Override
+ public ProfiledDocument materialize(String id) {
+ throw new RuntimeException("TO IMPLEMENT");
+ }
+
+ @Override
+ public ProfiledDocument dematerialize(String id) {
+ throw new RuntimeException("TO IMPLEMENT");
+ }
+
+ @Override
+ public ProfiledDocument index(String id) {
+ throw new RuntimeException("TO IMPLEMENT");
+ }
+
+ @Override
+ public ProfiledDocument deIndex(String id) {
+ throw new RuntimeException("TO IMPLEMENT");
+ }
+
+ @Override
+ public ProfiledDocument performStep(String id, String step, Document options) {
+ throw new RuntimeException("TO IMPLEMENT");
+ }
+
+
+
+ private ExecutionReport step(ProfiledDocument theDocument,String step) throws StepException {
+ log.info("[Profile {} ] Invoking Step {} on " ,profile.getId(),step,lfManager.getDescriptor());
+ StepExecutionRequest request=new StepExecutionRequest();
+ request.setDocument(theDocument);
+ request.setProfile(profile);
+ request.setStep(StepExecutionRequest.Steps.ON_INIT_DOCUMENT);
+ log.debug("Requesting Step Execution {} ",request);
+ return lfManager.performStep(request);
+ }
}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/AbstractScopedMap.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/AbstractScopedMap.java
index d675162..f154040 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/AbstractScopedMap.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/AbstractScopedMap.java
@@ -5,8 +5,9 @@ import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
+import org.gcube.application.geoportal.common.utils.ContextUtils;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
-import org.gcube.application.geoportal.service.utils.ContextUtils;
+
import java.time.LocalDateTime;
import java.time.temporal.TemporalAmount;
@@ -26,7 +27,7 @@ public abstract class AbstractScopedMap implements Engine{
private String name;
@Synchronized
public T getObject() throws ConfigurationException {
- String currentScope=ContextUtils.getCurrentScope();
+ String currentScope= ContextUtils.getCurrentScope();
log.debug(name+" : obtaining object for context "+currentScope);
TTLObject found=scopeMap.get(currentScope);
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
new file mode 100644
index 0000000..bf2f9ad
--- /dev/null
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/PluginManager.java
@@ -0,0 +1,110 @@
+package org.gcube.application.geoportal.service.engine.providers;
+
+import lombok.extern.slf4j.Slf4j;
+import org.gcube.application.cms.plugins.InitializablePlugin;
+import org.gcube.application.cms.plugins.Plugin;
+import org.gcube.application.cms.plugins.faults.InitializationException;
+import org.gcube.application.cms.plugins.faults.ShutDownException;
+import org.gcube.application.cms.plugins.reports.InitializationReport;
+import org.gcube.application.geoportal.common.utils.ContextUtils;
+import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
+
+import org.reflections.Reflections;
+import org.reflections.util.ConfigurationBuilder;
+import org.reflections.util.FilterBuilder;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.ServiceLoader;
+
+@Slf4j
+public class PluginManager extends AbstractScopedMap>{
+
+ Map implementations=new HashMap<>();
+
+
+ public PluginManager(){
+ super("Plugin Cache");
+ // reflections
+
+ Reflections reflections = new Reflections(
+ new ConfigurationBuilder()
+ .forPackage("org.gcube.application.cms")
+ .filterInputsBy(new FilterBuilder().includePackage("org.gcube.application.cms")));
+
+ reflections.getSubTypesOf(Plugin.class).iterator().forEachRemaining(pluginClass->{
+ if(!pluginClass.isInterface()){
+ try {
+ Plugin plugin = pluginClass.newInstance();
+ log.debug("Loading {} descriptiorn : ", plugin, plugin.getDescriptor());
+ implementations.put(plugin.getDescriptor().getId(), plugin);
+ }catch (Throwable t){
+ log.warn("Unable to instantiate Plugin "+pluginClass,t);
+ }
+ }
+
+ });
+
+ log.info("Loaded {} plugins",implementations.keySet().size());
+
+ // Init plugins
+ implementations.forEach((id,p)->{
+ if(p instanceof InitializablePlugin){
+ log.info("INIT Plugin {}",id);
+ try {
+ InitializablePlugin ip=(InitializablePlugin) p;
+ InitializationReport rep=ip.init();
+ log.info("INIT REPORT : {}",rep);
+ }catch (InitializationException e){
+ log.error("Failed to initialize "+id,e);
+ }catch(Throwable t){
+ log.error("Unable to initialize "+id,t);
+ }
+ }
+ });
+ }
+
+
+ @Override
+ protected Map retrieveObject() throws ConfigurationException {
+ // Init plugins
+ implementations.forEach((id,p)->{
+ if(p instanceof InitializablePlugin){
+ log.info("INIT Plugin {} in context {} ",id, ContextUtils.getCurrentScope());
+ try {
+ InitializablePlugin ip=(InitializablePlugin) p;
+ InitializationReport rep=ip.initInContext();
+ log.info("INIT REPORT : {}",rep);
+ }catch (InitializationException e){
+ log.error("Failed to initialize "+id,e);
+ }catch(Throwable t){
+ log.error("Unable to initialize "+id,t);
+ }
+ }
+ });
+ return implementations;
+ }
+
+ @Override
+ protected void dispose(Map toDispose) {
+ // ShutDown plugins
+ implementations.forEach((id,p)->{
+ if(p instanceof InitializablePlugin){
+ log.info("Shutting down Plugin {}",id);
+ try {
+ InitializablePlugin ip=(InitializablePlugin) p;
+ ip.shutdown();
+ }catch (ShutDownException e){
+ log.error("Failed to shutdown "+id,e);
+ }catch(Throwable t){
+ log.error("Unable to shutdown "+id,t);
+ }
+ }
+ });
+ }
+
+ @Override
+ public void init() {
+
+ }
+}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ProfileMapCache.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ProfileMapCache.java
index d9a8eb4..4545e6d 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ProfileMapCache.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ProfileMapCache.java
@@ -1,34 +1,56 @@
package org.gcube.application.geoportal.service.engine.providers;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import lombok.extern.slf4j.Slf4j;
import org.gcube.application.geoportal.common.model.profile.Profile;
+import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
+import org.gcube.application.geoportal.service.utils.Serialization;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.util.HashMap;
import java.util.Map;
-
+@Slf4j
public class ProfileMapCache extends AbstractScopedMap> {
- public ProfileMapCache(String name) {
- super(name);
- // TODO Auto-generated constructor stub
+ public ProfileMapCache() {
+ super("Profiles CACHE");
+
}
@Override
public void init() {
- // TODO Auto-generated method stub
}
@Override
protected void dispose(Map toDispose) {
- // TODO Auto-generated method stub
-
+
}
@Override
protected Map retrieveObject() throws ConfigurationException {
- // TODO Auto-generated method stub
- return null;
+
+
+ // Load from resources
+ HashMap toReturn=new HashMap<>();
+
+ try {
+ Profile p=Serialization.read(Files.
+ readFileAsString(Files.getFileFromResources("profiles/profiledConcessioni.json").getAbsolutePath(), Charset.defaultCharset()), Profile.class);
+ log.debug("Loaded "+p.getName()+" ID "+p.getId());
+ toReturn.put(p.getId(),p);
+
+
+ }catch (JsonProcessingException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return toReturn;
+
}
}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/DBConstants.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/DBConstants.java
index 17cd57a..58d243a 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/DBConstants.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/model/internal/db/DBConstants.java
@@ -65,6 +65,9 @@ public class DBConstants {
public static final String PAROLE_CHIAVE="parole_chiave";
+ //
+
+
public static final ArrayList COLUMNS=new ArrayList();
public static final PostgisTable CENTROIDS=new PostgisTable("centroids_concessioni",
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 3d85e9c..426f46e 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
@@ -225,7 +225,8 @@ public class ConcessioniOverMongo {
StringBuilder builder=new StringBuilder("[");
manager.query(Serialization.parseQuery(queryString))
.forEach(d->{builder.append(d.toJson()+",");});
- builder.deleteCharAt(builder.length()-1);
+ if(builder.length()>1)
+ builder.deleteCharAt(builder.length()-1);
builder.append("]");
return builder.toString();
}
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
new file mode 100644
index 0000000..0422a28
--- /dev/null
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java
@@ -0,0 +1,118 @@
+package org.gcube.application.geoportal.service.rest;
+
+import lombok.extern.slf4j.Slf4j;
+import org.bson.Document;
+import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
+import org.gcube.application.geoportal.common.model.legacy.Concessione;
+import org.gcube.application.geoportal.common.model.rest.Configuration;
+import org.gcube.application.geoportal.common.model.rest.QueryRequest;
+import org.gcube.application.geoportal.common.rest.InterfaceConstants;
+import org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager;
+import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager;
+import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
+import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
+import org.gcube.application.geoportal.service.utils.Serialization;
+import org.json.JSONArray;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+
+@Path(InterfaceConstants.Methods.PROJECTS+"/{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
+@Slf4j
+public class ProfiledDocuments {
+
+ private ProfiledMongoManager manager;
+
+ public ProfiledDocuments(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String profileID) throws ConfigurationException {
+ log.debug("Accessing profiles "+profileID);
+ manager=new GuardedMethod(){
+ @Override
+ protected ProfiledMongoManager run() throws Exception {
+ return new ProfiledMongoManager(profileID);
+ }
+ }.execute().getResult();
+ }
+
+ @GET
+ @Path(InterfaceConstants.Methods.CONFIGURATION_PATH)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Configuration getConfiguration(){
+ return new GuardedMethod(){
+
+ @Override
+ protected Configuration run() throws Exception, WebApplicationException {
+ //manager.getConfiguration();
+ throw new Exception("Implement This Method");
+ }
+ }.execute().getResult();
+ }
+
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public ProfiledDocument createNew(Document d) {
+ return new GuardedMethod() {
+ @Override
+ protected ProfiledDocument run() throws Exception, WebApplicationException {
+ return manager.registerNew(d);
+ }
+ }.execute().getResult();
+ }
+
+ //********************************** READ
+
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public Iterable> list() {
+ return new GuardedMethod>() {
+ protected Iterable> run() throws Exception ,WebApplicationException {
+ return manager.query(new QueryRequest());
+ };
+ }.execute().getResult();
+ }
+
+ // BY ID
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
+ public ProfiledDocument getById(@PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id) {
+ return new GuardedMethod() {
+ @Override
+ protected ProfiledDocument run() throws Exception, WebApplicationException {
+ return manager.getByID(id);
+ }
+ }.execute().getResult();
+ }
+
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("/"+InterfaceConstants.Methods.SEARCH_PATH)
+ public String search(String filter){
+ return new GuardedMethod() {
+ @Override
+ protected String run() throws Exception, WebApplicationException {
+ QueryRequest req=new QueryRequest();
+ req.setFilter(Document.parse(filter));
+ return Serialization.write(manager.query(req));
+ }
+ }.execute().getResult();
+ }
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ @Path("/"+InterfaceConstants.Methods.QUERY_PATH)
+ public Iterable> query(String queryString){
+ return new GuardedMethod>() {
+ @Override
+ protected Iterable> run() throws Exception, WebApplicationException {
+ return manager.query(Serialization.parseQuery(queryString));
+ }
+ }.execute().getResult();
+ }
+
+
+}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Profiles.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Profiles.java
deleted file mode 100644
index 5559c02..0000000
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Profiles.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.gcube.application.geoportal.service.rest;
-
-public class Profiles {
-
-}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Projects.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Projects.java
deleted file mode 100644
index d6f2acb..0000000
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Projects.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package org.gcube.application.geoportal.service.rest;
-
-import lombok.extern.slf4j.Slf4j;
-import org.bson.Document;
-import org.gcube.application.geoportal.common.model.project.Project;
-import org.gcube.application.geoportal.common.rest.InterfaceConstants;
-
-import javax.ws.rs.*;
-import javax.ws.rs.core.MediaType;
-import java.util.Collections;
-import java.util.List;
-
-@Path(InterfaceConstants.Methods.PROJECTS)
-@Slf4j
-public class Projects {
-
- //***************** GENERIC PROJECTS
- // GET ALL
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- public List getAll() {
- return new GuardedMethod>() {
- protected List run() throws Exception ,WebApplicationException {
- return Collections.singletonList(new Project());
- };
- }.execute().getResult();
- }
-
- @POST
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Path("/search")
- public List getFilteredAll(Document filter){
- return new GuardedMethod>() {
- protected List run() throws Exception ,WebApplicationException {
- return Collections.singletonList(new Project());
- };
- }.execute().getResult();
- }
-
-
- //***************** BY PROFILE ID
-
- // Create new Project
- @PUT
- @Produces(MediaType.APPLICATION_JSON)
- @Consumes(MediaType.APPLICATION_JSON)
- @Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
- public Project registerNew(@PathParam(InterfaceConstants.Parameters.PROFILE_ID)String profileId,
- Document toRegister) {
- return new GuardedMethod() {
- @Override
- protected Project run() throws Exception, WebApplicationException {
- return new Project();
- }
- }.execute().getResult();
- }
-
-
- // GET ALL (Filters apply)
- @POST
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Path("/search/{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
- public List getFilteredAllInProfiles(@PathParam(InterfaceConstants.Parameters.PROFILE_ID)String profileId,
- Document filters) {
- return new GuardedMethod>() {
- protected List run() throws Exception ,WebApplicationException {
- return Collections.singletonList(new Project());
- };
- }.execute().getResult();
- }
-
- // GET ALL
- @GET
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}")
- public List getAllinProfile(@PathParam(InterfaceConstants.Parameters.PROFILE_ID)String profileId) {
- return new GuardedMethod>() {
- protected List run() throws Exception ,WebApplicationException {
- return Collections.singletonList(new Project());
- };
- }.execute().getResult();
- }
-
-
- //***************** BY PROFILE ID + PROJECT ID
- // GET BY ID
- @GET
- @Produces(MediaType.APPLICATION_JSON)
- @Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}/{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
- public Project getByID(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String profile,
- @PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id) {
- Project toReturn=new GuardedMethod() {
- @Override
- protected Project run() throws Exception ,WebApplicationException{
- return new Project();
- }
- }.execute().getResult();
- return toReturn;
- }
-
-
- // DELETE BY ID
- @DELETE
- @Produces(MediaType.APPLICATION_JSON)
- @Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}/{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
- public void delete(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String profile,
- @PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id) {
- new GuardedMethod() {
- @Override
- protected Project run() throws Exception ,WebApplicationException{
- // TODO DELETE
- return null;
- }
- }.execute().getResult();
- }
-
- @PUT
- @Consumes(MediaType.APPLICATION_JSON)
- @Produces(MediaType.APPLICATION_JSON)
- @Path("{"+InterfaceConstants.Parameters.PROFILE_ID+"}/{"+InterfaceConstants.Parameters.PROJECT_ID+"}")
- public Project updateDocument(@PathParam(InterfaceConstants.Parameters.PROFILE_ID) String profile,
- @PathParam(InterfaceConstants.Parameters.PROJECT_ID) String id,Document toSetDocument) {
- Project toReturn=new GuardedMethod() {
- @Override
- protected Project run() throws Exception ,WebApplicationException{
- return new Project();
- }
- }.execute().getResult();
- return toReturn;
- }
-}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/ContextUtils.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/ContextUtils.java
deleted file mode 100644
index c940b71..0000000
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/ContextUtils.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.gcube.application.geoportal.service.utils;
-
-import lombok.extern.slf4j.Slf4j;
-import org.gcube.common.authorization.library.AuthorizationEntry;
-import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
-import org.gcube.common.scope.api.ScopeProvider;
-
-import static org.gcube.common.authorization.client.Constants.authorizationService;
-
-@Slf4j
-public class ContextUtils {
-
- public static String getCurrentScope(){
- try{
- String token=SecurityTokenProvider.instance.get();
- log.debug("Token is : "+token);
- if(token==null) throw new Exception("Security Token is null");
- AuthorizationEntry entry = authorizationService().get(token);
- return entry.getContext();
- }catch(Exception e ){
- log.debug("Unable to resolve token, checking scope provider..",e);
- return ScopeProvider.instance.get();
- }
- }
-
- public static String getCurrentCaller(){
- try{
- String token=SecurityTokenProvider.instance.get();
- log.debug("Token is : "+token);
- if(token==null) throw new Exception("Security Token is null");
- AuthorizationEntry entry = authorizationService().get(token);
- return entry.getClientInfo().getId();
- }catch(Exception e ){
- log.debug("Unable to resolve token, checking scope provider..",e);
- return "Unidentified data-transfer user";
- }
- }
-}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java
index dbe892c..ef9812f 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
@@ -12,6 +13,7 @@ import java.io.IOException;
import java.time.format.DateTimeFormatter;
import java.util.Iterator;
+@Slf4j
public class Serialization {
@@ -43,11 +45,13 @@ public class Serialization {
public static QueryRequest parseQuery(String queryString) throws IOException {
+ log.debug("Parsing query Request {} ",queryString);
Document queryDocument = Document.parse(queryString);
+ log.debug("Document is ",queryDocument.toJson());
QueryRequest req = new QueryRequest();
- if (queryDocument.containsKey("ordering"))
+ if (queryDocument.getOrDefault("ordering",null)!=null)
req.setOrdering(Serialization.read(((Document) queryDocument.get("ordering")).toJson(), QueryRequest.OrderedRequest.class));
- if (queryDocument.containsKey("paging"))
+ if (queryDocument.getOrDefault("paging",null)!=null)
req.setPaging(Serialization.read(((Document) queryDocument.get("paging")).toJson(), QueryRequest.PagedRequest.class));
req.setProjection(queryDocument.get("projection", Document.class));
req.setFilter(queryDocument.get("filter", Document.class));
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/UserUtils.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/UserUtils.java
new file mode 100644
index 0000000..f7f7d7f
--- /dev/null
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/UserUtils.java
@@ -0,0 +1,86 @@
+package org.gcube.application.geoportal.service.utils;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.gcube.application.geoportal.common.model.document.AccountingInfo;
+import org.gcube.application.geoportal.common.model.document.Context;
+import org.gcube.application.geoportal.common.model.document.User;
+import org.gcube.common.authorization.library.provider.AccessTokenProvider;
+import org.gcube.common.authorization.library.provider.AuthorizationProvider;
+import org.gcube.common.authorization.library.provider.ClientInfo;
+import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
+import org.gcube.common.scope.api.ScopeProvider;
+
+import java.time.LocalDateTime;
+
+@Slf4j
+public class UserUtils {
+
+ public static AuthenticatedUser getCurrent() throws SecurityException {
+ String context=ScopeProvider.instance.get();
+ if(context==null) throw new SecurityException("Cannot determine context");
+
+ log.debug("Context is {}, checking tokens..",context);
+
+ ClientInfo client = null;
+ try{
+ AuthorizationProvider.instance.get().getClient();
+ }catch(Throwable e) {
+ log.warn("Unable to get client info ",e);
+ }
+ AuthenticatedUser toReturn = new AuthenticatedUser(client, AccessTokenProvider.instance.get(),SecurityTokenProvider.instance.get(),context);
+
+ log.info("Current User is {} ",toReturn);
+ return toReturn;
+ }
+
+
+ @AllArgsConstructor
+ @Getter
+ public static class AuthenticatedUser {
+ private ClientInfo user;
+ private String uma_token;
+
+ private String gcube_token;
+
+ private String context;
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("User [user=");
+ builder.append(user);
+ builder.append(", uma_token=");
+ builder.append(uma_token==null?uma_token:"***");
+
+ builder.append(", gcube_token=");
+ builder.append(gcube_token==null?gcube_token:"***");
+
+ builder.append(", context=");
+ builder.append(context);
+ builder.append("]");
+ return builder.toString();
+ }
+
+ public AccountingInfo asInfo(){
+ AccountingInfo info=new AccountingInfo();
+ User user = new User();
+ try{
+ user.setUsername(this.getUser().getId());
+ }catch(Exception e){
+ log.warn("Unable to determine user id, using FAKE");
+ user.setUsername("FAKE");
+ }
+
+ info.setUser(user);
+ info.setInstant(LocalDateTime.now());
+ Context c=new Context();
+ c.setId(this.context);
+ c.setName(context.contains("/")?context.substring(context.lastIndexOf("/")):context);
+ info.setContext(c);
+ return info;
+ }
+
+ }
+}
diff --git a/geoportal-service/src/main/resources/profiles/profiledConcessioni.json b/geoportal-service/src/main/resources/profiles/profiledConcessioni.json
new file mode 100644
index 0000000..b75605f
--- /dev/null
+++ b/geoportal-service/src/main/resources/profiles/profiledConcessioni.json
@@ -0,0 +1,16 @@
+{
+ "id" : "profiledConcessioni",
+ "version" : "1.0.0",
+ "name" : "Concessione",
+ "description" : "Embedded profile for concessioni [mibac] management",
+ "creationInfo": {
+ "user" : {
+ "username": "fabio.sinibaldi"
+ }
+ },
+ "handlers" : [
+ {
+ "id" : "GNA-CONCESSIONI-LC",
+ "type" : "LifecycleManagement"}
+ ]
+}
\ No newline at end of file
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java
index ed06918..02990ae 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java
@@ -20,7 +20,8 @@ public class BasicServiceTestUnit extends JerseyTest {
}
protected static String scope="/gcube/devsec/devVRE";
-
+// protected static String scope="/pred4s/preprod/preVRE";
+// protected static String scope="/d4science.research-infrastructures.eu/D4OS/GeoNA-Prototype";
@BeforeClass
public static void init() {
@@ -32,40 +33,6 @@ public class BasicServiceTestUnit extends JerseyTest {
}
});
-
-/*
- ImplementationProvider.get().setStorageProvider(new StorageClientProvider() {
- @Override
- public IClient getObject() throws ConfigurationException {
- TokenSetter.set(scope);
- return super.getObject();
- }
- });
-
-
- ImplementationProvider.get().setMongoConnectionProvider(new MongoConnectionProvider() {
- @Override
- public org.gcube.application.geoportal.service.model.internal.db.MongoConnection getObject() throws ConfigurationException {
- TokenSetter.set(scope);
- return super.getObject();
- }
- });
-
- ImplementationProvider.get().setMongoClientProvider(new MongoClientProvider() {
- @Override
- public MongoClient getObject() throws ConfigurationException {
- TokenSetter.set(scope);
- return super.getObject();
- }
- });
-
- ImplementationProvider.get().setDbProvider(new PostgisConnectionProvider() {
- @Override
- public PostgisDBManager getObject() throws ConfigurationException {
- TokenSetter.set(scope);
- return super.getObject();
- }
- });*/
}
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java
index 15cdc48..f084f6d 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java
@@ -1,18 +1,22 @@
package org.gcube.application.geoportal.service;
import org.gcube.application.cms.tests.TokenSetter;
-import org.gcube.application.cms.tests.model.TestFilters;
-import org.gcube.application.cms.tests.model.TestQueries;
-import org.gcube.application.cms.tests.model.TestModel;
+
+import org.gcube.application.cms.tests.model.concessioni.TestConcessioniFilters;
+import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
+import org.gcube.application.cms.tests.model.concessioni.TestConcessioniQueries;
+import org.gcube.application.geoportal.common.model.legacy.AccessPolicy;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.Concessione.Paths;
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport.ValidationStatus;
+import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.FileSets;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.common.storagehub.model.query.Queries;
import org.json.JSONObject;
import org.junit.Assert;
import org.junit.Before;
@@ -48,7 +52,7 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
FileSets.RequestBuilder builder = FileSets.build(path);
for(String file:files)
- builder.add(storage.putOntoStorage(new File(TestModel.getBaseFolder(),file),file));
+ builder.add(storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),file),file));
return check(target.path(FILES_PATH).path(id).request(MediaType.APPLICATION_JSON).
post(Entity.entity(Serialization.write(builder.getTheRequest()),
@@ -87,13 +91,14 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
return check(resp,Concessione.class);
}
+
private static Concessione register(WebTarget target, Concessione c) throws Exception {
Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(c), MediaType.APPLICATION_JSON));
return check(resp,Concessione.class);
}
private static Concessione get(WebTarget target) throws Exception {
- return register(target, TestModel.prepareConcessione());
+ return register(target, TestConcessioniModel.prepareConcessione());
}
private static Concessione getById(WebTarget target ,String id) throws Exception {
@@ -110,10 +115,10 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
private static Iterator queryFile(String filename, WebTarget target, Class clazz) throws Exception {
- String queryString= TestQueries.queries.get(filename);
+ QueryRequest req= Serialization.parseQuery(TestConcessioniQueries.queries.get(filename));
String result = check(target.path(InterfaceConstants.Methods.QUERY_PATH).request(MediaType.APPLICATION_JSON_TYPE).post(
- Entity.entity(queryString,MediaType.APPLICATION_JSON)),String.class);
+ Entity.entity(Serialization.write(req),MediaType.APPLICATION_JSON)),String.class);
return Serialization.readCollection(result,clazz);
}
@@ -133,7 +138,7 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
public void search() throws Exception {
WebTarget target=target(PATH);
AtomicLong validatedCount= new AtomicLong(0);
- Iterator it=search(TestFilters.filters.get("validated.json"),target);
+ Iterator it=search(TestConcessioniFilters.filters.get("validated.json"),target);
it.forEachRemaining(concessione -> {validatedCount.incrementAndGet();});
System.out.println("Validated : "+ validatedCount.get());
}
@@ -142,13 +147,14 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
public void query() throws Exception {
WebTarget target=target(PATH);
- Iterator it=null;
- it=queryFile("lastRegistered.json", target);
- assertTrue(count(it)==1);
+ Iterator it;
+
+ assertEquals(1, count( queryFile("lastRegistered.json", target)));
+ assertEquals(0, count( queryFile("emptyresult.json",target)));
it=queryFile("firstRegistered.json", target);
- assertTrue(count(it)==1);
+ assertEquals(1, count(it));
System.out.println("Last Names by Fabio : ");
queryFile("lastNameRegisteredByFabio.json", target, JSONObject.class).forEachRemaining(c -> {System.out.println(c);});
@@ -167,7 +173,7 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
@Test
public void createNew() throws Exception {
WebTarget target=target(PATH);
- Concessione c=register(target,TestModel.prepareConcessione());
+ Concessione c=register(target,TestConcessioniModel.prepareConcessione());
Assert.assertTrue(c.getMongo_id()!=null&&!c.getMongo_id().isEmpty());
}
@@ -190,8 +196,8 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
@Test
public void republish() throws Exception{
WebTarget target=target(PATH);
-// Concessione published=getFullPublished(target);
- Concessione published=getById(target,"6155ba6002ad3d2c23b72b5a");
+ Concessione published=getFullPublished(target);
+ //Concessione published=getById(target,"6155ba6002ad3d2c23b72b5a");
published = unpublish(target,published.getMongo_id());
System.out.println("Republishing..");
published=publish(target,published.getMongo_id());
@@ -234,14 +240,14 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
@Test
public void uploadFile() throws Exception {
WebTarget target=target(PATH);
- Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(TestModel.prepareEmptyConcessione()), MediaType.APPLICATION_JSON));
+ Response resp=target.request(MediaType.APPLICATION_JSON).post(Entity.entity(Serialization.write(TestConcessioniModel.prepareEmptyConcessione()), MediaType.APPLICATION_JSON));
Concessione c=check(resp,Concessione.class);
Assert.assertTrue(c.getMongo_id()!=null&&!c.getMongo_id().isEmpty());
System.out.println("ID IS "+c.getMongo_id());
// Insert section
- c.setRelazioneScavo(TestModel.prepareConcessione().getRelazioneScavo());
- // c.getRelazioneScavo().setMongo_id(TestModel.rnd());
+ c.setRelazioneScavo(TestConcessioniModel.prepareConcessione().getRelazioneScavo());
+ // c.getRelazioneScavo().setMongo_id(TestConcessioniModel.rnd());
resp=target.request(MediaType.APPLICATION_JSON).put(Entity.entity(Serialization.write(c), MediaType.APPLICATION_JSON));
@@ -270,10 +276,8 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
System.out.println("Error for deletion is "+resp.readEntity(String.class));
//unpublish
- resp=
- target.path(InterfaceConstants.Methods.PUBLISH_PATH).path(published.getMongo_id()).
- request(MediaType.APPLICATION_JSON).delete();
- check(resp,null);
+
+ unpublish(target,published.getMongo_id());
//Actually cleaning posizionamento
published=check(
@@ -300,8 +304,7 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
assertNotNull(published.getReport());
assertEquals(ValidationStatus.PASSED,published.getReport().getStatus());
- assertEquals(published.getImmaginiRappresentative().size(),2);
- assertEquals(published.getPianteFineScavo().size(),1);
+
assertNotNull(published.getPosizionamentoScavo().getWmsLink());
for(LayerConcessione l : published.getPianteFineScavo()) {
assertNotNull(l.getWmsLink());
@@ -312,10 +315,13 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
private Concessione getFullPublished(WebTarget target) throws Exception {
- File layerFolder=TestModel.getBaseFolder();
+ File layerFolder=TestConcessioniModel.getBaseFolder();
Map> layers = Files.getAllShapeSet(layerFolder,true);
- Concessione c=TestModel.prepareConcessione(layers.size(),1);
+ Concessione c=TestConcessioniModel.prepareConcessione(layers.size(),1);
+
+ c.getRelazioneScavo().setPolicy(AccessPolicy.EMBARGOED);
+ assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
c.setNome("Concessione : publish test ");
StorageUtils storage=new StorageUtils();
@@ -324,16 +330,20 @@ public class ConcessioniOverMongoTest extends BasicServiceTestUnit{
// Register new
c=register(target,c);
+ assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
+
//Upload files
c=upload(storage,target,c.getMongo_id(),Paths.RELAZIONE,"relazione.pdf");
+ assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
+
c=upload(storage,target,c.getMongo_id(),Paths.ABSTRACT_RELAZIONE,"relazione.pdf");
String[] keys=layers.keySet().toArray(new String [0]);
c=upload(storage,target,c.getMongo_id(),Paths.POSIZIONAMENTO,
-// TestModel.getBaseFolder().list((file,name)->{return name.startsWith("pianta.shp");}));
+// TestConcessioniModel.getBaseFolder().list((file,name)->{return name.startsWith("pianta.shp");}));
layers.get(keys[0]).toArray(new File[0]));
-
+ assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
// Clash on workspaces
for(int i=0;i{return name.startsWith("pianta.shp");}));
+// TestConcessioniModel.getBaseFolder().list((file,name)->{return name.startsWith("pianta.shp");}));
layers.get(key).toArray(new File[0]));
}
+ assertEquals(AccessPolicy.EMBARGOED,c.getRelazioneScavo().getPolicy());
// Immagini
for (int i = 0; i iterator){
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProjectTests.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProjectTests.java
index cbbdb20..8b7e51b 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProjectTests.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProjectTests.java
@@ -1,75 +1,94 @@
package org.gcube.application.geoportal.service;
import org.bson.Document;
+import org.gcube.application.cms.tests.TokenSetter;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
+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 javax.ws.rs.core.Response;
import java.util.Collections;
import java.util.List;
+import static org.junit.Assert.assertEquals;
+
public class ProjectTests extends BasicServiceTestUnit{
- String testProfileId="profiled_concessione";
- String projectId="asdlkjgdasfjklgadjhkl";
-
- @Test
- public void getAll() {
- WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
- System.out.println(target.request(MediaType.APPLICATION_JSON).get(List.class));
+ String testProfileId="profiledConcessioni";
+
+ @Before
+ public void setContext(){
+ TokenSetter.set(scope);
}
-
+
@Test
- public void getFilteredAll() {
- WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
- Document document =new Document(Collections.singletonMap("key", "value"));
-
- System.out.println(target.path("search").request(MediaType.APPLICATION_JSON).
- post(Entity.entity(document, MediaType.APPLICATION_JSON)));
-
- }
-
- @Test
- public void getAllByProfile() {
- WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
- System.out.println(target.path(testProfileId).request(MediaType.APPLICATION_JSON).get(List.class));
+ public void testMissingProfile(){
+ Response resp = target(InterfaceConstants.Methods.PROJECTS)
+ .path("non-existent-profile").request().get();
+ assertEquals(resp.getStatus(),404);
}
-
+
+
@Test
- public void getFilteredByProfile() {
- WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
- Document document =new Document(Collections.singletonMap("key", "value"));
-
- System.out.println(target.path("search").path(testProfileId).request(MediaType.APPLICATION_JSON).
- post(Entity.entity(document, MediaType.APPLICATION_JSON)));
-
+ public void getAll() {
+ System.out.println(target(InterfaceConstants.Methods.PROJECTS).path(testProfileId).request(MediaType.APPLICATION_JSON).get(List.class));
}
-
-
+
@Test
- public void getById() {
- WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
- System.out.println(target.path(testProfileId).path(projectId).request(MediaType.APPLICATION_JSON).get().readEntity(String.class));
- }
-
-
- @Test
public void registerNew() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
- Document document =new Document(Collections.singletonMap("key", "value"));
-
+
+ Document document =new Document(Collections.singletonMap("dumbKey","dumbValue"));
System.out.println(target.path(testProfileId).request(MediaType.APPLICATION_JSON).
- put(Entity.entity(document, MediaType.APPLICATION_JSON)));
- }
-
- @Test
- public void updateDocument() {
- WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
- Document document =new Document(Collections.singletonMap("key", "value"));
-
- System.out.println(target.path(testProfileId).path(projectId).request(MediaType.APPLICATION_JSON).
- put(Entity.entity(document, MediaType.APPLICATION_JSON)));
+ post(Entity.entity(document, MediaType.APPLICATION_JSON)));
}
+
+
+
+// @Test
+// public void getFilteredAll() {
+// WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
+// Document document =new Document(Collections.singletonMap("key", "value"));
+//
+// System.out.println(target.path("search").request(MediaType.APPLICATION_JSON).
+// post(Entity.entity(document, MediaType.APPLICATION_JSON)));
+//
+// }
+//
+// @Test
+// public void getAllByProfile() {
+// WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
+// System.out.println(target.path(testProfileId).request(MediaType.APPLICATION_JSON).get(List.class));
+// }
+//
+// @Test
+// public void getFilteredByProfile() {
+// WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
+// Document document =new Document(Collections.singletonMap("key", "value"));
+//
+// System.out.println(target.path("search").path(testProfileId).request(MediaType.APPLICATION_JSON).
+// post(Entity.entity(document, MediaType.APPLICATION_JSON)));
+//
+// }
+//
+//
+// @Test
+// public void getById() {
+// WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
+// System.out.println(target.path(testProfileId).path(projectId).request(MediaType.APPLICATION_JSON).get().readEntity(String.class));
+// }
+//
+//
+//
+// @Test
+// public void updateDocument() {
+// WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
+// Document document =new Document(Collections.singletonMap("key", "value"));
+//
+// System.out.println(target.path(testProfileId).path(projectId).request(MediaType.APPLICATION_JSON).
+// put(Entity.entity(document, MediaType.APPLICATION_JSON)));
+// }
}
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/caches/Caches.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/caches/Caches.java
index 00c5081..bb75222 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/caches/Caches.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/caches/Caches.java
@@ -4,7 +4,8 @@ import ch.qos.logback.core.net.SyslogOutputStream;
import com.mongodb.MongoWaitQueueFullException;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.tests.TokenSetter;
-import org.gcube.application.cms.tests.model.TestModel;
+
+import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
import org.gcube.application.geoportal.common.utils.StorageUtils;
import org.gcube.application.geoportal.service.BasicServiceTestUnit;
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
@@ -114,7 +115,7 @@ public class Caches extends BasicServiceTestUnit {
final StorageUtils storage=ImplementationProvider.get().getStorageProvider().getObject();
- String id =storage.putOntoStorage(new File(TestModel.getBaseFolder(),"relazione.pdf"))[0].getId();
+ String id =storage.putOntoStorage(new File(TestConcessioniModel.getBaseFolder(),"relazione.pdf"))[0].getId();
//for 100 secs
while(Duration.between(start,LocalDateTime.now()).
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/materialization/SDITests.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/materialization/SDITests.java
index c6558f3..7896692 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/materialization/SDITests.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/materialization/SDITests.java
@@ -3,7 +3,8 @@ package org.gcube.application.geoportal.service.engine.materialization;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.tests.TokenSetter;
-import org.gcube.application.cms.tests.model.TestModel;
+
+import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.GeoServerContent;
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
@@ -60,7 +61,7 @@ public class SDITests {
//Disabled because dependant on state
public void registerLayer() throws IOException, SDIInteractionException {
Concessione toTest= Serialization.read(Files.readFileAsString(
- new File(TestModel.getBaseFolder(),"transferTest.json").getAbsolutePath(), Charset.defaultCharset()), Concessione.class);
+ new File(TestConcessioniModel.getBaseFolder(),"transferTest.json").getAbsolutePath(), Charset.defaultCharset()), Concessione.class);
SDIManager manager = new SDIManager();
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ws/DescribeWSFolder.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ws/DescribeWSFolder.java
index d4e6bbd..d23b88e 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ws/DescribeWSFolder.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ws/DescribeWSFolder.java
@@ -7,13 +7,18 @@ import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
import org.gcube.common.storagehub.model.items.*;
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import java.util.List;
+
public class DescribeWSFolder {
static StorageHubClient shc =null;
public static void main(String[] args) throws StorageHubException {
- String context="/gcube/devsec/devVRE";
+// String context="/gcube/devsec/devVRE";
+ String context="/d4science.research-infrastructures.eu/D4OS/GeoNA-Prototype";
String folderID="46b376db-32d7-4411-ad04-ca3dadab5f5b";
Boolean recursive = true;
@@ -21,21 +26,46 @@ public class DescribeWSFolder {
shc= new StorageHubClient();
shc.openVREFolder().get().getDescription();
- FolderContainer folder=shc.open(folderID).asFolder();
+// FolderContainer folder=shc.open(folderID).asFolder();
+ FolderContainer folder = WorkspaceManager.getApplicationBaseFolder(shc);
FolderItem item=folder.get();
System.out.print("PATH : "+item.getPath()+"\tHIDDEN : "+item.isHidden()+"\tDescription : "+item.getDescription());
System.out.println("Listing... ");
- print(folder,"");
+ Long size=print(folder,"",recursive);
+ System.out.println("Size : "+humanReadableByteCountBin(size));
}
- private static final void print(FolderContainer folder,String pad) throws StorageHubException {
- for (Item i : folder.list().includeHidden().getItems()) {
+ private static final Long print(FolderContainer folder,String pad,Boolean recursive) throws StorageHubException {
+ Long toReturn=new Long(0);
+ List extends Item> items =folder.list().includeHidden().withContent().getItems();
+ System.out.println(pad+"Elements : "+items.size());
+ for (Item i : items) {
System.out.println(pad+ i.getName() + " [" + i.getPrimaryType()+"]");
if(i instanceof FolderItem){
- print(shc.open(i.getId()).asFolder(),pad+"\t");
+ if(recursive)
+ toReturn+= print(shc.open(i.getId()).asFolder(),pad+"\t",recursive);
+ }else if (i instanceof AbstractFileItem){
+// toReturn+=shc.open(i.getId()).asFile().get().getContent().getSize();
+ toReturn+=((AbstractFileItem) i).getContent().getSize();
}
}
+ return toReturn;
+ }
+
+ public static String humanReadableByteCountBin(long bytes) {
+ long absB = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes);
+ if (absB < 1024) {
+ return bytes + " B";
+ }
+ long value = absB;
+ CharacterIterator ci = new StringCharacterIterator("KMGTPE");
+ for (int i = 40; i >= 0 && absB > 0xfffccccccccccccL >> i; i -= 10) {
+ value >>= 10;
+ ci.next();
+ }
+ value *= Long.signum(bytes);
+ return String.format("%.1f %ciB", value / 1024.0, ci.current());
}
}
diff --git a/geoportal-service/src/test/resources/logback.xml b/geoportal-service/src/test/resources/logback.xml
index ef54588..8ec1f7c 100644
--- a/geoportal-service/src/test/resources/logback.xml
+++ b/geoportal-service/src/test/resources/logback.xml
@@ -10,7 +10,7 @@
-
+
diff --git a/pom.xml b/pom.xml
index bec41f5..e26f4de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
org.gcube.application.cms
gcube-cms-suite
pom
- 1.0.0
+ 1.0.1
Gcube CMS Suite
gCube CMS Suite is a set of components designed to manage complex space-temporal Documents defined by metadata Profiles.
@@ -32,10 +32,24 @@
-
+
geoportal-service
- geoportal-client
+
+
geoportal-common
+ cms-plugin-framework
+
+
+ geoportal-client
+
+
+
+ concessioni-lifecycle
+ concessioni-model
+
+
+
+
cms-test-commons
use-cases
@@ -69,13 +83,20 @@
geoportal-service
[1.0.6-SNAPSHOT,2.0.0)
+
+
+ org.gcube.application.cms
+ cms-plugin-framework
+ [1.0.0-SNAPSHOT,2.0.0)
+
+
org.gcube.application
geoportal-client
[1.0.5-SNAPSHOT,2.0.0)
- org.gcube.application
+ org.gcube.application.cms
geoportal-common
[1.0.7-SNAPSHOT,2.0.0)
@@ -90,6 +111,25 @@
[1.0.0-SNAPSHOT,2.0.0)