From 9a0d96574590aeafe6ad5f965a8b6b3a98906745 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Mon, 4 Apr 2022 18:12:31 +0200 Subject: [PATCH 1/9] Fixing moderation message --- .../gcat/moderation/thread/ModerationThread.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/gcube/gcat/moderation/thread/ModerationThread.java b/src/main/java/org/gcube/gcat/moderation/thread/ModerationThread.java index a3a5949..3018e02 100644 --- a/src/main/java/org/gcube/gcat/moderation/thread/ModerationThread.java +++ b/src/main/java/org/gcube/gcat/moderation/thread/ModerationThread.java @@ -58,9 +58,9 @@ public abstract class ModerationThread { createModerationThread(); String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.PENDING; -// String message = String.format("@**%s** has created the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", +// String message = String.format("@**%s** created the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", // username, itemName, itemID, cmItemStatus.getFancyValue()); - String message = String.format("%s has created the item with name '%s' (id='%s'). The item is now in %s state and must be moderated.", + String message = String.format("%s created the item with name '%s' (id='%s'). The item is now in %s state and must be moderated.", fullName, itemName, itemID, cmItemStatus.getFancyValue()); postMessage(cmItemStatus, message); } @@ -68,9 +68,9 @@ public abstract class ModerationThread { public void postItemUpdated() throws Exception { String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.PENDING; -// String message = String.format("@**%s** has updated the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", +// String message = String.format("@**%s** updated the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", // username, itemName, itemID, cmItemStatus.getFancyValue()); - String message = String.format("%s has updated the item with name '%s' (id='%s'). The item is now in %s state and must be moderated.", + String message = String.format("%s updated the item with name '%s' (id='%s'). The item is now in %s state and must be moderated.", fullName, itemName, itemID, cmItemStatus.getFancyValue(), itemURL); postMessage(cmItemStatus, message); } @@ -78,9 +78,9 @@ public abstract class ModerationThread { public void postItemRejected(String userMessage) throws Exception { String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.REJECTED; -// String message = String.format("@**%s** has **%s** the item with name '%s' (id='%s'). The author can delete the item or update it to try to meet moderators requests if any.", +// String message = String.format("@**%s** **%s** the item with name '%s' (id='%s'). The author can delete the item or update it to try to meet moderators requests if any.", // username, cmItemStatus.getFancyValue(), itemName, itemID,); - String message = String.format("%s has %s the item with name '%s' (id='%s'). The author can delete the item or update it to try to meet moderators requests if any.", + String message = String.format("%s %s the item with name '%s' (id='%s'). The author can delete the item or update it to try to meet moderators requests if any.", fullName, cmItemStatus.getFancyValue(), itemName, itemID); postMessage(cmItemStatus, message); postUserMessage(cmItemStatus, userMessage); @@ -89,9 +89,9 @@ public abstract class ModerationThread { public void postItemApproved(String userMessage) throws Exception{ String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.APPROVED; -// String message = String.format("@**%s** has **%s** the item with name '%s' (id='%s'). The item is now available in the catalogue. The item is available at %s", +// String message = String.format("@**%s** **%s** the item with name '%s' (id='%s'). The item is now available in the catalogue. The item is available at %s", // username, cmItemStatus.getFancyValue(), itemName, itemID, itemURL); - String message = String.format("%s has %s the item with name '%s' (id='%s'). The item is now available in the catalogue. The item is available at %s", + String message = String.format("%s %s the item with name '%s' (id='%s'). The item is now available in the catalogue. The item is available at %s", fullName, cmItemStatus.getFancyValue(), itemName, itemID, itemURL); postMessage(cmItemStatus, message); postUserMessage(cmItemStatus, userMessage); From cceed61fba652d6af3827f7515e3573bd241f549 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 5 Apr 2022 17:32:03 +0200 Subject: [PATCH 2/9] Added authorship in the class --- src/main/java/org/gcube/gcat/annotation/PATCH.java | 3 +++ src/main/java/org/gcube/gcat/annotation/PURGE.java | 3 +++ .../java/org/gcube/gcat/persistence/ckan/CKANPackageTrash.java | 3 +++ .../java/org/gcube/gcat/persistence/ckan/CKANUserCache.java | 3 +++ src/main/java/org/gcube/gcat/profile/ISProfile.java | 3 +++ src/main/java/org/gcube/gcat/profile/MetadataUtility.java | 3 +++ .../java/org/gcube/gcat/profile/ResourceRegistryProfile.java | 3 +++ src/main/java/org/gcube/gcat/rest/BaseREST.java | 3 +++ src/main/java/org/gcube/gcat/rest/REST.java | 3 +++ src/main/java/org/gcube/gcat/rest/RequestFilter.java | 3 +++ src/main/java/org/gcube/gcat/social/Message.java | 2 +- src/main/java/org/gcube/gcat/social/SocialUsers.java | 3 +++ src/main/java/org/gcube/gcat/utils/HTTPCall.java | 3 +++ src/main/java/org/gcube/gcat/utils/HTTPUtility.java | 3 +++ src/main/java/org/gcube/gcat/utils/RandomString.java | 1 + src/main/java/org/gcube/gcat/utils/URIResolver.java | 3 +++ src/main/java/org/gcube/gcat/workspace/CatalogueMetadata.java | 3 +++ .../gcube/gcat/workspace/CatalogueStorageHubManagement.java | 3 +++ 18 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/gcube/gcat/annotation/PATCH.java b/src/main/java/org/gcube/gcat/annotation/PATCH.java index 0520379..e86d828 100644 --- a/src/main/java/org/gcube/gcat/annotation/PATCH.java +++ b/src/main/java/org/gcube/gcat/annotation/PATCH.java @@ -7,6 +7,9 @@ import java.lang.annotation.Target; import javax.ws.rs.HttpMethod; +/** + * @author Luca Frosini (ISTI - CNR) + */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @HttpMethod("PATCH") diff --git a/src/main/java/org/gcube/gcat/annotation/PURGE.java b/src/main/java/org/gcube/gcat/annotation/PURGE.java index 39ae4dd..dc2c2b4 100644 --- a/src/main/java/org/gcube/gcat/annotation/PURGE.java +++ b/src/main/java/org/gcube/gcat/annotation/PURGE.java @@ -7,6 +7,9 @@ import java.lang.annotation.Target; import javax.ws.rs.HttpMethod; +/** + * @author Luca Frosini (ISTI - CNR) + */ @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @HttpMethod("PURGE") diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackageTrash.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackageTrash.java index 42c017a..dc3de82 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackageTrash.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackageTrash.java @@ -21,6 +21,9 @@ import org.postgresql.core.Utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class CKANPackageTrash { protected static final Logger logger = LoggerFactory.getLogger(CKANPackageTrash.class); diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java index 264e519..e4f06ec 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANUserCache.java @@ -15,6 +15,9 @@ import javax.cache.spi.CachingProvider; import org.gcube.common.authorization.utils.manager.SecretManager; import org.gcube.common.authorization.utils.manager.SecretManagerProvider; +/** + * @author Luca Frosini (ISTI - CNR) + */ public abstract class CKANUserCache { private static final CacheManager cacheManager; diff --git a/src/main/java/org/gcube/gcat/profile/ISProfile.java b/src/main/java/org/gcube/gcat/profile/ISProfile.java index 2a55f14..3108869 100644 --- a/src/main/java/org/gcube/gcat/profile/ISProfile.java +++ b/src/main/java/org/gcube/gcat/profile/ISProfile.java @@ -32,6 +32,9 @@ import org.xml.sax.SAXException; import org.gcube.com.fasterxml.jackson.databind.ObjectMapper; import org.gcube.com.fasterxml.jackson.databind.node.ArrayNode; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class ISProfile { public static int PRETTY_PRINT_INDENT_FACTOR = 4; diff --git a/src/main/java/org/gcube/gcat/profile/MetadataUtility.java b/src/main/java/org/gcube/gcat/profile/MetadataUtility.java index 1224ec8..8de907e 100644 --- a/src/main/java/org/gcube/gcat/profile/MetadataUtility.java +++ b/src/main/java/org/gcube/gcat/profile/MetadataUtility.java @@ -14,6 +14,9 @@ import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.MetadataFormat; import org.gcube.datacatalogue.metadatadiscovery.bean.jaxb.NamespaceCategory; import org.xml.sax.SAXException; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class MetadataUtility { private DataCalogueMetadataFormatReader dataCalogueMetadataFormatReader; diff --git a/src/main/java/org/gcube/gcat/profile/ResourceRegistryProfile.java b/src/main/java/org/gcube/gcat/profile/ResourceRegistryProfile.java index 2ee1de3..0dda05a 100644 --- a/src/main/java/org/gcube/gcat/profile/ResourceRegistryProfile.java +++ b/src/main/java/org/gcube/gcat/profile/ResourceRegistryProfile.java @@ -46,6 +46,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xml.sax.SAXException; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class ResourceRegistryProfile { public static int PRETTY_PRINT_INDENT_FACTOR = 4; diff --git a/src/main/java/org/gcube/gcat/rest/BaseREST.java b/src/main/java/org/gcube/gcat/rest/BaseREST.java index 91bc7ac..ade959b 100644 --- a/src/main/java/org/gcube/gcat/rest/BaseREST.java +++ b/src/main/java/org/gcube/gcat/rest/BaseREST.java @@ -9,6 +9,9 @@ import org.gcube.gcat.api.GCatConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class BaseREST { private final Logger logger = LoggerFactory.getLogger(this.getClass()); diff --git a/src/main/java/org/gcube/gcat/rest/REST.java b/src/main/java/org/gcube/gcat/rest/REST.java index fe27162..bd11ec5 100644 --- a/src/main/java/org/gcube/gcat/rest/REST.java +++ b/src/main/java/org/gcube/gcat/rest/REST.java @@ -9,6 +9,9 @@ import org.gcube.gcat.api.GCatConstants; import org.gcube.gcat.api.interfaces.CRUD; import org.gcube.gcat.persistence.ckan.CKAN; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class REST extends BaseREST implements CRUD { protected final String COLLECTION_PARAMETER; diff --git a/src/main/java/org/gcube/gcat/rest/RequestFilter.java b/src/main/java/org/gcube/gcat/rest/RequestFilter.java index 66c5fa2..ca7b988 100644 --- a/src/main/java/org/gcube/gcat/rest/RequestFilter.java +++ b/src/main/java/org/gcube/gcat/rest/RequestFilter.java @@ -19,6 +19,9 @@ import org.gcube.common.authorization.utils.secret.Secret; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @author Luca Frosini (ISTI - CNR) + */ @Provider @PreMatching public class RequestFilter implements ContainerRequestFilter, ContainerResponseFilter { diff --git a/src/main/java/org/gcube/gcat/social/Message.java b/src/main/java/org/gcube/gcat/social/Message.java index cb4cf20..a5daf87 100644 --- a/src/main/java/org/gcube/gcat/social/Message.java +++ b/src/main/java/org/gcube/gcat/social/Message.java @@ -9,7 +9,7 @@ import org.gcube.com.fasterxml.jackson.annotation.JsonIgnore; import org.gcube.com.fasterxml.jackson.annotation.JsonProperty; /** - * @author Luca Frosini (ISTI-CNR) + * @author Luca Frosini (ISTI - CNR) */ public class Message { diff --git a/src/main/java/org/gcube/gcat/social/SocialUsers.java b/src/main/java/org/gcube/gcat/social/SocialUsers.java index 54b77db..a2f3cd3 100644 --- a/src/main/java/org/gcube/gcat/social/SocialUsers.java +++ b/src/main/java/org/gcube/gcat/social/SocialUsers.java @@ -13,6 +13,9 @@ import org.gcube.common.authorization.utils.socialservice.SocialService; import org.gcube.common.gxhttp.request.GXHTTPStringRequest; import org.gcube.gcat.utils.HTTPUtility; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class SocialUsers { protected static final String GET_USERNAMES_BY_ROLE = "2/users/get-usernames-by-role"; diff --git a/src/main/java/org/gcube/gcat/utils/HTTPCall.java b/src/main/java/org/gcube/gcat/utils/HTTPCall.java index 9be434c..dfc0d57 100644 --- a/src/main/java/org/gcube/gcat/utils/HTTPCall.java +++ b/src/main/java/org/gcube/gcat/utils/HTTPCall.java @@ -9,6 +9,9 @@ import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response.Status; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class HTTPCall { protected static final String USER_AGENT_KEY = "User-Agent"; diff --git a/src/main/java/org/gcube/gcat/utils/HTTPUtility.java b/src/main/java/org/gcube/gcat/utils/HTTPUtility.java index 5bedb90..1c93735 100644 --- a/src/main/java/org/gcube/gcat/utils/HTTPUtility.java +++ b/src/main/java/org/gcube/gcat/utils/HTTPUtility.java @@ -16,6 +16,9 @@ import org.gcube.common.gxhttp.request.GXHTTPStringRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class HTTPUtility { private static final Logger logger = LoggerFactory.getLogger(HTTPUtility.class); diff --git a/src/main/java/org/gcube/gcat/utils/RandomString.java b/src/main/java/org/gcube/gcat/utils/RandomString.java index 4eef60c..8077878 100644 --- a/src/main/java/org/gcube/gcat/utils/RandomString.java +++ b/src/main/java/org/gcube/gcat/utils/RandomString.java @@ -4,6 +4,7 @@ import java.util.Random; /** * @author Lucio Lelii (ISTI - CNR) + * @author Luca Frosini (ISTI - CNR) */ public class RandomString { diff --git a/src/main/java/org/gcube/gcat/utils/URIResolver.java b/src/main/java/org/gcube/gcat/utils/URIResolver.java index cb5861b..3b270a4 100644 --- a/src/main/java/org/gcube/gcat/utils/URIResolver.java +++ b/src/main/java/org/gcube/gcat/utils/URIResolver.java @@ -8,6 +8,9 @@ import javax.ws.rs.WebApplicationException; import org.gcube.common.authorization.utils.manager.SecretManagerProvider; import org.gcube.portlets.user.uriresolvermanager.UriResolverManager; +/** + * @author Luca Frosini (ISTI - CNR) + */ public abstract class URIResolver { private static final String CATALOGUE_CONTEXT = "gcube_scope"; diff --git a/src/main/java/org/gcube/gcat/workspace/CatalogueMetadata.java b/src/main/java/org/gcube/gcat/workspace/CatalogueMetadata.java index cbbdfe8..5468325 100644 --- a/src/main/java/org/gcube/gcat/workspace/CatalogueMetadata.java +++ b/src/main/java/org/gcube/gcat/workspace/CatalogueMetadata.java @@ -7,6 +7,9 @@ import java.util.Map; import org.gcube.common.storagehub.model.Metadata; import org.gcube.storagehub.MetadataMatcher; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class CatalogueMetadata implements MetadataMatcher { public static final String ORIGINAL_URL = "OriginalURL"; diff --git a/src/main/java/org/gcube/gcat/workspace/CatalogueStorageHubManagement.java b/src/main/java/org/gcube/gcat/workspace/CatalogueStorageHubManagement.java index 8d7afe4..8ae7ffa 100644 --- a/src/main/java/org/gcube/gcat/workspace/CatalogueStorageHubManagement.java +++ b/src/main/java/org/gcube/gcat/workspace/CatalogueStorageHubManagement.java @@ -16,6 +16,9 @@ import org.glassfish.jersey.media.multipart.ContentDisposition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @author Luca Frosini (ISTI - CNR) + */ public class CatalogueStorageHubManagement { private static final Logger logger = LoggerFactory.getLogger(CatalogueStorageHubManagement.class); From bd5eaf50f682e5d5a57a53b73c5a17eae1223bed Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 6 Apr 2022 11:22:20 +0200 Subject: [PATCH 3/9] Added missing dependecy --- pom.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pom.xml b/pom.xml index a565ef3..b41b5ae 100644 --- a/pom.xml +++ b/pom.xml @@ -98,6 +98,15 @@ resource-registry-publisher provided + + org.gcube.resources + common-gcore-resources + provided + + + org.gcube.resources + registry-publisher + org.gcube.data-catalogue gcubedatacatalogue-metadata-discovery From a416de2886d79e09fbb35eee70cf89b38c93a1da Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 6 Apr 2022 11:24:50 +0200 Subject: [PATCH 4/9] Removed scope which is already declared in gcube-smartgears-bom --- pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pom.xml b/pom.xml index b41b5ae..ad8325f 100644 --- a/pom.xml +++ b/pom.xml @@ -81,27 +81,22 @@ org.gcube.information-system information-system-model - provided org.gcube.resource-management gcube-model - provided org.gcube.information-system resource-registry-client - provided org.gcube.information-system resource-registry-publisher - provided org.gcube.resources common-gcore-resources - provided org.gcube.resources From debc1330f763e4923a2e2b0de3dfc0d046418a34 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 6 Apr 2022 12:01:11 +0200 Subject: [PATCH 5/9] Fixed offset in package list --- src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 83292b0..661e6ea 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java @@ -365,7 +365,8 @@ public class CKANPackage extends CKAN implements Moderated { if(offset < 0) { offset = 0; } - parameters.put(START_KEY, String.valueOf(offset * limit)); + parameters.put(START_KEY, String.valueOf(offset)); + // parameters.put(START_KEY, String.valueOf(pageNumber * limit)); MultivaluedMap queryParameters = uriInfo.getQueryParameters(); parameters = checkListParameters(queryParameters, parameters); From d6fedec30e1e2337a523d72f094f24faa1d60549 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 6 Apr 2022 12:25:10 +0200 Subject: [PATCH 6/9] Fixed changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75a27b9..9241ac3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Migrated service to SecretManagerProvider [#22871] - Migrated to ServiceClass corresponding to Maven groupId - Added Enunciate to automatically create REST APIs documentation [#23096] +- Fixed offset behaviuor in item listing [#22999] ## [v2.1.0] From 2eb643f5000d4e6c7711825219986759bae02943 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 6 Apr 2022 12:31:07 +0200 Subject: [PATCH 7/9] Removed uneeded properties --- pom.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index ad8325f..83b081e 100644 --- a/pom.xml +++ b/pom.xml @@ -21,8 +21,6 @@ UTF-8 ${project.basedir}${file.separator}src${file.separator}main${file.separator}webapp${file.separator}WEB-INF - data-catalogue - 2.14.0 @@ -249,7 +247,7 @@ com.webcohesion.enunciate enunciate-maven-plugin - ${enunciate.version} + 2.14.0 assemble @@ -264,7 +262,6 @@ org.apache.maven.plugins maven-resources-plugin - 2.5 copy-enunciate-docs From 638be1483537f3261cd3357c5f70b821a958d648 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 6 Apr 2022 12:38:32 +0200 Subject: [PATCH 8/9] Fixed changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9241ac3..ee9b6ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,12 +5,13 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [v2.2.0-SNAPSHOT] - Switched gcat credentials to new IAM authz [#21628][#22727] -- Added support to manage configurations [#22658] +- Added support to manage configurations [#22658][#22742] - Migrated service to SecretManagerProvider [#22871] - Migrated to ServiceClass corresponding to Maven groupId - Added Enunciate to automatically create REST APIs documentation [#23096] - Fixed offset behaviuor in item listing [#22999] + ## [v2.1.0] - Added query parameter social_post_notification to override default VRE behaviour [#21345] From bcd6ee9bbe5b621485c69fe36a2c5cd35182b084 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Wed, 6 Apr 2022 17:15:46 +0200 Subject: [PATCH 9/9] Fixed messages --- CHANGELOG.md | 4 +- .../moderation/thread/ModerationThread.java | 33 +++-- .../social/SocialMessageModerationThread.java | 137 +++++++++++++++++- .../org/gcube/gcat/persistence/ckan/CKAN.java | 1 + .../gcat/persistence/ckan/CKANPackage.java | 47 +++--- .../gcat/moderation/ModerationThreadTest.java | 7 +- 6 files changed, 185 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee9b6ef..d9ea252 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Migrated to ServiceClass corresponding to Maven groupId - Added Enunciate to automatically create REST APIs documentation [#23096] - Fixed offset behaviuor in item listing [#22999] - +- Moderation message are sent using gcube messaging system via Social Service [#23117] ## [v2.1.0] @@ -26,7 +26,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ## [v2.0.0] [r5.2.0] - 2021-05-04 - Fixed retrieving of filename from content-disposition http header used to persist a resource [#21216] -- Fixed author and maintainer name and email [#21059] [#21189] +- Fixed author and maintainer name and email [#21059][#21189] - Improved check on controlled vocabulary to match corner cases [#20742] - Added PATCH method on Item collection [#19768] - Switched JSON management to gcube-jackson [#19735] diff --git a/src/main/java/org/gcube/gcat/moderation/thread/ModerationThread.java b/src/main/java/org/gcube/gcat/moderation/thread/ModerationThread.java index 3018e02..ef3f621 100644 --- a/src/main/java/org/gcube/gcat/moderation/thread/ModerationThread.java +++ b/src/main/java/org/gcube/gcat/moderation/thread/ModerationThread.java @@ -12,8 +12,11 @@ public abstract class ModerationThread { protected String itemID; protected String itemName; + protected String itemTitle; protected String itemURL; + protected boolean itemAuthor; + protected CKANUser ckanUser; protected ObjectMapper objectMapper; @@ -24,14 +27,24 @@ public abstract class ModerationThread { public ModerationThread() { this.objectMapper = new ObjectMapper(); + itemAuthor = false; } - public void setItemCoordinates(String itemID, String itemName, String itemURL) { + public void setItemCoordinates(String itemID, String itemName, String itemTitle, String itemURL) { this.itemID = itemID; this.itemName = itemName; + this.itemTitle = itemTitle; this.itemURL = itemURL; } + public boolean isItemAuthor() { + return itemAuthor; + } + + public void setItemAuthor(boolean itemAuthor) { + this.itemAuthor = itemAuthor; + } + public void setCKANUser(CKANUser ckanUser) { this.ckanUser = ckanUser; } @@ -58,9 +71,7 @@ public abstract class ModerationThread { createModerationThread(); String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.PENDING; -// String message = String.format("@**%s** created the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", -// username, itemName, itemID, cmItemStatus.getFancyValue()); - String message = String.format("%s created the item with name '%s' (id='%s'). The item is now in %s state and must be moderated.", + String message = String.format("@**%s** created the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", fullName, itemName, itemID, cmItemStatus.getFancyValue()); postMessage(cmItemStatus, message); } @@ -68,19 +79,15 @@ public abstract class ModerationThread { public void postItemUpdated() throws Exception { String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.PENDING; -// String message = String.format("@**%s** updated the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", -// username, itemName, itemID, cmItemStatus.getFancyValue()); - String message = String.format("%s updated the item with name '%s' (id='%s'). The item is now in %s state and must be moderated.", - fullName, itemName, itemID, cmItemStatus.getFancyValue(), itemURL); + String message = String.format("@**%s** updated the item with name '%s' (id='%s'). The item is now in **%s** state and must be moderated.", + fullName, itemName, itemID, cmItemStatus.getFancyValue()); postMessage(cmItemStatus, message); } public void postItemRejected(String userMessage) throws Exception { String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.REJECTED; -// String message = String.format("@**%s** **%s** the item with name '%s' (id='%s'). The author can delete the item or update it to try to meet moderators requests if any.", -// username, cmItemStatus.getFancyValue(), itemName, itemID,); - String message = String.format("%s %s the item with name '%s' (id='%s'). The author can delete the item or update it to try to meet moderators requests if any.", + String message = String.format("@**%s** **%s** the item with name '%s' (id='%s'). The author can delete the item or update it to try to meet moderators requests if any.", fullName, cmItemStatus.getFancyValue(), itemName, itemID); postMessage(cmItemStatus, message); postUserMessage(cmItemStatus, userMessage); @@ -89,9 +96,7 @@ public abstract class ModerationThread { public void postItemApproved(String userMessage) throws Exception{ String fullName = ckanUser.getNameSurname(); CMItemStatus cmItemStatus = CMItemStatus.APPROVED; -// String message = String.format("@**%s** **%s** the item with name '%s' (id='%s'). The item is now available in the catalogue. The item is available at %s", -// username, cmItemStatus.getFancyValue(), itemName, itemID, itemURL); - String message = String.format("%s %s the item with name '%s' (id='%s'). The item is now available in the catalogue. The item is available at %s", + String message = String.format("@**%s** **%s** the item with name '%s' (id='%s'). The item is now available in the catalogue. The item is available at %s", fullName, cmItemStatus.getFancyValue(), itemName, itemID, itemURL); postMessage(cmItemStatus, message); postUserMessage(cmItemStatus, userMessage); diff --git a/src/main/java/org/gcube/gcat/moderation/thread/social/SocialMessageModerationThread.java b/src/main/java/org/gcube/gcat/moderation/thread/social/SocialMessageModerationThread.java index 8234e9c..44b3e99 100644 --- a/src/main/java/org/gcube/gcat/moderation/thread/social/SocialMessageModerationThread.java +++ b/src/main/java/org/gcube/gcat/moderation/thread/social/SocialMessageModerationThread.java @@ -23,13 +23,124 @@ public class SocialMessageModerationThread extends ModerationThread { private static final Logger logger = LoggerFactory.getLogger(SocialMessageModerationThread.class); + protected StringBuffer getMainItemInfo(CMItemStatus cmItemStatus) { + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append("Status: "); + stringBuffer.append(cmItemStatus.getFancyValue()); + stringBuffer.append("\n"); + stringBuffer.append("Title: "); + stringBuffer.append(itemTitle); + stringBuffer.append("\n"); + stringBuffer.append("Name: "); + stringBuffer.append(itemName); + stringBuffer.append("\n"); + stringBuffer.append("ID: "); + stringBuffer.append(itemID); + stringBuffer.append("\n"); + stringBuffer.append("URL: "); + stringBuffer.append(itemURL); + stringBuffer.append("\n\n"); + return stringBuffer; + } + + public void postItemCreated() throws Exception{ + String fullName = ckanUser.getNameSurname(); + CMItemStatus cmItemStatus = CMItemStatus.PENDING; + StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); + + stringBuffer.append("Message:\n"); + stringBuffer.append(fullName); + stringBuffer.append(" created '"); + stringBuffer.append(itemTitle); + stringBuffer.append("'. It is now in "); + stringBuffer.append(cmItemStatus.getFancyValue()); + stringBuffer.append(" state and must be moderated."); + + postMessage(cmItemStatus, stringBuffer.toString()); + + } + + public void postItemUpdated() throws Exception { + String fullName = ckanUser.getNameSurname(); + CMItemStatus cmItemStatus = CMItemStatus.PENDING; + StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); + + stringBuffer.append("Message:\n"); + stringBuffer.append(fullName); + stringBuffer.append(" updated '"); + stringBuffer.append(itemTitle); + stringBuffer.append("'. It is now in "); + stringBuffer.append(cmItemStatus.getFancyValue()); + stringBuffer.append(" state and must be moderated."); + + postMessage(cmItemStatus, stringBuffer.toString()); + } + + protected StringBuffer addUserWithRole(String fullName, String role, StringBuffer stringBuffer) { + stringBuffer.append(fullName); + stringBuffer.append(" ["); + stringBuffer.append(role); + stringBuffer.append("] "); + return stringBuffer; + } + + public void postItemRejected(String userMessage) throws Exception { + String fullName = ckanUser.getNameSurname(); + CMItemStatus cmItemStatus = CMItemStatus.REJECTED; + + StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); + + stringBuffer.append("Message:\n"); + stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer); + stringBuffer.append("rejected '"); + stringBuffer.append(itemTitle); + stringBuffer.append("'."); + stringBuffer.append(" The author can delete or update it."); + + if(userMessage!=null && userMessage.length()>0) { + stringBuffer.append("\n\n"); + stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer); + stringBuffer.append("added the following comment:\n"); + stringBuffer.append(userMessage); + } + + postMessage(cmItemStatus, stringBuffer.toString()); + } + + public void postItemApproved(String userMessage) throws Exception{ + String fullName = ckanUser.getNameSurname(); + CMItemStatus cmItemStatus = CMItemStatus.APPROVED; + + StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); + + stringBuffer.append("Message:\n"); + stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer); + stringBuffer.append("approved the '"); + stringBuffer.append(itemTitle); + stringBuffer.append("'."); + stringBuffer.append(" It is now available in the catalogue at "); + stringBuffer.append(itemURL); + + if(userMessage!=null && userMessage.length()>0) { + stringBuffer.append("\n\n"); + stringBuffer = addUserWithRole(fullName, Moderated.CATALOGUE_MODERATOR, stringBuffer); + stringBuffer.append("added the following comment:\n"); + stringBuffer.append(userMessage); + } + + postMessage(cmItemStatus, stringBuffer.toString()); + } + + protected String getSubject(CMItemStatus cmItemStatus) { StringWriter stringWriter = new StringWriter(); + stringWriter.append("[Catalogue Service] "); + stringWriter.append(itemTitle); + stringWriter.append(" (name:"); stringWriter.append(itemName); - stringWriter.append(" (id:"); + stringWriter.append(" - id:"); stringWriter.append(itemID); - stringWriter.append(") - status:"); - stringWriter.append(cmItemStatus.getFancyValue()); + stringWriter.append(")"); return stringWriter.toString(); } @@ -59,10 +170,22 @@ public class SocialMessageModerationThread extends ModerationThread { @Override public void postUserMessage(CMItemStatus cmItemStatus, String userMessage) throws Exception { - Message message = getMessage(cmItemStatus, userMessage); - String itemAuthor = ckanUser.getEMail(); - message.addUser(itemAuthor); - sendMessage(message); + String fullName = ckanUser.getNameSurname(); + StringBuffer stringBuffer = getMainItemInfo(cmItemStatus); + stringBuffer = addUserWithRole(fullName, isItemAuthor() ? "Author" : Moderated.CATALOGUE_MODERATOR, stringBuffer); + stringBuffer.append("sent the following comment:\n"); + stringBuffer.append(userMessage); + Message message = getMessage(cmItemStatus, stringBuffer.toString()); + SecretManager secretManager = SecretManagerProvider.instance.get(); + String username = secretManager.getUser().getUsername(); + message.addUser(username); + Secret secret = Constants.getCatalogueSecret(); + secretManager.startSession(secret); + try { + sendMessage(message); + }finally { + secretManager.endSession(); + } } protected void sendMessage(Message message) throws Exception { diff --git a/src/main/java/org/gcube/gcat/persistence/ckan/CKAN.java b/src/main/java/org/gcube/gcat/persistence/ckan/CKAN.java index e5edcb2..8190dc8 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKAN.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKAN.java @@ -35,6 +35,7 @@ public abstract class CKAN { private static final Logger logger = LoggerFactory.getLogger(CKAN.class); protected static final String ID_KEY = "id"; + protected static final String TITLE_KEY = "title"; protected static final String NAME_KEY = "name"; protected static final String ERROR_KEY = "error"; 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 661e6ea..b19b124 100644 --- a/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java +++ b/src/main/java/org/gcube/gcat/persistence/ckan/CKANPackage.java @@ -118,6 +118,7 @@ public class CKANPackage extends CKAN implements Moderated { protected final List managedResources; protected String itemID; + protected String itemTitle; protected String itemURL; protected final CKANUser ckanUser; @@ -383,6 +384,8 @@ public class CKANPackage extends CKAN implements Moderated { this.name = null; this.result = null; this.itemID = null; + this.itemURL = null; + this.itemTitle = null; } /** @@ -669,7 +672,7 @@ public class CKANPackage extends CKAN implements Moderated { return itemURL; } - protected void sendSocialPost(String title) { + protected void sendSocialPost() { try { boolean makePost = false; try { @@ -686,8 +689,8 @@ public class CKANPackage extends CKAN implements Moderated { SocialPost socialPost = new SocialPost(); socialPost.setItemID(itemID); socialPost.setItemURL(itemURL); + socialPost.setItemTitle(itemTitle); socialPost.setTags(arrayNode); - socialPost.setItemTitle(title); Boolean notification = null; try { @@ -714,15 +717,21 @@ public class CKANPackage extends CKAN implements Moderated { return result.get(AUTHOR_EMAIL_KEY).asText().compareTo(ckanUser.getEMail())==0; } + protected void parseResult() { + if(this.itemID == null) { + this.itemID = result.get(ID_KEY).asText(); + } + this.itemTitle = result.get(TITLE_KEY).asText(); + this.itemURL = getExtraField(result, EXTRAS_ITEM_URL_KEY).asText(); + } + + protected void readItem() throws Exception { if(this.result == null) { String ret = super.read(); this.result = mapper.readTree(ret); } - if(this.itemID == null) { - this.itemID = result.get(ID_KEY).asText(); - } - itemURL = getExtraField(result, EXTRAS_ITEM_URL_KEY).asText(); + parseResult(); } @@ -772,7 +781,7 @@ public class CKANPackage extends CKAN implements Moderated { super.create(getAsString(jsonNode)); - this.itemID = result.get(ID_KEY).asText(); + parseResult(); ArrayNode created = createResources(resourcesToBeCreated); ((ObjectNode) result).replace(RESOURCES_KEY, created); @@ -781,8 +790,7 @@ public class CKANPackage extends CKAN implements Moderated { if(!isModerationEnabled()) { if(configuration.getScopeBean().is(Type.VRE)) { // Actions performed after a package has been correctly created on ckan. - String title = result.get(TITLE_KEY).asText(); - sendSocialPost(title); + sendSocialPost(); } } @@ -922,6 +930,8 @@ public class CKANPackage extends CKAN implements Moderated { sendPostRequest(ITEM_PATCH, getAsString(jsonNode)); + parseResult(); + for(String resourceId : originalResources.keySet()) { CKANResource ckanResource = originalResources.get(resourceId); ckanResource.deleteFile(); @@ -1293,7 +1303,7 @@ public class CKANPackage extends CKAN implements Moderated { private void postItemCreated() throws Exception { try { if(isModerationEnabled()) { - moderationThread.setItemCoordinates(itemID, name, itemURL); + moderationThread.setItemCoordinates(itemID, name, itemTitle, itemURL); moderationThread.postItemCreated(); } } catch(WebApplicationException e) { @@ -1306,7 +1316,7 @@ public class CKANPackage extends CKAN implements Moderated { private void postItemUpdated() { try { if(isModerationEnabled()) { - moderationThread.setItemCoordinates(itemID, name, itemURL); + moderationThread.setItemCoordinates(itemID, name, itemTitle, itemURL); moderationThread.postItemUpdated(); } } catch(WebApplicationException e) { @@ -1338,14 +1348,13 @@ public class CKANPackage extends CKAN implements Moderated { String ret = sendPostRequest(ITEM_UPDATE, getAsString(result)); result = mapper.readTree(ret); - itemURL = getExtraField(result, EXTRAS_ITEM_URL_KEY).asText(); - moderationThread.setItemCoordinates(itemID, name, itemURL); + parseResult(); + moderationThread.setItemCoordinates(itemID, name, itemTitle, itemURL); moderationThread.postItemApproved(moderatorMessage); if(configuration.getScopeBean().is(Type.VRE)) { // Actions performed after a package has been correctly created on ckan. - String title = result.get(TITLE_KEY).asText(); - sendSocialPost(title); + sendSocialPost(); } break; @@ -1385,8 +1394,8 @@ public class CKANPackage extends CKAN implements Moderated { setToRejected(result); String ret = sendPostRequest(ITEM_PATCH, getAsString(result)); result = mapper.readTree(ret); - - moderationThread.setItemCoordinates(itemID, name, itemURL); + parseResult(); + moderationThread.setItemCoordinates(itemID, name, itemTitle, itemURL); moderationThread.postItemRejected(moderatorMessage); break; @@ -1418,11 +1427,13 @@ public class CKANPackage extends CKAN implements Moderated { // Users that are not if(!isItemCreator()) { throw new NotAllowedException("Only item creator and " + Moderated.CATALOGUE_MODERATOR + "s are entitled to partecipate to the moderation discussion thread."); + }else { + moderationThread.setItemAuthor(true); } } CMItemStatus cmItemStatus = getCMItemStatus(); - moderationThread.setItemCoordinates(itemID, name, itemURL); + moderationThread.setItemCoordinates(itemID, name, itemTitle, itemURL); moderationThread.postUserMessage(cmItemStatus, message); return; } diff --git a/src/test/java/org/gcube/gcat/moderation/ModerationThreadTest.java b/src/test/java/org/gcube/gcat/moderation/ModerationThreadTest.java index efcc105..c8f064c 100644 --- a/src/test/java/org/gcube/gcat/moderation/ModerationThreadTest.java +++ b/src/test/java/org/gcube/gcat/moderation/ModerationThreadTest.java @@ -13,10 +13,10 @@ import org.junit.Test; public class ModerationThreadTest extends ContextTest { @Test - @JsonIgnore + // @JsonIgnore public void test() throws Exception { ModerationThread moderationThread = ModerationThread.getDefaultInstance(); - moderationThread.setItemCoordinates("my_first_restful_transaction_model", "RESTful Transaction Model", "https://data.dev.d4science.org/ctlg/devVRE/my_first_restful_transaction_model"); + moderationThread.setItemCoordinates("e31a6ba8-66ef-47b8-b61f-99a1366b4a69", "my_first_restful_transaction_model", "RESTful Transaction Model", "https://data.dev.d4science.org/ctlg/devVRE/my_first_restful_transaction_model"); CKANUser ckanUser = new CKANUser(); ckanUser.setName(CKANUser.getCKANUsername()); ckanUser.read(); @@ -25,7 +25,8 @@ public class ModerationThreadTest extends ContextTest { moderationThread.postItemUpdated(); moderationThread.postItemRejected("Non mi garba"); moderationThread.postItemApproved("Ora mi garba"); - moderationThread.postUserMessage(CMItemStatus.APPROVED, "Well Done"); + moderationThread.setItemAuthor(true); + moderationThread.postUserMessage(CMItemStatus.APPROVED, "Grazie"); Thread.sleep(1000); }