gcube-cms-suite/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/reports/DocumentHandlingReport.java

79 lines
3.0 KiB
Java
Raw Normal View History

2022-02-17 14:47:51 +01:00
package org.gcube.application.cms.plugins.reports;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.Data;
2022-02-23 17:13:22 +01:00
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
2022-02-17 14:47:51 +01:00
import lombok.extern.slf4j.Slf4j;
import org.bson.Document;
2022-03-04 11:30:11 +01:00
import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException;
2022-02-17 14:47:51 +01:00
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
2022-02-23 17:13:22 +01:00
2022-02-17 14:47:51 +01:00
@Slf4j
public class DocumentHandlingReport<T extends BaseExecutionRequest> extends Report{
2022-02-23 17:13:22 +01:00
@NonNull
2022-02-17 14:47:51 +01:00
T theRequest;
Document resultingDocument;
LifecycleInformation toSetLifecycleInformation;
2022-02-23 17:13:22 +01:00
2022-03-04 11:30:11 +01:00
public DocumentHandlingReport(@NonNull T theRequest) throws InvalidPluginRequestException {
theRequest.validate();
2022-02-23 17:13:22 +01:00
this.theRequest = theRequest;
2022-02-24 18:09:30 +01:00
toSetLifecycleInformation=theRequest.getDocument().getLifecycleInformation();
2022-02-23 17:13:22 +01:00
resultingDocument = theRequest.getDocument().getTheDocument();
}
@Override
public void validate() throws PluginExecutionException {
super.validate();
if (resultingDocument==null) {
log.warn("NULL resulting document in report {} ", this);
throw new PluginExecutionException("Invalid report : Resulting document cannot be null");
}
if(toSetLifecycleInformation == null) {
log.warn("NULL lifecycleinformation in report {} ",this);
throw new PluginExecutionException("Invalid report : Lifecycle information cannot be null");
}
}
2022-02-17 14:47:51 +01:00
public ProfiledDocument prepareResult() throws JsonProcessingException, PluginExecutionException {
2022-02-23 17:13:22 +01:00
log.trace("Preparing document ID {} from report ... ",theRequest.getDocument().getId());
2022-02-17 14:47:51 +01:00
this.validate();
2022-02-23 17:13:22 +01:00
2022-02-17 14:47:51 +01:00
ProfiledDocument toReturn = theRequest.getDocument();
2022-02-23 17:13:22 +01:00
toReturn.setTheDocument(resultingDocument);
toReturn.setLifecycleInformation(toSetLifecycleInformation);
2022-02-17 16:01:05 +01:00
// Force Report status into info
2022-02-17 14:47:51 +01:00
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: {
2022-02-17 16:01:05 +01:00
if(info.getLastOperationStatus()==null)
info.setLastOperationStatus(LifecycleInformation.Status.OK);
break;
2022-02-17 14:47:51 +01:00
}
}
return toReturn;
}
}