diff --git a/concessioni-lifecycle/pom.xml b/concessioni-lifecycle/pom.xml
index 3392945..bdda5fa 100644
--- a/concessioni-lifecycle/pom.xml
+++ b/concessioni-lifecycle/pom.xml
@@ -44,6 +44,21 @@
org.gcube.application.cms
concessioni-model
+
+
+
+ org.gcube.spatial.data
+ gis-interface
+ [2.4.6,3.0.0)
+
+
+
+
+ org.gcube.data.transfer
+ data-transfer-library
+ [1.2.1,2.0.0]
+
+
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 9ebedb5..1d6499b 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
@@ -5,6 +5,9 @@ import org.bson.BsonDocument;
import org.bson.BsonString;
import org.bson.BsonValue;
import org.bson.Document;
+import org.gcube.application.cms.plugins.faults.EventException;
+import org.gcube.application.cms.plugins.reports.EventExecutionReport;
+import org.gcube.application.cms.plugins.requests.EventExecutionRequest;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.cms.custom.gna.concessioni.model.ProfiledConcessione;
import org.gcube.application.cms.plugins.LifecycleManager;
@@ -12,10 +15,15 @@ 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.StepExecutionReport;
import org.gcube.application.cms.plugins.reports.InitializationReport;
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
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;
+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.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.rest.ConfigurationException;
@@ -46,9 +54,9 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
}
@Override
- public ExecutionReport performStep(StepExecutionRequest request) throws StepException {
+ public StepExecutionReport performStep(StepExecutionRequest request) throws StepException {
log.info("Serving Request {}",request);
- ExecutionReport report=new ExecutionReport();
+ StepExecutionReport report=new StepExecutionReport();
LifecycleInformation info=new LifecycleInformation();
info.setPhase(request.getStep());
info.setLastOperationStatus(LifecycleInformation.Status.OK);
@@ -57,28 +65,42 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
try {
switch (request.getStep()) {
- case StepExecutionRequest.Steps.ON_INIT_DOCUMENT:
- // Set Defaults as for on update
- case StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT: {
- log.debug("Setting default values..");
- report.setResult(setDefaults(request.getDocument()));
- break;
- }
+
case StepExecutionRequest.Steps.ON_MATERIALIZE_DOCUMENT: {
+ // SDI Create Layers
break;
}
case StepExecutionRequest.Steps.ON_DEMATERIALIZE_DOCUMENT: {
+ // SDI Remove Layers
break;
}
case StepExecutionRequest.Steps.ON_DEINDEX_DOCUMENT: {
+ // SDI Remove from centroids
break;
}
case StepExecutionRequest.Steps.ON_INDEX_DOCUMENT: {
+ // SDI Add to centroids
break;
}
- case StepExecutionRequest.Steps.ON_DELETE_DOCUMENT: {
+
+ case "SUBMIT-FOR-REVIEW" :{
+ //Checks
+ //Materialize layers
+ //Index-confidential
+ //Notifications
break;
}
+
+ case "REJECT-DRAFT":{
+ // Notification
+ // Set
+ break;
+ }
+
+ case "APPROVE DRAFT":{
+ break;
+ }
+
default:
throw new StepException("Invalid Step " + request.getStep());
}
@@ -92,6 +114,41 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
return report;
}
+
+ @Override
+ public EventExecutionReport onEvent(EventExecutionRequest request) throws EventException {
+ log.info("Executing Event {}",request);
+ EventExecutionReport report=new EventExecutionReport();
+ report.setRequest(request);
+ report.setResult(request.getDocument());
+ TriggeredEvents info=new TriggeredEvents();
+ try {
+ switch(request.getEvent()){
+ case EventExecutionRequest.Events.ON_INIT_DOCUMENT:
+ // Set Defaults as for on update
+ case EventExecutionRequest.Events.ON_UPDATE_DOCUMENT: {
+ log.debug("Setting default values..");
+ report.setResult(setDefaults(request.getDocument()));
+ break;
+ }
+ case EventExecutionRequest.Events.ON_DELETE_DOCUMENT: {
+ //DELETE ALL
+ break;
+ }
+ default: throw new EventException("Unexpected Event "+request.getEvent());
+ }
+ }catch (EventException e){
+ throw e;
+ }catch (Throwable t){
+ log.error("Unable to execute on event "+request.getEvent(),t);
+ info.setLastOperationStatus(LifecycleInformation.Status.ERROR);
+ info.addErrorMessage("Unable to execute on event "+request.getEvent()+". Error was "+t.getMessage());
+ }finally{
+ report.getResult().getLifecycleInformation().addEventReport(info);
+ }
+ return report;
+ }
+
@Override
public Configuration getCurrentConfiguration() throws ConfigurationException {
return null;
@@ -103,6 +160,12 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
}
+ // Materialization
+ private static final void materialize(){
+
+ }
+
+
// STATIC ROUTINES
private static final ProfiledDocument setDefaults(ProfiledDocument document){
diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/plugins/SDIMaterializerPlugin.java b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/plugins/SDIMaterializerPlugin.java
new file mode 100644
index 0000000..36ccd8e
--- /dev/null
+++ b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/plugins/SDIMaterializerPlugin.java
@@ -0,0 +1,76 @@
+package org.gcube.application.cms.concessioni.plugins;
+
+import lombok.extern.slf4j.Slf4j;
+import org.bson.Document;
+import org.gcube.application.cms.concessioni.sdi.SDIManager;
+import org.gcube.application.cms.plugins.MaterializationPlugin;
+import org.gcube.application.cms.plugins.faults.InitializationException;
+import org.gcube.application.cms.plugins.faults.MaterializationException;
+import org.gcube.application.cms.plugins.faults.ShutDownException;
+import org.gcube.application.cms.plugins.model.PluginDescriptor;
+import org.gcube.application.cms.plugins.reports.InitializationReport;
+import org.gcube.application.cms.plugins.reports.MaterializationReport;
+import org.gcube.application.cms.plugins.requests.MaterializationRequest;
+import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
+import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
+import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
+import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
+import org.gcube.application.geoportal.common.model.profile.Profile;
+
+@Slf4j
+public class SDIMaterializerPlugin implements MaterializationPlugin {
+
+ SDIManager sdiManager;
+
+ @Override
+ public InitializationReport initInContext() throws InitializationException {
+ return null;
+ }
+
+ @Override
+ public InitializationReport init() throws InitializationException {
+ return null;
+ }
+
+ @Override
+ public void shutdown() throws ShutDownException {
+
+ }
+
+ @Override
+ public MaterializationReport materialize(MaterializationRequest request) throws MaterializationException {
+ log.info("Materializer {} : Performing {} ",this.getDescriptor().getId(),request);
+ ProfiledDocument doc=request.getDocument();
+ Profile profile = request.getProfile();
+ Document configuration=request.getParameters();
+ Document profileConfiguration =null;
+ for (HandlerDeclaration h : profile.getHandlers()) {
+ if (h.getId().equals("SDI-Default-Materializer")) {
+ profileConfiguration = h.getConfiguration();
+ }
+ }
+
+ log.debug("Profile Configuration is {} ",profileConfiguration);
+ try{
+ // for each
+ RegisteredFileSet fileSet=null;
+ sdiManager.materializeLayer()
+
+
+
+ }catch (MaterializationException e){
+ throw e;
+ }catch (Throwable t){
+ log.error("Unable to execute on event "+request.getEvent(),t);
+ info.setLastOperationStatus(LifecycleInformation.Status.ERROR);
+ info.addErrorMessage("Unable to execute on event "+request.getEvent()+". Error was "+t.getMessage());
+ }finally{
+
+ }
+ }
+
+ @Override
+ public PluginDescriptor getDescriptor() {
+ return null;
+ }
+}
diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/SDIManager.java b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/SDIManager.java
new file mode 100644
index 0000000..8a3127f
--- /dev/null
+++ b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/SDIManager.java
@@ -0,0 +1,283 @@
+package org.gcube.application.cms.concessioni.sdi;
+
+import it.geosolutions.geoserver.rest.GeoServerRESTPublisher;
+import it.geosolutions.geoserver.rest.GeoServerRESTReader;
+import it.geosolutions.geoserver.rest.decoder.RESTFeatureType;
+import it.geosolutions.geoserver.rest.decoder.RESTLayer;
+import lombok.Getter;
+import lombok.extern.slf4j.Slf4j;
+import org.bson.Document;
+import org.gcube.application.cms.concessioni.sdi.faults.SDIInteractionException;
+import org.gcube.application.cms.serialization.Serialization;
+import org.gcube.application.geoportal.common.model.document.filesets.GCubeSDILayer;
+
+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.utils.Files;
+
+
+
+import org.gcube.data.transfer.library.DataTransferClient;
+import org.gcube.data.transfer.library.TransferResult;
+import org.gcube.data.transfer.model.Destination;
+import org.gcube.data.transfer.model.DestinationClashPolicy;
+import org.gcube.spatial.data.gis.GISInterface;
+import org.gcube.spatial.data.gis.is.AbstractGeoServerDescriptor;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+@Slf4j
+public class SDIManager {
+
+
+ static private final String EPSG_4326="EPSG:4326";
+ static private final String WGS84_FULL="GEOGCS[\"WGS 84\", DATUM[\"World Geodetic System 1984\", SPHEROID[\"WGS 84\", 6378137.0, 298.257223563, AUTHORITY[\"EPSG\",\"7030\"]],"+
+ "AUTHORITY[\"EPSG\",\"6326\"]], PRIMEM[\"Greenwich\", 0.0, AUTHORITY[\"EPSG\",\"8901\"]], UNIT[\"degree\", 0.017453292519943295],"+
+ "AXIS[\"Geodetic longitude\", EAST], AXIS[\"Geodetic latitude\", NORTH], AUTHORITY[\"EPSG\",\"4326\"]]";
+
+
+ public static final Pattern HOSTNAME_PATTERN=Pattern.compile("(?<=\\:\\/\\/)[^\\:]*");
+ public static final Pattern PORT_PATTERN=Pattern.compile("(?<=\\:)[\\d]+");
+ public static final Pattern DB_NAME_PATTERN=Pattern.compile("(?<=\\/)[^\\/]*(?=$)");
+
+
+ private final GISInterface gis;
+ @Getter
+ private final DataTransferClient dtGeoServer;
+ private final String geoserverHostName;
+
+ private final AbstractGeoServerDescriptor currentGeoserver;
+
+
+ public SDIManager() throws SDIInteractionException {
+ try{
+ log.debug("Initializing GIS Interface..");
+ gis=GISInterface.get();
+ currentGeoserver=gis.getCurrentGeoServer();
+ if(currentGeoserver==null)
+ throw new Exception("Unable to contact data transfer for geoserver ");
+
+ log.debug("Found geoserver descriptor "+currentGeoserver);
+ geoserverHostName=new URL(currentGeoserver.getUrl()).getHost();
+
+ log.debug("Contacting Data Transfer from geoserver {} ",geoserverHostName);
+ dtGeoServer=DataTransferClient.getInstanceByEndpoint("https://"+geoserverHostName);
+ if(!currentGeoserver.getReader().existGeoserver())
+ throw new Exception("Geoserver not reachable");
+ }catch(Exception e) {
+ throw new SDIInteractionException("Unable to initialize SDI Manager",e);
+ }
+ }
+
+ /**
+ * Expected paramters :
+ * - "workspace"
+ * - "layerTitle"
+ * - "documentID"
+ * - "basePersistencePath" (profile specific, e.g. "GNA")
+ *
+ * @param fileSet
+ * @param params
+ * @return
+ * @throws SDIInteractionException
+ */
+ public RegisteredFileSet materializeLayer(RegisteredFileSet fileSet, Document params) throws SDIInteractionException{
+ try {
+ log.debug("Materializing FS {} on {} ", fileSet, geoserverHostName);
+
+ // validate parameters
+ String workspace = getMandatory("workspace", params);
+ String documentID = getMandatory("documentID", params);
+ String basePersistencePAth = getMandatory("basePersistencePath", params);
+
+
+ // check if empty
+ if (fileSet.getPayloads().isEmpty()) throw new SDIInteractionException("No payload to materialize");
+
+
+ Document geoserverInfo = new Document();
+ geoserverInfo.put("_type", "Geoserver");
+ geoserverInfo.put("workspace", workspace);
+
+
+ // Evaluate Layer Name
+ String baseName = getToUseBaseLayerName(fileSet);
+ log.debug("Base layer name is {}, checking conflicts.. ");
+ String toSetLayerName = baseName;
+ //Check if layer already exists
+ int count = 0;
+ GeoServerRESTReader gsReader = currentGeoserver.getReader();
+ while (gsReader.getLayer(workspace, toSetLayerName) != null) {
+ count++;
+ toSetLayerName = baseName + "_" + count;
+ log.debug("layer for " + baseName + " already existing, trying " + toSetLayerName);
+ }
+ geoserverInfo.put("layerName", toSetLayerName);
+ log.debug("Layer name will be {} ", toSetLayerName);
+
+
+ String folderRelativePath = basePersistencePAth + "/" + documentID + "/" + fileSet.getUUID() + "/" + toSetLayerName;
+ log.debug("GS Relative destination path is {} ", folderRelativePath);
+ geoserverInfo.put("persistencePath", folderRelativePath);
+
+ List filenames = new ArrayList<>();
+
+ String absolutePath = null;
+
+ for (Object o : fileSet.getPayloads()) {
+ RegisteredFile file = Serialization.convert(o, RegisteredFile.class);
+ log.info("Sending {} to GS {} at {} ", file, geoserverHostName, folderRelativePath);
+ String completeFilename = Files.fixFilename(file.getName());
+ completeFilename = completeFilename.replaceAll(baseName, toSetLayerName);
+
+
+ Destination destination = new Destination(completeFilename);
+ destination.setCreateSubfolders(true);
+ destination.setOnExistingFileName(DestinationClashPolicy.REWRITE);
+ destination.setOnExistingSubFolder(DestinationClashPolicy.APPEND);
+
+ destination.setPersistenceId("geoserver");
+ destination.setSubFolder(folderRelativePath);
+
+ log.debug("Sending {} to {}", file, destination);
+ TransferResult result = getDtGeoServer().httpSource(new URL(file.getLink()), destination);
+ log.debug("Transferred " + result);
+
+
+ filenames.add(completeFilename);
+ // NB Clash con subfolder is APPEND, thus FOLDER is expected to be the one specified by caller
+ //geoserverInfo.put(""result.getRemotePath().substring(0, result.getRemotePath().lastIndexOf("/")));
+ absolutePath = result.getRemotePath().substring(0, result.getRemotePath().lastIndexOf("/"));
+ }
+ geoserverInfo.put("files", filenames);
+
+ // Publishing layer in GS
+ String storeName = toSetLayerName + "_store";
+ geoserverInfo.put("storeName", storeName);
+
+ GeoServerRESTPublisher publisher = currentGeoserver.getPublisher();
+ log.debug("Trying to create remote workspace : " + workspace);
+ createWorkspace(workspace);
+
+
+ log.debug("Publishing remote folder " + absolutePath);
+
+ URL directoryPath = new URL("file:" + absolutePath + "/" + toSetLayerName + ".shp");
+
+ //TODO Evaluate SRS
+
+ boolean published = publisher.publishShp(
+ workspace,
+ storeName,
+ null,
+ toSetLayerName,
+ // UploadMethod.FILE, // neeeds zip
+ GeoServerRESTPublisher.UploadMethod.EXTERNAL, // needs shp
+ directoryPath.toURI(),
+ EPSG_4326, //SRS
+ ""); // default style
+
+ if (!published) {
+ throw new SDIInteractionException("Unable to publish layer " + toSetLayerName + " under " + workspace + ". Unknown Geoserver fault.");
+ }
+
+ RESTLayer l = gsReader.getLayer(workspace, toSetLayerName);
+ RESTFeatureType f = gsReader.getFeatureType(l);
+ /*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 */
+
+
+ List ogcLinks = new ArrayList<>();
+
+ Document wmsLink = new Document();
+ wmsLink.put("wms", String.format("https://%1$s/geoserver/%2$s/wms?"
+ + "service=WMS&version=1.1.0&request=GetMap&layers=%2$s:%3$s&"
+ + "styles=&bbox=%4$f,%5$f,%6$f,%7$f&srs=%8$s&format=application/openlayers&width=%9$d&height=%10$d",
+ geoserverHostName,
+ workspace,
+ toSetLayerName,
+ f.getMinX(),
+ f.getMinY(),
+ f.getMaxX(),
+ f.getMaxY(),
+ EPSG_4326,
+ 400,
+ 400));
+ ogcLinks.add(wmsLink);
+
+ List platformInfo = new ArrayList<>();
+ platformInfo.add(geoserverInfo);
+ // TODO Metadata
+
+
+ // Materialization object
+ GCubeSDILayer materialization = new GCubeSDILayer();
+ materialization.put(GCubeSDILayer.OGC_LINKS, ogcLinks);
+ materialization.put(GCubeSDILayer.B_BOX, new GCubeSDILayer.BBOX(f.getMaxX(), f.getMaxY(), f.getMinX(), f.getMinY()));
+ materialization.put(GCubeSDILayer.PLATFORM_INFO, platformInfo);
+
+ log.info("Generated Materialization {}", materialization);
+
+ //Add Materialization to registered file set
+ List materializations = fileSet.getMaterializations();
+ if (materializations == null) materializations = new ArrayList();
+ materializations.add(materialization);
+ fileSet.put(RegisteredFileSet.MATERIALIZATIONS, materializations);
+
+ return fileSet;
+ }catch(SDIInteractionException e){
+ throw e;
+ }catch (Throwable t){
+ throw new SDIInteractionException("Unexpected exception while trying to materialize File Set "+t.getMessage(),t);
+ }
+ }
+
+
+ public String createWorkspace(String toCreate) throws SDIInteractionException {
+ try {
+ if(!currentGeoserver.getReader().getWorkspaceNames().contains(toCreate)) {
+ log.debug("Creating workspace : "+toCreate);
+ if(!currentGeoserver.getPublisher().createWorkspace(toCreate))
+ throw new SDIInteractionException("Unable to create workspace "+toCreate);
+ }else log.debug("Workspace "+toCreate+" exists.");
+ return toCreate;
+ } catch (IllegalArgumentException | MalformedURLException e) {
+ throw new SDIInteractionException("Unable to create workspace "+toCreate,e);
+ }
+ }
+
+
+ private static final String getToUseBaseLayerName(RegisteredFileSet fileset){
+ // ******** IDENTIFY LAYER NAME correct layer name
+ // Must be unique under same WS
+ // equal to shp base name
+
+ String baseName= "";
+
+ // Chose layer name first identifying filename
+ for(Object p:fileset.getPayloads()){
+ RegisteredFile f = Serialization.convert(p,RegisteredFile.class);
+ String name=f.getName();
+ if(name.endsWith(".shp")) {
+ log.debug("SHP is {}",name);
+ baseName= Files.fixFilename(name.substring(0,name.lastIndexOf('.')));
+ break;
+ }
+ }
+ return baseName;
+ }
+
+
+ private static final String getMandatory(String param,Document params) throws SDIInteractionException {
+ if(!params.containsKey(param)) throw new SDIInteractionException("Missing mandatory parameter "+param);
+ return params.getString(param);
+ }
+
+}
diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/faults/SDIInteractionException.java b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/faults/SDIInteractionException.java
new file mode 100644
index 0000000..2c68f7e
--- /dev/null
+++ b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/faults/SDIInteractionException.java
@@ -0,0 +1,23 @@
+package org.gcube.application.cms.concessioni.sdi.faults;
+
+public class SDIInteractionException extends Exception {
+
+ public SDIInteractionException() {
+ }
+
+ public SDIInteractionException(String message) {
+ super(message);
+ }
+
+ public SDIInteractionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public SDIInteractionException(Throwable cause) {
+ super(cause);
+ }
+
+ public SDIInteractionException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+ super(message, cause, enableSuppression, writableStackTrace);
+ }
+}
diff --git a/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/model/SDIConfiguration.java b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/model/SDIConfiguration.java
new file mode 100644
index 0000000..04d196e
--- /dev/null
+++ b/concessioni-lifecycle/src/main/java/org/gcube/application/cms/concessioni/sdi/model/SDIConfiguration.java
@@ -0,0 +1,16 @@
+package org.gcube.application.cms.concessioni.sdi.model;
+
+import org.bson.Document;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SDIConfiguration {
+
+ public static final String GEOSERVER_PLATFORM="GeoServer";
+ public static final String GEONETWORK_PLATFORM="GeoNetwork";
+
+
+
+ private Map platformConfiguration=new HashMap<>();
+}
diff --git a/concessioni-model/src/main/java/org/gcube/application/cms/custom/gna/concessioni/model/ProfiledConcessione.java b/concessioni-model/src/main/java/org/gcube/application/cms/custom/gna/concessioni/model/ProfiledConcessione.java
index 60b6a36..d10062a 100644
--- a/concessioni-model/src/main/java/org/gcube/application/cms/custom/gna/concessioni/model/ProfiledConcessione.java
+++ b/concessioni-model/src/main/java/org/gcube/application/cms/custom/gna/concessioni/model/ProfiledConcessione.java
@@ -1,17 +1,7 @@
package org.gcube.application.cms.custom.gna.concessioni.model;
-import org.bson.BsonDocument;
-import org.bson.BsonString;
-import org.bson.BsonValue;
-import org.bson.Document;
-import org.gcube.application.geoportal.common.model.document.Access;
-import org.gcube.application.geoportal.common.model.document.AccessPolicy;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
-import org.gcube.application.geoportal.common.model.document.RegisteredFileSet;
-import org.gcube.application.geoportal.common.model.legacy.report.ConstraintCheck;
-
-import java.util.List;
public class ProfiledConcessione extends ProfiledDocument {
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/AccessPolicy.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/AccessPolicy.java
deleted file mode 100644
index cb04ae1..0000000
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/AccessPolicy.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.gcube.application.geoportal.common.model.document;
-
-public enum AccessPolicy {
-
- OPEN,RESTRICTED,EMBARGOED;
-
-}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Materialization.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Materialization.java
deleted file mode 100644
index 7208a55..0000000
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Materialization.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.gcube.application.geoportal.common.model.document;
-
-import lombok.*;
-import org.bson.Document;
-
-
-public class Materialization extends Document {
-
- public static final String TYPE ="_type";
-
- public String getType(){return super.getString(TYPE);}
-}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
index 0b49434..6d7897f 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/ProfiledDocument.java
@@ -4,6 +4,8 @@ import com.mongodb.client.model.geojson.GeoJsonObjectType;
import com.vdurmont.semver4j.Semver;
import lombok.*;
import org.bson.Document;
+import org.gcube.application.geoportal.common.model.document.accounting.PublicationInfo;
+import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation;
@NoArgsConstructor
@@ -40,7 +42,8 @@ public class ProfiledDocument {
private Relationship[] relationships;
- private GeoJsonObjectType spatialReference;
+ // Expected GEOJSON
+ private Document spatialReference;
private TemporalReference temporalReference;
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Access.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/access/Access.java
similarity index 79%
rename from geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Access.java
rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/access/Access.java
index c265269..bd3b3d2 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Access.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/access/Access.java
@@ -1,4 +1,4 @@
-package org.gcube.application.geoportal.common.model.document;
+package org.gcube.application.geoportal.common.model.document.access;
import lombok.*;
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/access/AccessPolicy.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/access/AccessPolicy.java
new file mode 100644
index 0000000..eba157e
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/access/AccessPolicy.java
@@ -0,0 +1,7 @@
+package org.gcube.application.geoportal.common.model.document.access;
+
+public enum AccessPolicy {
+
+ OPEN,RESTRICTED,EMBARGOED;
+
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/AccountingInfo.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/AccountingInfo.java
similarity index 83%
rename from geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/AccountingInfo.java
rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/AccountingInfo.java
index 4f25379..dee7f24 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/AccountingInfo.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/AccountingInfo.java
@@ -1,4 +1,4 @@
-package org.gcube.application.geoportal.common.model.document;
+package org.gcube.application.geoportal.common.model.document.accounting;
import lombok.*;
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Context.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/Context.java
similarity index 76%
rename from geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Context.java
rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/Context.java
index b0e7feb..05d5156 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/Context.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/Context.java
@@ -1,4 +1,4 @@
-package org.gcube.application.geoportal.common.model.document;
+package org.gcube.application.geoportal.common.model.document.accounting;
import lombok.*;
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/PublicationInfo.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/PublicationInfo.java
similarity index 72%
rename from geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/PublicationInfo.java
rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/PublicationInfo.java
index 82df14c..493c89a 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/PublicationInfo.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/PublicationInfo.java
@@ -1,7 +1,7 @@
-package org.gcube.application.geoportal.common.model.document;
+package org.gcube.application.geoportal.common.model.document.accounting;
import lombok.*;
-import org.gcube.application.geoportal.common.model.legacy.AccessPolicy;
+import org.gcube.application.geoportal.common.model.document.access.Access;
@NoArgsConstructor
@AllArgsConstructor
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/User.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/User.java
similarity index 72%
rename from geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/User.java
rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/User.java
index fda76a3..605e898 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/User.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/accounting/User.java
@@ -1,4 +1,4 @@
-package org.gcube.application.geoportal.common.model.document;
+package org.gcube.application.geoportal.common.model.document.accounting;
import lombok.*;
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/GCubeSDILayer.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/GCubeSDILayer.java
new file mode 100644
index 0000000..2b9aa56
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/GCubeSDILayer.java
@@ -0,0 +1,51 @@
+package org.gcube.application.geoportal.common.model.document.filesets;
+
+import com.sun.xml.internal.ws.message.PayloadElementSniffer;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+
+import java.util.List;
+
+public class GCubeSDILayer extends Materialization{
+
+ @Data
+ @NoArgsConstructor
+ public static class BBOX {
+
+ public static final BBOX WORLD=new BBOX(180d,90d,-180d,-90d);
+
+ public static final String MAX_X="maxX";
+ public static final String MAX_Y="maxY";
+ public static final String MIN_X="minX";
+ public static final String MIN_Y="minY";
+
+ public BBOX(Double maxX,Double maxY,Double minX,Double minY){
+ this.maxX=maxX;
+ this.minX=minX;
+ this.maxY=maxY;
+ this.minY=minY;
+ }
+
+ private Double maxY;
+ private Double maxX;
+ private Double minY;
+ private Double minX;
+ }
+
+
+ public static final String GCUBE_SDY_LAYER_TYPE="gcube-sdi-layer";
+ public static final String OGC_LINKS="ogcLinks";
+ public static final String B_BOX = "bbox";
+ public static final String PLATFORM_INFO="platformInfo";
+
+ public GCubeSDILayer(){
+ super(GCUBE_SDY_LAYER_TYPE);
+ }
+
+ public List getOGCLinks(){return this.get(OGC_LINKS, List.class);}
+ public BBOX getBBox(){return this.get(B_BOX,BBOX.class);}
+ public List getPlatformInfo(){return this.get(PLATFORM_INFO,List.class);}
+
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/Materialization.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/Materialization.java
new file mode 100644
index 0000000..9510312
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/Materialization.java
@@ -0,0 +1,17 @@
+package org.gcube.application.geoportal.common.model.document.filesets;
+
+import lombok.*;
+import org.bson.Document;
+
+@ToString (callSuper = true)
+public class Materialization extends Document {
+
+ public static final String TYPE ="_type";
+
+ public String getType(){return super.getString(TYPE);}
+
+ public Materialization(){super();}
+ public Materialization (String type){
+ this.put(TYPE,type);
+ }
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/RegisteredFile.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/RegisteredFile.java
similarity index 72%
rename from geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/RegisteredFile.java
rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/RegisteredFile.java
index 1844eca..3886dc9 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/RegisteredFile.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/RegisteredFile.java
@@ -1,12 +1,8 @@
-package org.gcube.application.geoportal.common.model.document;
+package org.gcube.application.geoportal.common.model.document.filesets;
import lombok.*;
-@NoArgsConstructor
-@AllArgsConstructor
-@Getter
-@Setter
-@ToString
+@Data
public class RegisteredFile {
public static String MIMETYPE="mimetype";
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/RegisteredFileSet.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/RegisteredFileSet.java
similarity index 81%
rename from geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/RegisteredFileSet.java
rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/RegisteredFileSet.java
index 05ae45e..0328ca4 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/RegisteredFileSet.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/RegisteredFileSet.java
@@ -1,4 +1,4 @@
-package org.gcube.application.geoportal.common.model.document;
+package org.gcube.application.geoportal.common.model.document.filesets;
import lombok.*;
import org.bson.Document;
@@ -6,11 +6,10 @@ import org.bson.Document;
import java.util.List;
-@Getter
-@Setter
@ToString (callSuper = true)
public class RegisteredFileSet extends Document {
+ public static final String UUID="uuid";
public static final String CREATION_INFO="creationInfo";
public static final String ACCESS="access";
public static final String FOLDER_ID="folderID";
@@ -26,4 +25,6 @@ public class RegisteredFileSet extends Document {
public List getPayloads(){return super.get(PAYLOADS,List.class);}
public List getMaterializations(){return super.get(MATERIALIZATIONS,List.class);}
+
+ public String getUUID(){return super.getString(UUID);}
}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/SDILayer.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/SDILayer.java
new file mode 100644
index 0000000..737ba26
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/filesets/SDILayer.java
@@ -0,0 +1,17 @@
+package org.gcube.application.geoportal.common.model.document.filesets;
+
+import lombok.Data;
+import lombok.ToString;
+import org.bson.Document;
+import sun.jvm.hotspot.utilities.PlatformInfo;
+
+import java.util.List;
+
+@Data
+public class SDILayer extends Materialization{
+
+ private
+
+ private List ogcLinks;
+ private List
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/LifecycleInformation.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/lifecycle/LifecycleInformation.java
similarity index 61%
rename from geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/LifecycleInformation.java
rename to geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/lifecycle/LifecycleInformation.java
index 8ad8550..b5bd015 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/LifecycleInformation.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/lifecycle/LifecycleInformation.java
@@ -1,33 +1,30 @@
-package org.gcube.application.geoportal.common.model.document;
+package org.gcube.application.geoportal.common.model.document.lifecycle;
import lombok.*;
import java.util.ArrayList;
import java.util.List;
-@NoArgsConstructor
-@AllArgsConstructor
-@Getter
-@Setter
-@ToString
+@Data
public class LifecycleInformation {
public static final String PHASE="phase";
+ public static final String LAST_INVOKED_STEP="lastInvokedStep";
public static final String LAST_OPERATION_STATUS="lastOperationStatus";
public static final String ERROR_MESSAGES="errorMessages";
- public static final String WARNING_MESSAGES="warningMEssages";
- public static final String CHILDREN="children";
+ public static final String WARNING_MESSAGES="warningMessages";
+ public static final String TRIGGERED_EVENTS="triggeredEvents";
public static enum Status{
OK,ERROR,WARNING
}
-
private String phase;
+ private String lastInvokedStep;
private Status lastOperationStatus;
private List errorMessages;
private List warningMessages;
- private List children;
+ private List triggeredEvents;
public void addErrorMessage(String msg){
@@ -40,4 +37,9 @@ public class LifecycleInformation {
warningMessages=new ArrayList<>();
warningMessages.add(msg);
}
+
+ public void addEventReport(TriggeredEvents info){
+ if(triggeredEvents==null) triggeredEvents=new ArrayList<>();
+ triggeredEvents.add(info);
+ }
}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/lifecycle/TriggeredEvents.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/lifecycle/TriggeredEvents.java
new file mode 100644
index 0000000..fa63d5b
--- /dev/null
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/document/lifecycle/TriggeredEvents.java
@@ -0,0 +1,33 @@
+package org.gcube.application.geoportal.common.model.document.lifecycle;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class TriggeredEvents {
+
+ public static final String PHASE="phase";
+ public static final String LAST_INVOKED_STEP="lastInvokedStep";
+ public static final String LAST_OPERATION_STATUS="lastOperationStatus";
+ public static final String ERROR_MESSAGES="errorMessages";
+ public static final String WARNING_MESSAGES="warningMessages";
+ public static final String TRIGGERED_EVENTS="triggeredEvents";
+
+ private String event;
+ private LifecycleInformation.Status lastOperationStatus;
+ private List errorMessages;
+ private List warningMessages;
+
+ public void addErrorMessage(String msg){
+ if(errorMessages==null)
+ errorMessages=new ArrayList<>();
+ errorMessages.add(msg);
+ }
+ public void addWarningMessage(String msg){
+ if(warningMessages==null)
+ warningMessages=new ArrayList<>();
+ warningMessages.add(msg);
+ }
+}
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Profile.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Profile.java
index eb10306..d9710bb 100644
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Profile.java
+++ b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/profile/Profile.java
@@ -9,11 +9,8 @@ import javax.xml.bind.annotation.XmlRootElement;
import com.vdurmont.semver4j.Semver;
import lombok.Data;
-import lombok.Getter;
import lombok.NoArgsConstructor;
-import org.bson.Document;
-import org.gcube.application.geoportal.common.model.document.AccountingInfo;
-import org.gcube.application.geoportal.common.model.document.ComparableVersion;
+import org.gcube.application.geoportal.common.model.document.accounting.AccountingInfo;
@Data
@NoArgsConstructor
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 049ecdf..f8d8817 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
@@ -2,7 +2,7 @@ package org.gcube.application.geoportal.service.engine;
import lombok.*;
import lombok.extern.slf4j.Slf4j;
-import org.gcube.application.geoportal.common.model.document.RegisteredFile;
+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;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
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 689bd5b..661550d 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
@@ -1,13 +1,12 @@
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.StepExecutionReport;
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;
@@ -38,7 +37,7 @@ public class SimpleLifeCycleManager implements LifecycleManager {
}
@Override
- public ExecutionReport performStep(StepExecutionRequest request) throws StepException {
+ public StepExecutionReport performStep(StepExecutionRequest request) throws StepException {
log.info("Received Request ");
switch(request.getStep()){
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 38318cc..11a1fa2 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
@@ -11,10 +11,15 @@ 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.reports.StepExecutionReport;
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
import org.gcube.application.geoportal.common.faults.StorageException;
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;
+import org.gcube.application.geoportal.common.model.document.accounting.PublicationInfo;
+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.legacy.Concessione;
import org.gcube.application.geoportal.common.model.profile.Field;
import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
@@ -43,6 +48,7 @@ import java.security.InvalidParameterException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
@@ -236,7 +242,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
@Override
public ProfiledDocument performStep(String id, String step, Document options) throws StepException, JsonProcessingException {
- ExecutionReport report = step(getByID(id), step, options);
+ StepExecutionReport report = step(getByID(id), step, options);
return convert(replace(asDocumentWithId(report.getResult()),new ObjectId(id),getCollectionName()),ProfiledDocument.class);
}
@@ -349,7 +355,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
}
- private ExecutionReport step(ProfiledDocument theDocument,String step,Document callParameters) throws StepException {
+ private StepExecutionReport step(ProfiledDocument theDocument, String step, Document callParameters) throws StepException {
log.info("[Profile {} ] Invoking Step {} on {}" ,profile.getId(),step,getManager().getDescriptor());
StepExecutionRequest request=new StepExecutionRequest();
request.setCallParameters(callParameters);
@@ -357,7 +363,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
request.setProfile(profile);
request.setStep(step);
log.debug("Requesting Step Execution {} ",request);
- ExecutionReport report= getManager().performStep(request);
+ StepExecutionReport report= getManager().performStep(request);
log.debug("Report is {}",report);
if(report.getResult()==null) throw new StepException("Report result is null");
return report;
@@ -371,6 +377,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
log.debug("Preparing Registered FileSet..");
RegisteredFileSet toReturn = new RegisteredFileSet();
if(attributes!=null) toReturn.putAll(attributes);
+ toReturn.put(RegisteredFileSet.UUID, UUID.randomUUID().toString());
toReturn.put(RegisteredFileSet.CREATION_INFO,UserUtils.getCurrent().asInfo());
toReturn.putIfAbsent(RegisteredFileSet.ACCESS,doc.getInfo().getAccess());
FolderContainer base=ws.createFolder(new WorkspaceManager.FolderOptions(
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
index f7f7d7f..4678ed4 100644
--- 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
@@ -3,9 +3,9 @@ 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.application.geoportal.common.model.document.accounting.AccountingInfo;
+import org.gcube.application.geoportal.common.model.document.accounting.Context;
+import org.gcube.application.geoportal.common.model.document.accounting.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;
diff --git a/geoportal-service/src/main/resources/examples/layer.json b/geoportal-service/src/main/resources/examples/layer.json
index dd12d3e..afb861f 100644
--- a/geoportal-service/src/main/resources/examples/layer.json
+++ b/geoportal-service/src/main/resources/examples/layer.json
@@ -1,11 +1,17 @@
{
- "ogc_links" : [
+ "_type" : "gcube-sdi-layer",
+
+ "ogcLinks" : [
{"wms":""},{"wfs": ""},{"csw": ""}
],
- "platform_info" : [
+ "bbox" : {"maxY" : 90,"maxX" : 180,"minY" : -90, "minX": -180},
+ "platformInfo" : [
{"_type" : "Geoserver",
- "layername" : "...",
- "workspace" : ""},
+ "layerName" : "...",
+ "workspace" : "",
+ "storeName" : "",
+ "persistencePath" : "..",
+ "files" : ["","",""]},
{"_type" : "GeoNetwork",
"layerID" : 0,
"layerUUID" : ".."}
diff --git a/geoportal-service/src/main/resources/examples/registeredFileSet.json b/geoportal-service/src/main/resources/examples/registeredFileSet.json
new file mode 100644
index 0000000..a684303
--- /dev/null
+++ b/geoportal-service/src/main/resources/examples/registeredFileSet.json
@@ -0,0 +1,16 @@
+{
+ "uuid" : "",
+ "creationInfo" : {},
+ "access" : {},
+ "folderID" : {},
+ "payloads" : [
+ {"mimetype" : "",
+ "storageID" : "",
+ "link" : "",
+ "name" : ""
+ }
+ ],
+ "materializations" : [
+ {"_type" : "gcube-sdi-layer", ...}
+ ]
+}
\ No newline at end of file
diff --git a/geoportal-service/src/main/resources/profiles/profiledConcessioni.json b/geoportal-service/src/main/resources/profiles/profiledConcessioni.json
index 64e159f..03a3f27 100644
--- a/geoportal-service/src/main/resources/profiles/profiledConcessioni.json
+++ b/geoportal-service/src/main/resources/profiles/profiledConcessioni.json
@@ -39,6 +39,19 @@
}
},
+ {
+ "id" : "SDI-Default-Materializer",
+ "type" : "Materializer",
+ "configuration" : {
+ "registeredFileSetPaths" : [
+ {"pianteFineScavo" : "pianteFineScavo"},
+ {"posizionamentoScavo" : "posizionamentoScavo"}
+ ]
+ }
+ },
+
+
+
{
"id" : "org.gcube....geoportal-data-entry-portlet",
"type" : "DATA_ENTRY_GUI",
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProfiledDocumentsTests.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProfiledDocumentsTests.java
index 27d500e..f9cf24f 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProfiledDocumentsTests.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProfiledDocumentsTests.java
@@ -1,15 +1,13 @@
package org.gcube.application.geoportal.service;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.jayway.jsonpath.TypeRef;
import org.bson.Document;
import org.gcube.application.cms.serialization.Serialization;
-import org.gcube.application.cms.custom.gna.concessioni.model.ProfiledConcessione;
import org.gcube.application.cms.tests.TokenSetter;
import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
import org.gcube.application.geoportal.common.model.JSONPathWrapper;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
-import org.gcube.application.geoportal.common.model.document.RegisteredFileSet;
+import org.gcube.application.geoportal.common.model.document.filesets.RegisteredFileSet;
import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.model.rest.RegisterFileSetRequest;