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;