diff --git a/cms-plugin-framework/CHANGELOG.md b/cms-plugin-framework/CHANGELOG.md
index 7e9289e..ed0fc9e 100644
--- a/cms-plugin-framework/CHANGELOG.md
+++ b/cms-plugin-framework/CHANGELOG.md
@@ -2,5 +2,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for org.gcube.application.cms-plugin-framework
+## [v1.0.1-SNAPSHOT] 2022-01-17
+- Serialization Features
+
## [v1.0.0] 2021-09-20
- First release
\ No newline at end of file
diff --git a/cms-plugin-framework/pom.xml b/cms-plugin-framework/pom.xml
index 99f0dd0..83f5175 100644
--- a/cms-plugin-framework/pom.xml
+++ b/cms-plugin-framework/pom.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
cms-plugin-framework
- 1.0.0
+ 1.0.1-SNAPSHOT
org.gcube.application.cms
@@ -38,6 +38,12 @@
org.projectlombok
lombok
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+
+
\ No newline at end of file
diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/Serialization.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/Serialization.java
new file mode 100644
index 0000000..ff73097
--- /dev/null
+++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/Serialization.java
@@ -0,0 +1,138 @@
+package org.gcube.application.cms;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+import lombok.extern.slf4j.Slf4j;
+import org.bson.Document;
+import org.bson.types.ObjectId;
+import org.gcube.application.geoportal.common.model.document.ComparableVersion;
+import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
+import org.gcube.application.geoportal.common.model.rest.QueryRequest;
+
+import java.io.IOException;
+import java.time.format.DateTimeFormatter;
+import java.util.Iterator;
+
+@Slf4j
+public class Serialization {
+
+ public static final DateTimeFormatter FULL_FORMATTER=DateTimeFormatter.ofPattern("uuuuMMdd_HH-mm-ss");
+
+ public static ObjectMapper mapper;
+
+ static {
+ mapper=new ObjectMapper();
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
+ mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+ mapper.registerModule(new JavaTimeModule());
+
+ SimpleModule s=new SimpleModule();
+ s.addDeserializer(ObjectId.class,new ObjectIdDeserializer());
+ s.addSerializer(ObjectId.class,new ObjectIdSerializer());
+ s.addDeserializer(ComparableVersion.class,new ComparableVersionDeserializer());
+ s.addSerializer(ComparableVersion.class,new ComparableVersionSerializer());
+ mapper.registerModule(s);
+ }
+
+ public static T read(String jsonString,Class clazz) throws JsonProcessingException, IOException {
+ return mapper.readerFor(clazz).readValue(jsonString);
+ }
+
+ public static Iterator readCollection(String jsonString, Class clazz) throws IOException {
+ return mapper.readerFor(clazz).readValues(jsonString);
+ }
+
+
+ public static String write(Object toWrite) throws JsonProcessingException {
+ String toReturn= mapper.writeValueAsString(toWrite);
+ return toReturn;
+ }
+
+
+ public static QueryRequest parseQuery(String queryString) throws IOException {
+ log.debug("Parsing query Request {} ",queryString);
+ Document queryDocument = Document.parse(queryString);
+ log.debug("Document is ",queryDocument.toJson());
+ QueryRequest req = new QueryRequest();
+ if (queryDocument.getOrDefault("ordering",null)!=null)
+ req.setOrdering(Serialization.read(((Document) queryDocument.get("ordering")).toJson(), QueryRequest.OrderedRequest.class));
+ if (queryDocument.getOrDefault("paging",null)!=null)
+ req.setPaging(Serialization.read(((Document) queryDocument.get("paging")).toJson(), QueryRequest.PagedRequest.class));
+ req.setProjection(queryDocument.get("projection", Document.class));
+ req.setFilter(queryDocument.get("filter", Document.class));
+ return req;
+ }
+
+
+ //**** PROFILED DOCUMENTS
+
+ public static final T convert(Object d,Class clazz){
+ return mapper.convertValue(d,clazz);
+ }
+
+ public static final Document asDocument(Object obj) throws JsonProcessingException {
+ return Document.parse(mapper.writeValueAsString(obj));
+ }
+
+ // ***** Serialization Exceptions
+
+ // OBJECT ID
+ private static class ObjectIdSerializer extends JsonSerializer {
+ @Override
+ public void serialize(ObjectId objectId, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
+ if (objectId == null) jsonGenerator.writeNull();
+ else jsonGenerator.writeString(objectId.toHexString());
+ }
+
+ @Override
+ public Class handledType() {
+ return ObjectId.class;
+ }
+ }
+ private static class ObjectIdDeserializer extends JsonDeserializer {
+
+ @Override
+ public ObjectId deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ String value=jsonParser.getValueAsString();
+ if(value==null || value.isEmpty() || value.equals("null"))
+ return null;
+ else return new ObjectId(value);
+ }
+ @Override
+ public Class handledType() {
+ return ObjectId.class;
+ }
+ }
+
+ //Comparable Version
+ private static class ComparableVersionSerializer extends JsonSerializer {
+ @Override
+ public void serialize(ComparableVersion comparableVersion, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
+ if (comparableVersion == null) jsonGenerator.writeNull();
+ else jsonGenerator.writeString(comparableVersion.getCanonical());
+ }
+
+ @Override
+ public Class handledType() {
+ return ComparableVersion.class;
+ }
+ }
+ private static class ComparableVersionDeserializer extends JsonDeserializer {
+
+ @Override
+ public ComparableVersion deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
+ String value=jsonParser.getValueAsString();
+ if(value==null || value.isEmpty() || value.equals("null"))
+ return null;
+ else return new ComparableVersion(value);
+ }
+ @Override
+ public Class handledType() {
+ return ComparableVersion.class;
+ }
+ }
+}
diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/Report.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/Report.java
index 58b9755..848f9e2 100644
--- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/Report.java
+++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/Report.java
@@ -2,6 +2,7 @@ package org.gcube.application.cms.plugins.reports;
import lombok.Data;
+import java.util.ArrayList;
import java.util.List;
@Data
@@ -13,4 +14,10 @@ public class Report {
private Status status;
private List messages;
+
+ public Report putMessage(String msg){
+ if(messages==null)messages=new ArrayList<>();
+ messages.add(msg);
+ return this;
+ }
}
diff --git a/concessioni-lifecycle/CHANGELOG.md b/concessioni-lifecycle/CHANGELOG.md
index 078a9e4..e11392d 100644
--- a/concessioni-lifecycle/CHANGELOG.md
+++ b/concessioni-lifecycle/CHANGELOG.md
@@ -4,5 +4,8 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
This library contains custom extensions for the support of GNA "concessioni" use case
+## [v1.0.1-SNAPSHOT] - 2022-01-17
+- Serialization adaptation
+
## [v1.0.0] - 2021-12-15
- First release
diff --git a/concessioni-lifecycle/pom.xml b/concessioni-lifecycle/pom.xml
index c62a2e8..04f1257 100644
--- a/concessioni-lifecycle/pom.xml
+++ b/concessioni-lifecycle/pom.xml
@@ -5,7 +5,7 @@
4.0.0
concessioni-lifecycle
- 1.0.0
+ 1.0.1
GNA Concessioni Lifecycle
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 b94d603..c5a7c15 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
@@ -2,6 +2,7 @@ package org.gcube.application.cms.concessioni.plugins;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
+import org.gcube.application.cms.Serialization;
import org.gcube.application.cms.custom.gna.concessioni.model.ProfiledConcessione;
import org.gcube.application.cms.plugins.LifecycleManager;
import org.gcube.application.cms.plugins.faults.InitializationException;
@@ -47,13 +48,14 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
ExecutionReport report=new ExecutionReport();
report.setRequest(request);
report.setStatus(Report.Status.OK);
+ report.setResult(request.getDocument());
try {
switch (request.getStep()) {
case StepExecutionRequest.Steps.ON_INIT_DOCUMENT:
// Set Defaults as for on update
case StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT: {
- ProfiledDocument doc = request.getDocument();
-
+ log.debug("Setting default values..");
+ report.setResult(setDefaults(request.getDocument()));
break;
}
case StepExecutionRequest.Steps.ON_MATERIALIZE_DOCUMENT: {
@@ -79,7 +81,7 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
}catch (Throwable t){
log.error("Unable to perform step "+request.getStep(),t);
report.setStatus(Report.Status.ERROR);
- report.getMessages().add("Unable to execute Step "+request.getStep()+". Error was "+t.getMessage());
+ report.putMessage("Unable to execute Step "+request.getStep()+". Error was "+t.getMessage());
}
return report;
}
@@ -93,7 +95,7 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
// STATIC ROUTINES
private static final ProfiledDocument setDefaults(ProfiledDocument document){
- ProfiledConcessione c =(ProfiledConcessione) document;
+ ProfiledConcessione c=Serialization.convert(document,ProfiledConcessione.class);
c.setDefaults();
return c;
}
diff --git a/concessioni-model/CHANGELOG.md b/concessioni-model/CHANGELOG.md
index 0ce89ea..2047637 100644
--- a/concessioni-model/CHANGELOG.md
+++ b/concessioni-model/CHANGELOG.md
@@ -4,5 +4,9 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
This library contains custom BEANS for the support of GNA "concessioni" use case
+## [v1.0.1-SNAPSHOT] - 2022-01-17
+- Defaults Evaluation
+
+
## [v1.0.0] - 2021-12-15
- First release
diff --git a/concessioni-model/pom.xml b/concessioni-model/pom.xml
index b3dc4af..ac112d0 100644
--- a/concessioni-model/pom.xml
+++ b/concessioni-model/pom.xml
@@ -6,7 +6,7 @@
org.gcube.application.cms
concessioni-model
- 1.0.0
+ 1.0.1-SNAPSHOT
GNA Concessioni Model
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 cee48e6..e13396a 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,5 +1,6 @@
package org.gcube.application.cms.custom.gna.concessioni.model;
+
import org.bson.BsonDocument;
import org.bson.BsonString;
import org.bson.BsonValue;
@@ -8,8 +9,6 @@ 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.AbstractRelazione;
-import org.gcube.application.geoportal.common.model.legacy.report.Check;
import org.gcube.application.geoportal.common.model.legacy.report.ConstraintCheck;
import java.util.List;
@@ -79,7 +78,8 @@ public class ProfiledConcessione extends ProfiledDocument {
//RELAZIONE
- doc.putIfAbsent(RELAZIONE_SCAVO,new RegisteredFileSet());
+ // TODO NB provare se object gia' presente sia usando Document che sub Object
+ doc.putIfAbsent(RELAZIONE_SCAVO,new Document());
Document rel=doc.get(RELAZIONE_SCAVO,Document.class);
rel.putIfAbsent(Sections.TITOLO,doc.getString(NOME)+" relazione di scavo");
rel.putIfAbsent(SOGGETTO,doc.get(SOGGETTO));
@@ -90,7 +90,7 @@ public class ProfiledConcessione extends ProfiledDocument {
relAccess.setPolicy(ConstraintCheck.defaultFor(relAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
//ABSTRACT Relazione
- doc.putIfAbsent(ABSTRACT_RELAZIONE,new RegisteredFileSet());
+ doc.putIfAbsent(ABSTRACT_RELAZIONE,new Document());
Document abs=doc.get(ABSTRACT_RELAZIONE,Document.class);
abs.putIfAbsent(Sections.TITOLO,doc.getString(NOME)+" abstract relazione di scavo");
abs.putIfAbsent(RegisteredFileSet.CREATION_INFO,this.getInfo().getCreationInfo());
@@ -99,20 +99,23 @@ public class ProfiledConcessione extends ProfiledDocument {
absAccess.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate());
absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
+ //TODO complete setDefaults
//IMMAGINI RAPPRESENTATIVE
-// if(doc.containsKey(IMMAGINI_RAPPRESENTATIVE)) {
-// for (BsonValue bsonValue : doc.toBsonDocument(null, null).
-// getArray(IMMAGINI_RAPPRESENTATIVE)) {
-// BsonDocument imgDocument = bsonValue.asDocument();
-// imgDocument.putIfAbsent(SOGGETTO,new BsonString(doc.getString(SOGGETTO));
-// imgDocument.putIfAbsent(RegisteredFileSet.CREATION_INFO,new BsonDocument(this.getInfo().getCreationInfo());
+ if(doc.containsKey(IMMAGINI_RAPPRESENTATIVE)) {
+ for (BsonValue bsonValue : doc.toBsonDocument(null, null).
+ getArray(IMMAGINI_RAPPRESENTATIVE)) {
+
+ BsonDocument imgDocument = bsonValue.asDocument();
+ imgDocument.putIfAbsent(SOGGETTO,new BsonString(doc.getString(SOGGETTO)));
+// imgDocument.putIfAbsent(RegisteredFileSet.CREATION_INFO,this.getInfo().getCreationInfo());
+// imgDocument.putIfAbsent(RegisteredFileSet.CREATION_INFO,new BsonDocument(new Document()));
// imgDocument.putIfAbsent(RegisteredFileSet.ACCESS,this.getInfo().getAccess());
// Access absAccess=rel.get(RegisteredFileSet.ACCESS,Access.class);
// absAccess.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate());
// absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
-// }
-// }
+ }
+ }
}
}
diff --git a/geoportal-common/CHANGELOG.md b/geoportal-common/CHANGELOG.md
index 1b3264b..7e1739c 100644
--- a/geoportal-common/CHANGELOG.md
+++ b/geoportal-common/CHANGELOG.md
@@ -2,6 +2,9 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for org.gcube.application.geoportal-common
+# [v1.0.9-SNAPSHOT] - 2022-01-17
+- Minor fixes in model
+
# [v1.0.8] - 2021-11-10
- Fixes [#22369](https://support.d4science.org/issues/22369)
- Fixes [#22338](https://support.d4science.org/issues/22338)
diff --git a/geoportal-common/pom.xml b/geoportal-common/pom.xml
index 97d5a51..5467c49 100644
--- a/geoportal-common/pom.xml
+++ b/geoportal-common/pom.xml
@@ -3,7 +3,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
geoportal-common
- 1.0.8
+ 1.0.9-SNAPSHOT
Geoportal Common
diff --git a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/faults/JsonParseException.java b/geoportal-common/src/main/java/org/gcube/application/geoportal/common/faults/JsonParseException.java
deleted file mode 100644
index f45f8a1..0000000
--- a/geoportal-common/src/main/java/org/gcube/application/geoportal/common/faults/JsonParseException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.gcube.application.geoportal.common.faults;
-
-public class JsonParseException extends Exception{
-
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- public JsonParseException() {
- super();
- // TODO Auto-generated constructor stub
- }
-
- public JsonParseException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- // TODO Auto-generated constructor stub
- }
-
- public JsonParseException(String message, Throwable cause) {
- super(message, cause);
- // TODO Auto-generated constructor stub
- }
-
- public JsonParseException(String message) {
- super(message);
- // TODO Auto-generated constructor stub
- }
-
- public JsonParseException(Throwable cause) {
- super(cause);
- // TODO Auto-generated constructor stub
- }
-
-
-
-}
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 3a081d9..c4968d2 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
@@ -3,6 +3,7 @@ package org.gcube.application.geoportal.common.model.document;
import com.mongodb.client.model.geojson.GeoJsonObjectType;
import lombok.*;
import org.bson.Document;
+import org.bson.types.ObjectId;
@NoArgsConstructor
diff --git a/geoportal-service/CHANGELOG.md b/geoportal-service/CHANGELOG.md
index d89cf4e..be2df5e 100644
--- a/geoportal-service/CHANGELOG.md
+++ b/geoportal-service/CHANGELOG.md
@@ -2,6 +2,9 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
# Changelog for org.gcube.application.geoportal-service
+## [v1.0.9-SNAPSHOT] 2022-01-17
+- Plugin Management
+
## [v1.0.8] 2021-09-20
- Logging
- Fixes [#22193](https://support.d4science.org/issues/22193)
diff --git a/geoportal-service/pom.xml b/geoportal-service/pom.xml
index b837b74..55a71c3 100644
--- a/geoportal-service/pom.xml
+++ b/geoportal-service/pom.xml
@@ -4,7 +4,7 @@
4.0.0
org.gcube.application
geoportal-service
- 1.0.8
+ 1.0.9-SNAPSHOT
Geoportal Service
war
@@ -185,10 +185,7 @@
-
- com.fasterxml.jackson.datatype
- jackson-datatype-jsr310
-
+
org.reflections
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/GeoPortalService.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/GeoPortalService.java
index d06a0f5..6fedfd5 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/GeoPortalService.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/GeoPortalService.java
@@ -7,7 +7,7 @@ import org.gcube.application.geoportal.service.rest.ConcessioniOverMongo;
import org.gcube.application.geoportal.service.rest.ProfiledDocuments;
import org.gcube.application.geoportal.service.rest.Sections;
-import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.cms.Serialization;
import org.glassfish.jersey.server.ResourceConfig;
import javax.ws.rs.ApplicationPath;
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java
index fe9c811..8db9c29 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/mongo/ConcessioniMongoManager.java
@@ -23,18 +23,15 @@ import org.gcube.application.geoportal.service.engine.WorkspaceManager.FileOptio
import org.gcube.application.geoportal.service.engine.WorkspaceManager.FolderOptions;
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
import org.gcube.application.geoportal.service.model.internal.faults.*;
-import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.cms.Serialization;
import org.gcube.application.geoportal.service.utils.UserUtils;
import org.gcube.common.storagehub.client.dsl.FolderContainer;
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
-import org.gcube.data.transfer.library.faults.RemoteServiceException;
import java.io.IOException;
import java.io.InputStream;
-import java.net.MalformedURLException;
import java.net.URL;
import java.sql.SQLException;
-import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
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 df93e8b..eef80e8 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
@@ -2,7 +2,7 @@ package org.gcube.application.geoportal.service.engine.mongo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.mongodb.client.MongoDatabase;
-import lombok.Synchronized;
+import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.bson.types.ObjectId;
@@ -13,15 +13,13 @@ import org.gcube.application.cms.plugins.reports.ExecutionReport;
import org.gcube.application.cms.plugins.requests.StepExecutionRequest;
import org.gcube.application.geoportal.common.model.document.*;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
-import org.gcube.application.geoportal.common.model.legacy.report.ValidationReport;
import org.gcube.application.geoportal.common.model.profile.HandlerDeclaration;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
-import org.gcube.application.geoportal.service.engine.providers.PluginManager;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
-import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.cms.Serialization;
import org.gcube.application.geoportal.service.utils.UserUtils;
import javax.ws.rs.WebApplicationException;
@@ -33,7 +31,7 @@ import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.function.Consumer;
-import static org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager.asConcessione;
+import static org.gcube.application.cms.Serialization.*;
@Slf4j
public class ProfiledMongoManager extends MongoManager implements MongoManagerI{
@@ -42,7 +40,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
Profile profile;
MongoDatabase db=null;
- LifecycleManager lfManager;
+
public ProfiledMongoManager(String profileId) throws ConfigurationException {
@@ -58,25 +56,6 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
log.debug("Loaded Profile {} ",profile);
-
-
- //Getting Lifecycle Manager declaration from Profile
- List handlerDeclarations= profile.getHandlersMap().get(PluginDescriptor.BaseTypes.LIFECYCLE_MANAGER);
- if(handlerDeclarations==null || handlerDeclarations.isEmpty()) throw new ConfigurationException("No Lifecycle Handler defined for profile ID "+profileId);
- if(handlerDeclarations.size()>1) throw new ConfigurationException("Too many Lifecycle Handlers defined ("+handlerDeclarations+") in profile ID "+profileId);
-
- HandlerDeclaration lcHandlerDeclaration=handlerDeclarations.get(0);
-
- // Loading Lifecycle Manager
- log.debug("Looking for handler {} ",lcHandlerDeclaration);
- try{
- lfManager=(LifecycleManager) ImplementationProvider.get().getPluginManager().getObject().get(lcHandlerDeclaration.getId());
- if(lfManager==null) throw new ConfigurationException("Unable to find Lifecycle Manager Plugin. ID "+lcHandlerDeclaration.getId());
- }catch(ClassCastException e){
- throw new ConfigurationException("Unable to use "+lcHandlerDeclaration.getId()+" as Lifecycle Manager");
- }
-
-
// Connect to DB
String toUseDB=super.client.getConnection().getDatabase();
log.info("Connecting to DB {} ",toUseDB);
@@ -85,8 +64,30 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
db=client.getTheClient().getDatabase(toUseDB);
}
+ @Getter(lazy = true)
+ private final LifecycleManager manager=getLCManager();
+ private LifecycleManager getLCManager() {
+ try{
+ LifecycleManager toReturn=null;
+ //Getting Lifecycle Manager declaration from Profile
+ List handlerDeclarations= profile.getHandlersMap().get(PluginDescriptor.BaseTypes.LIFECYCLE_MANAGER);
+ if(handlerDeclarations==null || handlerDeclarations.isEmpty()) throw new ConfigurationException("No Lifecycle Handler defined for profile ID "+profile.getId());
+ if(handlerDeclarations.size()>1) throw new ConfigurationException("Too many Lifecycle Handlers defined ("+handlerDeclarations+") in profile ID "+profile.getId());
+ HandlerDeclaration lcHandlerDeclaration=handlerDeclarations.get(0);
+
+ // Loading Lifecycle Manager
+ log.debug("Looking for handler {} ",lcHandlerDeclaration);
+ toReturn=(LifecycleManager) ImplementationProvider.get().getPluginManager().getObject().get(lcHandlerDeclaration.getId());
+ if(toReturn==null) throw new ConfigurationException("Unable to find Lifecycle Manager Plugin. ID "+lcHandlerDeclaration.getId());
+
+ return toReturn;
+ } catch(Throwable t){
+ log.warn("Unable to load LC Manager ",t);
+ return null;
+ }
+ }
private ProfiledDocument onUpdate(ProfiledDocument updatedDocument) throws StepException {
@@ -96,13 +97,13 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
return step(updatedDocument,StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT).getResult();
}
- private Document asDocument(ProfiledDocument d) throws JsonProcessingException {
- return Document.parse(Serialization.write(d));
- }
-
- private ProfiledDocument asProfiledDocument(Document d) throws IOException {
- return Serialization.read(d.toJson(),ProfiledDocument.class);
- }
+// private Document asDocument(ProfiledDocument d) throws JsonProcessingException {
+// return Document.parse(Serialization.write(d));
+// }
+//
+// private ProfiledDocument asProfiledDocument(Document d) throws IOException {
+// return Serialization.read(d.toJson(),ProfiledDocument.class);
+// }
private String getCollectionName(){
// TODO Profile can directly specify, use ID only as default
@@ -156,7 +157,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
public ProfiledDocument update(String id, ProfiledDocument toSet) throws IOException, StepException {
log.trace("Replacing {} ",toSet);
toSet=onUpdate(toSet);
- return asProfiledDocument(replace(asDocument(toSet),getCollectionName()));
+ return convert(replace(asDocument(toSet),getCollectionName()),ProfiledDocument.class);
}
@Override
@@ -190,7 +191,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
@Override
public ProfiledDocument getByID(String id) throws IOException {
- return asProfiledDocument(super.getById(asId(id),getCollectionName()));
+ return convert(super.getById(asId(id),getCollectionName()),ProfiledDocument.class);
}
@Override
@@ -245,12 +246,15 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
private ExecutionReport step(ProfiledDocument theDocument,String step) throws StepException {
- log.info("[Profile {} ] Invoking Step {} on " ,profile.getId(),step,lfManager.getDescriptor());
+ log.info("[Profile {} ] Invoking Step {} on " ,profile.getId(),step,getManager().getDescriptor());
StepExecutionRequest request=new StepExecutionRequest();
request.setDocument(theDocument);
request.setProfile(profile);
request.setStep(StepExecutionRequest.Steps.ON_INIT_DOCUMENT);
log.debug("Requesting Step Execution {} ",request);
- return lfManager.performStep(request);
+ ExecutionReport report= getManager().performStep(request);
+ log.debug("Report is {}",report);
+ if(report.getResult()==null) throw new StepException("Report result is null");
+ return report;
}
}
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/postgis/PostgisIndex.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/postgis/PostgisIndex.java
index 514ebb8..cb34e79 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/postgis/PostgisIndex.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/postgis/PostgisIndex.java
@@ -13,7 +13,7 @@ import org.gcube.application.geoportal.service.model.internal.db.PostgisTable.Fi
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
import org.gcube.application.geoportal.service.model.internal.faults.PublishException;
import org.gcube.application.geoportal.service.model.internal.faults.SDIInteractionException;
-import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.cms.Serialization;
import java.sql.PreparedStatement;
import java.sql.SQLException;
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ProfileMapCache.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ProfileMapCache.java
index 4545e6d..54fbdc4 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ProfileMapCache.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/engine/providers/ProfileMapCache.java
@@ -5,7 +5,7 @@ import lombok.extern.slf4j.Slf4j;
import org.gcube.application.geoportal.common.model.profile.Profile;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
-import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.cms.Serialization;
import java.io.IOException;
import java.nio.charset.Charset;
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java
index 426f46e..c43f164 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ConcessioniOverMongo.java
@@ -9,7 +9,7 @@ import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager;
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
-import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.cms.Serialization;
import org.json.JSONArray;
import javax.ws.rs.*;
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java
index 0422a28..1c53501 100644
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java
+++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java
@@ -3,16 +3,12 @@ package org.gcube.application.geoportal.service.rest;
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
-import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.rest.Configuration;
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
-import org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager;
import org.gcube.application.geoportal.service.engine.mongo.ProfiledMongoManager;
-import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
-import org.gcube.application.geoportal.service.utils.Serialization;
-import org.json.JSONArray;
+import org.gcube.application.cms.Serialization;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java
deleted file mode 100644
index ef9812f..0000000
--- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/utils/Serialization.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.gcube.application.geoportal.service.utils;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import lombok.extern.slf4j.Slf4j;
-import org.bson.Document;
-import org.gcube.application.geoportal.common.model.rest.QueryRequest;
-
-import java.io.IOException;
-import java.time.format.DateTimeFormatter;
-import java.util.Iterator;
-
-@Slf4j
-public class Serialization {
-
-
- public static final DateTimeFormatter FULL_FORMATTER=DateTimeFormatter.ofPattern("uuuuMMdd_HH-mm-ss");
-
- public static ObjectMapper mapper;
-
- static {
- mapper=new ObjectMapper();
- mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false);
- mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
- mapper.registerModule(new JavaTimeModule());
-
- }
-
- public static T read(String jsonString,Class clazz) throws JsonProcessingException, IOException {
- return mapper.readerFor(clazz).readValue(jsonString);
- }
-
- public static Iterator readCollection(String jsonString, Class clazz) throws IOException {
- return mapper.readerFor(clazz).readValues(jsonString);
- }
-
-
- public static String write(Object toWrite) throws JsonProcessingException {
- String toReturn= mapper.writeValueAsString(toWrite);
- return toReturn;
- }
-
-
- public static QueryRequest parseQuery(String queryString) throws IOException {
- log.debug("Parsing query Request {} ",queryString);
- Document queryDocument = Document.parse(queryString);
- log.debug("Document is ",queryDocument.toJson());
- QueryRequest req = new QueryRequest();
- if (queryDocument.getOrDefault("ordering",null)!=null)
- req.setOrdering(Serialization.read(((Document) queryDocument.get("ordering")).toJson(), QueryRequest.OrderedRequest.class));
- if (queryDocument.getOrDefault("paging",null)!=null)
- req.setPaging(Serialization.read(((Document) queryDocument.get("paging")).toJson(), QueryRequest.PagedRequest.class));
- req.setProjection(queryDocument.get("projection", Document.class));
- req.setFilter(queryDocument.get("filter", Document.class));
- return req;
- }
-
-}
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java
index 02990ae..dbc0cdd 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/BasicServiceTestUnit.java
@@ -3,7 +3,7 @@ package org.gcube.application.geoportal.service;
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.tests.TokenSetter;
import org.gcube.application.geoportal.service.rest.GuardedMethod;
-import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.cms.Serialization;
import org.glassfish.jersey.test.JerseyTest;
import org.junit.BeforeClass;
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java
index f084f6d..c0afb9f 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ConcessioniOverMongoTest.java
@@ -15,8 +15,7 @@ import org.gcube.application.geoportal.common.rest.InterfaceConstants;
import org.gcube.application.geoportal.common.utils.FileSets;
import org.gcube.application.geoportal.common.utils.Files;
import org.gcube.application.geoportal.common.utils.StorageUtils;
-import org.gcube.application.geoportal.service.utils.Serialization;
-import org.gcube.common.storagehub.model.query.Queries;
+import org.gcube.application.cms.Serialization;
import org.json.JSONObject;
import org.junit.Assert;
import org.junit.Before;
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProjectTests.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProjectTests.java
index 8b7e51b..b3ab62d 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProjectTests.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/ProjectTests.java
@@ -1,8 +1,11 @@
package org.gcube.application.geoportal.service;
import org.bson.Document;
+import org.gcube.application.cms.Serialization;
import org.gcube.application.cms.tests.TokenSetter;
+import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -37,6 +40,20 @@ public class ProjectTests extends BasicServiceTestUnit{
System.out.println(target(InterfaceConstants.Methods.PROJECTS).path(testProfileId).request(MediaType.APPLICATION_JSON).get(List.class));
}
+ @Test
+ public void getByID(){
+ target(InterfaceConstants.Methods.PROJECTS).path(testProfileId).request(MediaType.APPLICATION_JSON).get(List.class).forEach(d ->{
+
+ try {
+ check(target(InterfaceConstants.Methods.PROJECTS).path(testProfileId).path((Serialization.convert(d,ProfiledDocument.class)).get_id())
+ .request(MediaType.APPLICATION_JSON).get(),ProfiledDocument.class);
+ } catch (Exception e) {
+ e.printStackTrace(System.err);
+ Assert.fail(e.getMessage());
+ }
+ });
+ }
+
@Test
public void registerNew() {
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
diff --git a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/materialization/SDITests.java b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/materialization/SDITests.java
index 7896692..0b88e1d 100644
--- a/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/materialization/SDITests.java
+++ b/geoportal-service/src/test/java/org/gcube/application/geoportal/service/engine/materialization/SDITests.java
@@ -8,13 +8,11 @@ import org.gcube.application.cms.tests.model.concessioni.TestConcessioniModel;
import org.gcube.application.geoportal.common.model.legacy.Concessione;
import org.gcube.application.geoportal.common.model.legacy.GeoServerContent;
import org.gcube.application.geoportal.common.model.legacy.LayerConcessione;
-import org.gcube.application.geoportal.common.model.legacy.PersistedContent;
import org.gcube.application.geoportal.common.utils.Files;
-import org.gcube.application.geoportal.service.engine.materialization.SDIManager;
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
import org.gcube.application.geoportal.service.model.internal.faults.SDIInteractionException;
-import org.gcube.application.geoportal.service.utils.Serialization;
+import org.gcube.application.cms.Serialization;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;