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{