Various refactoring
This commit is contained in:
parent
da12a4b1aa
commit
1cdf92ba1a
|
@ -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
|
# Changelog for org.gcube.application.cms-plugin-framework
|
||||||
|
|
||||||
|
## [v1.0.1-SNAPSHOT] 2022-01-17
|
||||||
|
- Serialization Features
|
||||||
|
|
||||||
## [v1.0.0] 2021-09-20
|
## [v1.0.0] 2021-09-20
|
||||||
- First release
|
- First release
|
|
@ -4,7 +4,7 @@
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>cms-plugin-framework</artifactId>
|
<artifactId>cms-plugin-framework</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.1-SNAPSHOT</version>
|
||||||
|
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
|
@ -38,6 +38,12 @@
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.datatype</groupId>
|
||||||
|
<artifactId>jackson-datatype-jsr310</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -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> T read(String jsonString,Class<T> clazz) throws JsonProcessingException, IOException {
|
||||||
|
return mapper.readerFor(clazz).readValue(jsonString);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> Iterator<T> readCollection(String jsonString, Class<T> 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> T convert(Object d,Class<T> 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<ObjectId> {
|
||||||
|
@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<ObjectId> handledType() {
|
||||||
|
return ObjectId.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private static class ObjectIdDeserializer extends JsonDeserializer<ObjectId> {
|
||||||
|
|
||||||
|
@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<ObjectId> handledType() {
|
||||||
|
return ObjectId.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Comparable Version
|
||||||
|
private static class ComparableVersionSerializer extends JsonSerializer<ComparableVersion> {
|
||||||
|
@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<ComparableVersion> handledType() {
|
||||||
|
return ComparableVersion.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private static class ComparableVersionDeserializer extends JsonDeserializer<ComparableVersion> {
|
||||||
|
|
||||||
|
@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<ComparableVersion> handledType() {
|
||||||
|
return ComparableVersion.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ package org.gcube.application.cms.plugins.reports;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@ -13,4 +14,10 @@ public class Report {
|
||||||
|
|
||||||
private Status status;
|
private Status status;
|
||||||
private List<String> messages;
|
private List<String> messages;
|
||||||
|
|
||||||
|
public Report putMessage(String msg){
|
||||||
|
if(messages==null)messages=new ArrayList<>();
|
||||||
|
messages.add(msg);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
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
|
## [v1.0.0] - 2021-12-15
|
||||||
- First release
|
- First release
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<artifactId>concessioni-lifecycle</artifactId>
|
<artifactId>concessioni-lifecycle</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.1</version>
|
||||||
<name>GNA Concessioni Lifecycle</name>
|
<name>GNA Concessioni Lifecycle</name>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.gcube.application.cms.concessioni.plugins;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
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.custom.gna.concessioni.model.ProfiledConcessione;
|
||||||
import org.gcube.application.cms.plugins.LifecycleManager;
|
import org.gcube.application.cms.plugins.LifecycleManager;
|
||||||
import org.gcube.application.cms.plugins.faults.InitializationException;
|
import org.gcube.application.cms.plugins.faults.InitializationException;
|
||||||
|
@ -47,13 +48,14 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
|
||||||
ExecutionReport report=new ExecutionReport();
|
ExecutionReport report=new ExecutionReport();
|
||||||
report.setRequest(request);
|
report.setRequest(request);
|
||||||
report.setStatus(Report.Status.OK);
|
report.setStatus(Report.Status.OK);
|
||||||
|
report.setResult(request.getDocument());
|
||||||
try {
|
try {
|
||||||
switch (request.getStep()) {
|
switch (request.getStep()) {
|
||||||
case StepExecutionRequest.Steps.ON_INIT_DOCUMENT:
|
case StepExecutionRequest.Steps.ON_INIT_DOCUMENT:
|
||||||
// Set Defaults as for on update
|
// Set Defaults as for on update
|
||||||
case StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT: {
|
case StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT: {
|
||||||
ProfiledDocument doc = request.getDocument();
|
log.debug("Setting default values..");
|
||||||
|
report.setResult(setDefaults(request.getDocument()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case StepExecutionRequest.Steps.ON_MATERIALIZE_DOCUMENT: {
|
case StepExecutionRequest.Steps.ON_MATERIALIZE_DOCUMENT: {
|
||||||
|
@ -79,7 +81,7 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
|
||||||
}catch (Throwable t){
|
}catch (Throwable t){
|
||||||
log.error("Unable to perform step "+request.getStep(),t);
|
log.error("Unable to perform step "+request.getStep(),t);
|
||||||
report.setStatus(Report.Status.ERROR);
|
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;
|
return report;
|
||||||
}
|
}
|
||||||
|
@ -93,7 +95,7 @@ public class ConcessioniLifeCycleManager implements LifecycleManager {
|
||||||
// STATIC ROUTINES
|
// STATIC ROUTINES
|
||||||
|
|
||||||
private static final ProfiledDocument setDefaults(ProfiledDocument document){
|
private static final ProfiledDocument setDefaults(ProfiledDocument document){
|
||||||
ProfiledConcessione c =(ProfiledConcessione) document;
|
ProfiledConcessione c=Serialization.convert(document,ProfiledConcessione.class);
|
||||||
c.setDefaults();
|
c.setDefaults();
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
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
|
## [v1.0.0] - 2021-12-15
|
||||||
- First release
|
- First release
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>org.gcube.application.cms</groupId>
|
<groupId>org.gcube.application.cms</groupId>
|
||||||
<artifactId>concessioni-model</artifactId>
|
<artifactId>concessioni-model</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.0.1-SNAPSHOT</version>
|
||||||
<name>GNA Concessioni Model</name>
|
<name>GNA Concessioni Model</name>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.gcube.application.cms.custom.gna.concessioni.model;
|
package org.gcube.application.cms.custom.gna.concessioni.model;
|
||||||
|
|
||||||
|
|
||||||
import org.bson.BsonDocument;
|
import org.bson.BsonDocument;
|
||||||
import org.bson.BsonString;
|
import org.bson.BsonString;
|
||||||
import org.bson.BsonValue;
|
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.AccessPolicy;
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
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.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 org.gcube.application.geoportal.common.model.legacy.report.ConstraintCheck;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -79,7 +78,8 @@ public class ProfiledConcessione extends ProfiledDocument {
|
||||||
|
|
||||||
|
|
||||||
//RELAZIONE
|
//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);
|
Document rel=doc.get(RELAZIONE_SCAVO,Document.class);
|
||||||
rel.putIfAbsent(Sections.TITOLO,doc.getString(NOME)+" relazione di scavo");
|
rel.putIfAbsent(Sections.TITOLO,doc.getString(NOME)+" relazione di scavo");
|
||||||
rel.putIfAbsent(SOGGETTO,doc.get(SOGGETTO));
|
rel.putIfAbsent(SOGGETTO,doc.get(SOGGETTO));
|
||||||
|
@ -90,7 +90,7 @@ public class ProfiledConcessione extends ProfiledDocument {
|
||||||
relAccess.setPolicy(ConstraintCheck.defaultFor(relAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
relAccess.setPolicy(ConstraintCheck.defaultFor(relAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
||||||
|
|
||||||
//ABSTRACT Relazione
|
//ABSTRACT Relazione
|
||||||
doc.putIfAbsent(ABSTRACT_RELAZIONE,new RegisteredFileSet());
|
doc.putIfAbsent(ABSTRACT_RELAZIONE,new Document());
|
||||||
Document abs=doc.get(ABSTRACT_RELAZIONE,Document.class);
|
Document abs=doc.get(ABSTRACT_RELAZIONE,Document.class);
|
||||||
abs.putIfAbsent(Sections.TITOLO,doc.getString(NOME)+" abstract relazione di scavo");
|
abs.putIfAbsent(Sections.TITOLO,doc.getString(NOME)+" abstract relazione di scavo");
|
||||||
abs.putIfAbsent(RegisteredFileSet.CREATION_INFO,this.getInfo().getCreationInfo());
|
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.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate());
|
||||||
absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
||||||
|
|
||||||
|
//TODO complete setDefaults
|
||||||
//IMMAGINI RAPPRESENTATIVE
|
//IMMAGINI RAPPRESENTATIVE
|
||||||
|
|
||||||
|
|
||||||
// if(doc.containsKey(IMMAGINI_RAPPRESENTATIVE)) {
|
if(doc.containsKey(IMMAGINI_RAPPRESENTATIVE)) {
|
||||||
// for (BsonValue bsonValue : doc.toBsonDocument(null, null).
|
for (BsonValue bsonValue : doc.toBsonDocument(null, null).
|
||||||
// getArray(IMMAGINI_RAPPRESENTATIVE)) {
|
getArray(IMMAGINI_RAPPRESENTATIVE)) {
|
||||||
// BsonDocument imgDocument = bsonValue.asDocument();
|
|
||||||
// imgDocument.putIfAbsent(SOGGETTO,new BsonString(doc.getString(SOGGETTO));
|
BsonDocument imgDocument = bsonValue.asDocument();
|
||||||
// imgDocument.putIfAbsent(RegisteredFileSet.CREATION_INFO,new BsonDocument(this.getInfo().getCreationInfo());
|
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());
|
// imgDocument.putIfAbsent(RegisteredFileSet.ACCESS,this.getInfo().getAccess());
|
||||||
// Access absAccess=rel.get(RegisteredFileSet.ACCESS,Access.class);
|
// Access absAccess=rel.get(RegisteredFileSet.ACCESS,Access.class);
|
||||||
// absAccess.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate());
|
// absAccess.setLicense(ConstraintCheck.defaultFor(absAccess.getLicense(),"CC-BY-4.0").evaluate());
|
||||||
// absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
// absAccess.setPolicy(ConstraintCheck.defaultFor(absAccess.getPolicy(), AccessPolicy.OPEN).evaluate());
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
# Changelog for org.gcube.application.geoportal-common
|
||||||
|
|
||||||
|
# [v1.0.9-SNAPSHOT] - 2022-01-17
|
||||||
|
- Minor fixes in model
|
||||||
|
|
||||||
# [v1.0.8] - 2021-11-10
|
# [v1.0.8] - 2021-11-10
|
||||||
- Fixes [#22369](https://support.d4science.org/issues/22369)
|
- Fixes [#22369](https://support.d4science.org/issues/22369)
|
||||||
- Fixes [#22338](https://support.d4science.org/issues/22338)
|
- Fixes [#22338](https://support.d4science.org/issues/22338)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>geoportal-common</artifactId>
|
<artifactId>geoportal-common</artifactId>
|
||||||
<version>1.0.8</version>
|
<version>1.0.9-SNAPSHOT</version>
|
||||||
<name>Geoportal Common</name>
|
<name>Geoportal Common</name>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
|
@ -3,6 +3,7 @@ package org.gcube.application.geoportal.common.model.document;
|
||||||
import com.mongodb.client.model.geojson.GeoJsonObjectType;
|
import com.mongodb.client.model.geojson.GeoJsonObjectType;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
import org.bson.types.ObjectId;
|
||||||
|
|
||||||
|
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|
|
@ -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
|
# Changelog for org.gcube.application.geoportal-service
|
||||||
|
|
||||||
|
## [v1.0.9-SNAPSHOT] 2022-01-17
|
||||||
|
- Plugin Management
|
||||||
|
|
||||||
## [v1.0.8] 2021-09-20
|
## [v1.0.8] 2021-09-20
|
||||||
- Logging
|
- Logging
|
||||||
- Fixes [#22193](https://support.d4science.org/issues/22193)
|
- Fixes [#22193](https://support.d4science.org/issues/22193)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>org.gcube.application</groupId>
|
<groupId>org.gcube.application</groupId>
|
||||||
<artifactId>geoportal-service</artifactId>
|
<artifactId>geoportal-service</artifactId>
|
||||||
<version>1.0.8</version>
|
<version>1.0.9-SNAPSHOT</version>
|
||||||
<name>Geoportal Service</name>
|
<name>Geoportal Service</name>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
|
|
||||||
|
@ -185,10 +185,7 @@
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.fasterxml.jackson.datatype</groupId>
|
|
||||||
<artifactId>jackson-datatype-jsr310</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.reflections</groupId>
|
<groupId>org.reflections</groupId>
|
||||||
|
|
|
@ -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.ProfiledDocuments;
|
||||||
import org.gcube.application.geoportal.service.rest.Sections;
|
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 org.glassfish.jersey.server.ResourceConfig;
|
||||||
|
|
||||||
import javax.ws.rs.ApplicationPath;
|
import javax.ws.rs.ApplicationPath;
|
||||||
|
|
|
@ -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.WorkspaceManager.FolderOptions;
|
||||||
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
|
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.*;
|
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.application.geoportal.service.utils.UserUtils;
|
||||||
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||||
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
import org.gcube.common.storagehub.model.exceptions.StorageHubException;
|
||||||
import org.gcube.data.transfer.library.faults.RemoteServiceException;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -2,7 +2,7 @@ package org.gcube.application.geoportal.service.engine.mongo;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.mongodb.client.MongoDatabase;
|
import com.mongodb.client.MongoDatabase;
|
||||||
import lombok.Synchronized;
|
import lombok.Getter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.bson.types.ObjectId;
|
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.cms.plugins.requests.StepExecutionRequest;
|
||||||
import org.gcube.application.geoportal.common.model.document.*;
|
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.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.HandlerDeclaration;
|
||||||
import org.gcube.application.geoportal.common.model.profile.Profile;
|
import org.gcube.application.geoportal.common.model.profile.Profile;
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
||||||
import org.gcube.application.geoportal.service.engine.ImplementationProvider;
|
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.ConfigurationException;
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.DeletionException;
|
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 org.gcube.application.geoportal.service.utils.UserUtils;
|
||||||
|
|
||||||
import javax.ws.rs.WebApplicationException;
|
import javax.ws.rs.WebApplicationException;
|
||||||
|
@ -33,7 +31,7 @@ import java.util.Map;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import static org.gcube.application.geoportal.service.engine.mongo.ConcessioniMongoManager.asConcessione;
|
import static org.gcube.application.cms.Serialization.*;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ProfiledMongoManager extends MongoManager implements MongoManagerI<ProfiledDocument>{
|
public class ProfiledMongoManager extends MongoManager implements MongoManagerI<ProfiledDocument>{
|
||||||
|
@ -42,7 +40,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
Profile profile;
|
Profile profile;
|
||||||
MongoDatabase db=null;
|
MongoDatabase db=null;
|
||||||
|
|
||||||
LifecycleManager lfManager;
|
|
||||||
|
|
||||||
|
|
||||||
public ProfiledMongoManager(String profileId) throws ConfigurationException {
|
public ProfiledMongoManager(String profileId) throws ConfigurationException {
|
||||||
|
@ -58,25 +56,6 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
log.debug("Loaded Profile {} ",profile);
|
log.debug("Loaded Profile {} ",profile);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Getting Lifecycle Manager declaration from Profile
|
|
||||||
List<HandlerDeclaration> 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
|
// Connect to DB
|
||||||
String toUseDB=super.client.getConnection().getDatabase();
|
String toUseDB=super.client.getConnection().getDatabase();
|
||||||
log.info("Connecting to DB {} ",toUseDB);
|
log.info("Connecting to DB {} ",toUseDB);
|
||||||
|
@ -85,8 +64,30 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
db=client.getTheClient().getDatabase(toUseDB);
|
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<HandlerDeclaration> 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 {
|
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();
|
return step(updatedDocument,StepExecutionRequest.Steps.ON_UPDATE_DOCUMENT).getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Document asDocument(ProfiledDocument d) throws JsonProcessingException {
|
// private Document asDocument(ProfiledDocument d) throws JsonProcessingException {
|
||||||
return Document.parse(Serialization.write(d));
|
// return Document.parse(Serialization.write(d));
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
private ProfiledDocument asProfiledDocument(Document d) throws IOException {
|
// private ProfiledDocument asProfiledDocument(Document d) throws IOException {
|
||||||
return Serialization.read(d.toJson(),ProfiledDocument.class);
|
// return Serialization.read(d.toJson(),ProfiledDocument.class);
|
||||||
}
|
// }
|
||||||
|
|
||||||
private String getCollectionName(){
|
private String getCollectionName(){
|
||||||
// TODO Profile can directly specify, use ID only as default
|
// 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 {
|
public ProfiledDocument update(String id, ProfiledDocument toSet) throws IOException, StepException {
|
||||||
log.trace("Replacing {} ",toSet);
|
log.trace("Replacing {} ",toSet);
|
||||||
toSet=onUpdate(toSet);
|
toSet=onUpdate(toSet);
|
||||||
return asProfiledDocument(replace(asDocument(toSet),getCollectionName()));
|
return convert(replace(asDocument(toSet),getCollectionName()),ProfiledDocument.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -190,7 +191,7 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProfiledDocument getByID(String id) throws IOException {
|
public ProfiledDocument getByID(String id) throws IOException {
|
||||||
return asProfiledDocument(super.getById(asId(id),getCollectionName()));
|
return convert(super.getById(asId(id),getCollectionName()),ProfiledDocument.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -245,12 +246,15 @@ public class ProfiledMongoManager extends MongoManager implements MongoManagerI<
|
||||||
|
|
||||||
|
|
||||||
private ExecutionReport step(ProfiledDocument theDocument,String step) throws StepException {
|
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();
|
StepExecutionRequest request=new StepExecutionRequest();
|
||||||
request.setDocument(theDocument);
|
request.setDocument(theDocument);
|
||||||
request.setProfile(profile);
|
request.setProfile(profile);
|
||||||
request.setStep(StepExecutionRequest.Steps.ON_INIT_DOCUMENT);
|
request.setStep(StepExecutionRequest.Steps.ON_INIT_DOCUMENT);
|
||||||
log.debug("Requesting Step Execution {} ",request);
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.ConfigurationException;
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.PublishException;
|
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.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.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
|
@ -5,7 +5,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import org.gcube.application.geoportal.common.model.profile.Profile;
|
import org.gcube.application.geoportal.common.model.profile.Profile;
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
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.io.IOException;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
|
|
@ -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.mongo.ConcessioniMongoManager;
|
||||||
import org.gcube.application.geoportal.service.engine.postgis.PostgisIndex;
|
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.model.internal.faults.DeletionException;
|
||||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
import org.gcube.application.cms.Serialization;
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
|
|
||||||
import javax.ws.rs.*;
|
import javax.ws.rs.*;
|
||||||
|
|
|
@ -3,16 +3,12 @@ package org.gcube.application.geoportal.service.rest;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.gcube.application.geoportal.common.model.document.ProfiledDocument;
|
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.Configuration;
|
||||||
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
import org.gcube.application.geoportal.common.model.rest.QueryRequest;
|
||||||
import org.gcube.application.geoportal.common.rest.InterfaceConstants;
|
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.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.model.internal.faults.ConfigurationException;
|
||||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
import org.gcube.application.cms.Serialization;
|
||||||
import org.json.JSONArray;
|
|
||||||
|
|
||||||
import javax.ws.rs.*;
|
import javax.ws.rs.*;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
|
@ -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> T read(String jsonString,Class<T> clazz) throws JsonProcessingException, IOException {
|
|
||||||
return mapper.readerFor(clazz).readValue(jsonString);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> Iterator<T> readCollection(String jsonString, Class<T> 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -3,7 +3,7 @@ package org.gcube.application.geoportal.service;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.gcube.application.cms.tests.TokenSetter;
|
import org.gcube.application.cms.tests.TokenSetter;
|
||||||
import org.gcube.application.geoportal.service.rest.GuardedMethod;
|
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.glassfish.jersey.test.JerseyTest;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
|
|
||||||
|
|
|
@ -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.FileSets;
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
import org.gcube.application.geoportal.common.utils.Files;
|
||||||
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
import org.gcube.application.geoportal.common.utils.StorageUtils;
|
||||||
import org.gcube.application.geoportal.service.utils.Serialization;
|
import org.gcube.application.cms.Serialization;
|
||||||
import org.gcube.common.storagehub.model.query.Queries;
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
package org.gcube.application.geoportal.service;
|
package org.gcube.application.geoportal.service;
|
||||||
|
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
|
import org.gcube.application.cms.Serialization;
|
||||||
import org.gcube.application.cms.tests.TokenSetter;
|
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.gcube.application.geoportal.common.rest.InterfaceConstants;
|
||||||
|
import org.junit.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
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));
|
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
|
@Test
|
||||||
public void registerNew() {
|
public void registerNew() {
|
||||||
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
|
WebTarget target=target(InterfaceConstants.Methods.PROJECTS);
|
||||||
|
|
|
@ -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.Concessione;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.GeoServerContent;
|
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.LayerConcessione;
|
||||||
import org.gcube.application.geoportal.common.model.legacy.PersistedContent;
|
|
||||||
import org.gcube.application.geoportal.common.utils.Files;
|
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.engine.postgis.PostgisIndex;
|
||||||
import org.gcube.application.geoportal.service.model.internal.faults.ConfigurationException;
|
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.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.Assert;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
Loading…
Reference in New Issue