diff --git a/default-lc-managers/CHANGELOG.md b/default-lc-managers/CHANGELOG.md index 7c9afa5..184ecbe 100644 --- a/default-lc-managers/CHANGELOG.md +++ b/default-lc-managers/CHANGELOG.md @@ -1,9 +1,13 @@ # Changelog for org.gcube.application.cms.ckan-plugin +## [v1.1.0-SNAPSHOT] - 2023-02-23 + +- [#24570] Integrated the UnPublish operation + ## [v1.0.1] - 2023-01-10 - Pom updates -- ## [v1.0.0] - 2022-02-24 +## [v1.0.0] - 2022-02-24 - First release This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). diff --git a/default-lc-managers/pom.xml b/default-lc-managers/pom.xml index 3d3ac25..863f9ae 100644 --- a/default-lc-managers/pom.xml +++ b/default-lc-managers/pom.xml @@ -5,7 +5,7 @@ 4.0.0 default-lc-managers - 1.0.1 + 1.1.0-SNAPSHOT gCube CMS - Default LC Managers diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractLifeCycleManager.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractLifeCycleManager.java index faddf7d..f54a53e 100644 --- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractLifeCycleManager.java +++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractLifeCycleManager.java @@ -1,12 +1,22 @@ package org.gcube.application.cms.plugins.implementations; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; +import java.util.HashMap; +import java.util.Map; + import org.gcube.application.cms.implementations.ProjectAccess; import org.gcube.application.cms.implementations.utils.UserUtils; import org.gcube.application.cms.plugins.LifecycleManager; import org.gcube.application.cms.plugins.PluginManagerInterface; -import org.gcube.application.cms.plugins.faults.*; +import org.gcube.application.cms.plugins.faults.EventException; +import org.gcube.application.cms.plugins.faults.InitializationException; +import org.gcube.application.cms.plugins.faults.InsufficientPrivileges; +import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException; +import org.gcube.application.cms.plugins.faults.InvalidProfileException; +import org.gcube.application.cms.plugins.faults.MaterializationException; +import org.gcube.application.cms.plugins.faults.ShutDownException; +import org.gcube.application.cms.plugins.faults.StepException; +import org.gcube.application.cms.plugins.faults.UnrecognizedEventException; +import org.gcube.application.cms.plugins.faults.UnrecognizedStepException; import org.gcube.application.cms.plugins.implementations.executions.GuardedEventManager; import org.gcube.application.cms.plugins.implementations.executions.GuardedStepExecution; import org.gcube.application.cms.plugins.reports.EventExecutionReport; @@ -25,10 +35,9 @@ import org.gcube.application.geoportal.common.model.plugins.OperationDescriptor; import org.gcube.application.geoportal.common.model.plugins.PluginDescriptor; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration; -import org.gcube.application.geoportal.common.utils.ContextUtils; -import java.util.HashMap; -import java.util.Map; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; @Slf4j public abstract class AbstractLifeCycleManager extends AbstractPlugin implements LifecycleManager { diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractPlugin.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractPlugin.java index c0fe6d7..5bee548 100644 --- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractPlugin.java +++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/AbstractPlugin.java @@ -1,13 +1,13 @@ package org.gcube.application.cms.plugins.implementations; +import java.util.List; +import java.util.Map; + import org.gcube.application.cms.plugins.Plugin; import org.gcube.application.cms.plugins.faults.InvalidProfileException; import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration; import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; -import java.util.List; -import java.util.Map; - public abstract class AbstractPlugin implements Plugin { diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/Default3PhaseManager.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/Default3PhaseManager.java index f27c8ad..ac9e275 100644 --- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/Default3PhaseManager.java +++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/Default3PhaseManager.java @@ -1,7 +1,7 @@ package org.gcube.application.cms.plugins.implementations; -import com.vdurmont.semver4j.Semver; -import lombok.extern.slf4j.Slf4j; +import java.util.Collections; + import org.bson.Document; import org.gcube.application.cms.plugins.IndexerPluginInterface; import org.gcube.application.cms.plugins.LifecycleManager; @@ -20,14 +20,16 @@ import org.gcube.application.geoportal.common.model.plugins.OperationDescriptor; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.common.utils.Files; -import java.util.Collections; +import com.vdurmont.semver4j.Semver; + +import lombok.extern.slf4j.Slf4j; @Slf4j public class Default3PhaseManager extends SimpleLifeCycleManager implements LifecycleManager { protected static class Phases { public static final String PENDING_APPROVAL="Pending Approval"; - public static final String PUBLISHED="Published"; + public static final String PUBLISHED=SimpleLifeCycleManager.Phases.PUBLISHED; } @@ -92,6 +94,9 @@ public class Default3PhaseManager extends SimpleLifeCycleManager implements Life return executeReject(theReport); } }); + + //Updated by Francesco + setStep(super.unPublishStep()); } public Default3PhaseManager() { diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/RoleManager.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/RoleManager.java index ad5db3f..1d30152 100644 --- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/RoleManager.java +++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/RoleManager.java @@ -1,16 +1,23 @@ package org.gcube.application.cms.plugins.implementations; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.*; -import lombok.extern.slf4j.Slf4j; +import java.util.HashMap; +import java.util.List; + +import javax.xml.bind.annotation.XmlRootElement; + import org.gcube.application.cms.serialization.Serialization; import org.gcube.application.geoportal.common.model.document.accounting.User; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration; -import javax.xml.bind.annotation.XmlRootElement; -import java.util.HashMap; -import java.util.List; +import com.fasterxml.jackson.annotation.JsonProperty; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; @Slf4j @ToString diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/SimpleLifeCycleManager.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/SimpleLifeCycleManager.java index e9e36f5..7d25e96 100644 --- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/SimpleLifeCycleManager.java +++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/SimpleLifeCycleManager.java @@ -1,6 +1,9 @@ package org.gcube.application.cms.plugins.implementations; -import lombok.extern.slf4j.Slf4j; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + import org.bson.Document; import org.gcube.application.cms.plugins.IndexerPluginInterface; import org.gcube.application.cms.plugins.LifecycleManager; @@ -10,7 +13,12 @@ import org.gcube.application.cms.plugins.faults.IndexingException; import org.gcube.application.cms.plugins.faults.InvalidPluginRequestException; import org.gcube.application.cms.plugins.faults.MaterializationException; import org.gcube.application.cms.plugins.implementations.executions.GuardedStepExecution; -import org.gcube.application.cms.plugins.reports.*; +import org.gcube.application.cms.plugins.reports.DocumentHandlingReport; +import org.gcube.application.cms.plugins.reports.EventExecutionReport; +import org.gcube.application.cms.plugins.reports.IndexDocumentReport; +import org.gcube.application.cms.plugins.reports.MaterializationReport; +import org.gcube.application.cms.plugins.reports.Report; +import org.gcube.application.cms.plugins.reports.StepExecutionReport; import org.gcube.application.cms.plugins.requests.BaseExecutionRequest; import org.gcube.application.cms.plugins.requests.BaseRequest; import org.gcube.application.cms.plugins.requests.IndexDocumentRequest; @@ -28,9 +36,7 @@ import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDec import org.gcube.application.geoportal.common.model.useCaseDescriptor.UseCaseDescriptor; import org.gcube.application.geoportal.common.utils.Files; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import lombok.extern.slf4j.Slf4j; @Slf4j public class SimpleLifeCycleManager extends AbstractLifeCycleManager implements LifecycleManager { @@ -41,14 +47,22 @@ public class SimpleLifeCycleManager extends AbstractLifeCycleManager implements public SimpleLifeCycleManager() { DESCRIPTOR.setId(PLUGIN_ID); } + + //Updated by Francesco + protected static class Phases { + public static final String PUBLISHED="Published"; + public static final String UNPUBLISHED="UnPublished"; + } - + //Updated by Francesco private static class Steps { public static final OperationDescriptor PUBLISH = new OperationDescriptor("PUBLISH","Materialize & index project"); + public static final OperationDescriptor UNPUBLISH = new OperationDescriptor("UNPUBLISH","UnPublish the project. DeMaterialize and DeIndex the project"); static{ PUBLISH.setAppliableToPhases(Collections.singletonList(LifecycleInformation.CommonPhases.DRAFT_PHASE)); + UNPUBLISH.setAppliableToPhases(Collections.singletonList(Phases.PUBLISHED)); } } @@ -112,11 +126,48 @@ public class SimpleLifeCycleManager extends AbstractLifeCycleManager implements theReport = index(theReport,indexer,getPublicIndexParams(theReport.getTheRequest())); // setPhase if(theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK)) - theReport.getToSetLifecycleInformation().setPhase("PUBLISHED"); + //TODO CHANGED THE SET PHASE ID + //theReport.getToSetLifecycleInformation().setPhase("PUBLISHED"); + theReport.getToSetLifecycleInformation().setPhase(Phases.PUBLISHED); } return theReport; } }); + + setStep(unPublishStep()); + } + + //Updated by Francesco + protected GuardedStepExecution unPublishStep() { + + return new GuardedStepExecution(Steps.UNPUBLISH) { + @Override + protected StepExecutionReport run() throws Exception { + + //DeMaterialize + JSONPathWrapper wrapper = new JSONPathWrapper(theReport.getTheRequest().getDocument().getTheDocument().toJson()); + for (String s : wrapper.getMatchingPaths("$..[?(@." + RegisteredFileSet.PAYLOADS + ")]")){ + log.info("Requesting dematerialization for {} ",s); + for(MaterializationPlugin mat : getMaterializers(theReport.getTheRequest())) + theReport = deMaterialize(theReport,mat,new Document("fileSetPath",s)); + if(!theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK)) + break; + } + //DeIndex + if(theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK)) { + for(IndexerPluginInterface indexer : getIndexers(theReport.getTheRequest())) { + log.info("Requesting deindexing for {} ",indexer.getDescriptor()); + theReport = deIndex(theReport,indexer,getPublicIndexParams(theReport.getTheRequest())); + } + } + + if(theReport.getToSetLifecycleInformation().getLastOperationStatus().equals(LifecycleInformation.Status.OK)) + theReport.getToSetLifecycleInformation().setPhase(LifecycleInformation.CommonPhases.DRAFT_PHASE); + + + return theReport; + } + }; } protected void blockNonDraft(EventExecutionReport report) throws InvalidPluginRequestException { diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedEventManager.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedEventManager.java index eabc58c..4239382 100644 --- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedEventManager.java +++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedEventManager.java @@ -1,11 +1,12 @@ package org.gcube.application.cms.plugins.implementations.executions; -import lombok.NonNull; -import lombok.extern.slf4j.Slf4j; import org.gcube.application.cms.plugins.reports.EventExecutionReport; import org.gcube.application.cms.plugins.requests.EventExecutionRequest; import org.gcube.application.geoportal.common.model.plugins.OperationDescriptor; +import lombok.NonNull; +import lombok.extern.slf4j.Slf4j; + @Slf4j public abstract class GuardedEventManager extends GuardedExecution{ diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedExecution.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedExecution.java index 6d73209..2321da6 100644 --- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedExecution.java +++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedExecution.java @@ -1,9 +1,5 @@ package org.gcube.application.cms.plugins.implementations.executions; -import lombok.Getter; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; import org.gcube.application.cms.plugins.faults.InsufficientPrivileges; import org.gcube.application.cms.plugins.faults.StepException; import org.gcube.application.cms.plugins.reports.DocumentHandlingReport; @@ -12,6 +8,11 @@ import org.gcube.application.geoportal.common.model.plugins.OperationDescriptor; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration; +import lombok.Getter; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + @Slf4j @RequiredArgsConstructor diff --git a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedStepExecution.java b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedStepExecution.java index ab58540..32ccc8e 100644 --- a/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedStepExecution.java +++ b/default-lc-managers/src/main/java/org/gcube/application/cms/plugins/implementations/executions/GuardedStepExecution.java @@ -1,13 +1,14 @@ package org.gcube.application.cms.plugins.implementations.executions; -import org.gcube.application.cms.plugins.implementations.RoleManager; -import lombok.NonNull; import org.gcube.application.cms.plugins.faults.InsufficientPrivileges; +import org.gcube.application.cms.plugins.implementations.RoleManager; import org.gcube.application.cms.plugins.reports.StepExecutionReport; import org.gcube.application.cms.plugins.requests.StepExecutionRequest; import org.gcube.application.geoportal.common.model.plugins.OperationDescriptor; import org.gcube.application.geoportal.common.model.rest.ConfigurationException; +import lombok.NonNull; + public abstract class GuardedStepExecution extends GuardedExecution{