From 9b7a08d66b56a50bfd6ec3071fca7a3b1e6ae314 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 4 Oct 2022 14:27:26 +0200 Subject: [PATCH] Allowing Catalogue-Managers to keep Moderation Extra Properties --- .../gcat/persistence/ckan/CKANPackage.java | 63 +++++++++++++------ 1 file changed, 45 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java index 1629cab..7fe4119 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java @@ -17,6 +17,7 @@ import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.NotAllowedException; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.UriInfo; import org.apache.http.MethodNotSupportedException; import org.gcube.com.fasterxml.jackson.databind.JsonNode; @@ -129,6 +130,17 @@ public class CKANPackage extends CKAN implements Moderated { protected ModerationThread moderationThread; + /** + * By default extra properties used for moderation are removed + * from the item representation. + * So that, the default value of this field is false. + * + * A Catalogue-Manager can request to keep such properties + * for debugging purposes. + * + */ + protected boolean keepModerationExtraProperties; + public CKANPackage() { super(); @@ -146,9 +158,17 @@ public class CKANPackage extends CKAN implements Moderated { ckanUser = CKANUserCache.getCurrrentCKANUser(); updateOperation = false; + keepModerationExtraProperties = true; } - + + public void setKeepModerationExtraProperties(boolean keepModerationExtraProperties) { + if(ckanUser.getRole().ordinal()>=Role.MANAGER.ordinal() && keepModerationExtraProperties) { + this.keepModerationExtraProperties = keepModerationExtraProperties; + } + + } + protected CKANOrganization checkGotOrganization(String gotOrganization) throws ForbiddenException { if(!configuration.getSupportedOrganizations().contains(gotOrganization)) { String error = String.format( @@ -192,24 +212,28 @@ public class CKANPackage extends CKAN implements Moderated { // Removing all Content Moderation Keys if(jsonNode.has(EXTRAS_KEY)) { - ArrayNode extras = (ArrayNode) jsonNode.get(EXTRAS_KEY); - // It is not possible to remove the element of an array while iterating it. - // We need to create a new array only with valie elements; - ArrayNode newExtras = mapper.createArrayNode(); - boolean foundOne = false; - for(int i=0; i=Role.MANAGER.ordinal() && keepModerationExtraProperties) { + logger.trace("The user is a {} which requested to keep Moderation extra properties.", ckanUser.getRole()); + }else { + ArrayNode extras = (ArrayNode) jsonNode.get(EXTRAS_KEY); + // It is not possible to remove the element of an array while iterating it. + // We need to create a new array only with valid elements; + ArrayNode newExtras = mapper.createArrayNode(); + boolean foundOne = false; + for(int i=0; i