From 31b7d285726196247fd8fc9ef3dc04a40ae5d390 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Thu, 17 Feb 2022 14:47:51 +0100 Subject: [PATCH] Report Validation --- .../cms/plugins/faults/EventException.java | 2 +- .../faults/InitializationException.java | 2 +- .../faults/MaterializationException.java | 2 +- .../faults/PluginExecutionException.java | 22 ++++++++ .../cms/plugins/faults/StepException.java | 2 +- .../reports/DocumentHandlingReport.java | 55 +++++++++++++++++++ .../plugins/reports/EventExecutionReport.java | 7 +-- .../reports/MaterializationReport.java | 5 +- .../cms/plugins/reports/Report.java | 8 +++ .../plugins/reports/StepExecutionReport.java | 6 +- 10 files changed, 95 insertions(+), 16 deletions(-) create mode 100644 cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/PluginExecutionException.java create mode 100644 cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/DocumentHandlingReport.java diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/EventException.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/EventException.java index f80cea8..cc89b52 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/EventException.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/EventException.java @@ -1,6 +1,6 @@ package org.gcube.application.cms.plugins.faults; -public class EventException extends Exception{ +public class EventException extends PluginExecutionException{ public EventException() { } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/InitializationException.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/InitializationException.java index 177e5d6..131c23e 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/InitializationException.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/InitializationException.java @@ -1,6 +1,6 @@ package org.gcube.application.cms.plugins.faults; -public class InitializationException extends Exception{ +public class InitializationException extends PluginExecutionException{ public InitializationException() { } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/MaterializationException.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/MaterializationException.java index b1127f9..35760af 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/MaterializationException.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/MaterializationException.java @@ -1,6 +1,6 @@ package org.gcube.application.cms.plugins.faults; -public class MaterializationException extends Exception { +public class MaterializationException extends PluginExecutionException { public MaterializationException() { } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/PluginExecutionException.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/PluginExecutionException.java new file mode 100644 index 0000000..7078cb6 --- /dev/null +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/PluginExecutionException.java @@ -0,0 +1,22 @@ +package org.gcube.application.cms.plugins.faults; + +public class PluginExecutionException extends Exception{ + public PluginExecutionException() { + } + + public PluginExecutionException(String message) { + super(message); + } + + public PluginExecutionException(String message, Throwable cause) { + super(message, cause); + } + + public PluginExecutionException(Throwable cause) { + super(cause); + } + + public PluginExecutionException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } +} diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/StepException.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/StepException.java index 39e5302..893e5ee 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/StepException.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/faults/StepException.java @@ -1,6 +1,6 @@ package org.gcube.application.cms.plugins.faults; -public class StepException extends Exception { +public class StepException extends PluginExecutionException { public StepException() { } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/DocumentHandlingReport.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/DocumentHandlingReport.java new file mode 100644 index 0000000..0e1ed89 --- /dev/null +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/DocumentHandlingReport.java @@ -0,0 +1,55 @@ +package org.gcube.application.cms.plugins.reports; + +import com.fasterxml.jackson.core.JsonProcessingException; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.bson.Document; +import org.gcube.application.cms.plugins.faults.PluginExecutionException; +import org.gcube.application.cms.plugins.requests.BaseExecutionRequest; +import org.gcube.application.cms.serialization.Serialization; +import org.gcube.application.geoportal.common.model.document.ProfiledDocument; +import org.gcube.application.geoportal.common.model.document.lifecycle.LifecycleInformation; + + +@Data +@Slf4j +public class DocumentHandlingReport extends Report{ + + T theRequest; + Document resultingDocument; + LifecycleInformation toSetLifecycleInformation; + + public ProfiledDocument prepareResult() throws JsonProcessingException, PluginExecutionException { + log.trace("Preparing document ID {} from report ... ",theRequest.getDocument().get_id()); + this.validate(); + ProfiledDocument toReturn = theRequest.getDocument(); + if(resultingDocument !=null ) { + log.trace("Updating Document "); + toReturn.setTheDocument(resultingDocument); + } + if(toSetLifecycleInformation != null){ + log.trace("Merging lifecycleInformation"); + Document original = Serialization.asDocument(toReturn.getLifecycleInformation()); + Document toSet = Serialization.asDocument(toSetLifecycleInformation); + toSet.putAll(original); + toReturn.setLifecycleInformation(Serialization.convert(toSet,LifecycleInformation.class)); + } + log.trace("Report status is {} ",getStatus()); + LifecycleInformation info = toReturn.getLifecycleInformation(); + switch (getStatus()){ + case ERROR: { + info.setLastOperationStatus(LifecycleInformation.Status.ERROR); + this.getMessages().forEach(s -> info.addErrorMessage(s)); + break; + } + case WARNING:{ + info.setLastOperationStatus(LifecycleInformation.Status.WARNING); + this.getMessages().forEach(s -> info.addWarningMessage(s)); + break; + } + case OK: { + } + } + return toReturn; + } +} diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/EventExecutionReport.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/EventExecutionReport.java index 1a29078..8aed17a 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/EventExecutionReport.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/EventExecutionReport.java @@ -1,15 +1,12 @@ package org.gcube.application.cms.plugins.reports; +import com.fasterxml.jackson.core.JsonProcessingException; import lombok.Data; -import org.bson.Document; import org.gcube.application.cms.plugins.requests.EventExecutionRequest; import org.gcube.application.geoportal.common.model.document.ProfiledDocument; -import org.gcube.application.geoportal.common.model.profile.Profile; @Data -public class EventExecutionReport { +public class EventExecutionReport extends DocumentHandlingReport{ - private EventExecutionRequest request; - private ProfiledDocument result; } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/MaterializationReport.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/MaterializationReport.java index f52adcf..565472f 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/MaterializationReport.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/MaterializationReport.java @@ -1,11 +1,12 @@ package org.gcube.application.cms.plugins.reports; import lombok.Data; +import org.gcube.application.cms.plugins.requests.MaterializationRequest; import org.gcube.application.geoportal.common.model.document.ProfiledDocument; @Data -public class MaterializationReport extends Report{ +public class MaterializationReport extends DocumentHandlingReport{ + - private ProfiledDocument resultDocument; } 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 848f9e2..c79e28b 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 @@ -1,6 +1,7 @@ package org.gcube.application.cms.plugins.reports; import lombok.Data; +import org.gcube.application.cms.plugins.faults.PluginExecutionException; import java.util.ArrayList; import java.util.List; @@ -20,4 +21,11 @@ public class Report { messages.add(msg); return this; } + + public void validate()throws PluginExecutionException { + if(status == null) throw new PluginExecutionException("Status is null"); + if(!status.equals(Status.OK)) + if(messages==null || messages.isEmpty()) throw new PluginExecutionException("Messages are mandatory for status != OK "); + } + } diff --git a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/StepExecutionReport.java b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/StepExecutionReport.java index a6adeb8..214be56 100644 --- a/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/StepExecutionReport.java +++ b/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/StepExecutionReport.java @@ -8,11 +8,7 @@ import org.gcube.application.geoportal.common.model.document.ProfiledDocument; import java.util.List; @Data -public class StepExecutionReport { - - StepExecutionRequest request; - - ProfiledDocument result; +public class StepExecutionReport extends DocumentHandlingReport{ List toTriggerEvents;