From a93cea24334d8242634bd45a192835abe98669a1 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Fri, 29 Jul 2022 10:20:27 +0200 Subject: [PATCH] #23692 Integrated with new getListItemsForStatus with `allFields` paramater --- CHANGELOG.md | 6 +++ pom.xml | 2 +- .../client/CkanContentModeratorService.java | 8 +++- .../CkanContentModeratorServiceAsync.java | 15 +------- .../CkanContentModeratorServiceImpl.java | 38 ++++++++++--------- .../CkanContentModeratorServiceTest.java | 31 ++++++++------- 6 files changed, 54 insertions(+), 46 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b3e061..fdd845d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v1.1.0-SNAPSHOT] - 2022-07-29 + +#### Enhancements + +- [#23692] Optimized the listing and the paging of catalogue items + ## [v1.0.1] - 2022-06-27 - [#23525] Removed the scope of xml-apis dependency diff --git a/pom.xml b/pom.xml index f645e6d..14252da 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ org.gcube.portlets.widgets ckan-content-moderator-widget jar - 1.0.1 + 1.1.0-SNAPSHOT gCube Ckan Content Moderator Widget diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java index 5b28c9b..b7b3a8d 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorService.java @@ -59,12 +59,15 @@ public interface CkanContentModeratorService extends RemoteService { * @param theStatus the the status * @param offset the offset * @param limit the limit - * @param restrictedToLoggedInUser the restricted to logged in user + * @param allFields the all fields. If true returns the all + * fields of an item + * @param restrictedToLoggedInUser if true restricts the list of items to logged + * in user * @param sortForField the sort for field * @return the list items for status * @throws Exception the exception */ - public List getListItemsForStatus(ItemStatus theStatus, int offset, int limit, + List getListItemsForStatus(ItemStatus theStatus, int offset, int limit, boolean allFields, boolean restrictedToLoggedInUser, String sortForField) throws Exception; /** @@ -133,4 +136,5 @@ public interface CkanContentModeratorService extends RemoteService { * @throws Exception the exception */ CatalogueDataset getItemForName(String itemName) throws Exception; + } diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java index f49295f..ded10ed 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorServiceAsync.java @@ -30,19 +30,8 @@ public interface CkanContentModeratorServiceAsync { void rejectItem(List itemNames, boolean permanentlyDelete, String reasonMsg, AsyncCallback callback); - /** - * Gets the list items for status. - * - * @param theStatus the the status - * @param offset the offset - * @param limit the limit - * @param restrictedToLoggedInUser the restricted to logged in user - * @param sortForField the sort for field - * @param callback the callback - * @return the list items for status - */ - void getListItemsForStatus(ItemStatus theStatus, int offset, int limit, boolean restrictedToLoggedInUser, - String sortForField, AsyncCallback> callback); + void getListItemsForStatus(ItemStatus theStatus, int offset, int limit, boolean allFields, + boolean restrictedToLoggedInUser, String sortForField, AsyncCallback> callback); /** * Gets the data for status. diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceImpl.java index 3b20ab9..35fdc7d 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceImpl.java @@ -176,6 +176,8 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem * @param theStatus the the status * @param offset the offset * @param limit the limit + * @param allFields the all fields. If true returns the all + * fields of an item * @param restrictedToLoggedInUser if true restricts the list of items to logged * in user * @param sortForField the sort for field @@ -184,7 +186,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem */ @Override public List getListItemsForStatus(ItemStatus theStatus, int offset, int limit, - boolean restrictedToLoggedInUser, String sortForField) throws Exception { + boolean allFields, boolean restrictedToLoggedInUser, String sortForField) throws Exception { LOG.info("called getListItemsForStatus with [status: " + theStatus + ", offset: " + offset + ", limit: " + limit + ", restrictedToLoggedInUser: " + restrictedToLoggedInUser + "]"); List datasetList = null; @@ -201,7 +203,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem filters.put(ContentModeratorWidgetConstants.CKAN_FIELD_NAME_AUTHOR_MAIL, valueOfQueryEmails); } - List datasets = cmsInstance.getListItemsForStatus(theStatus, limit, offset, filters, + List datasets = cmsInstance.getListItemsForStatus(theStatus, limit, offset, allFields, filters, sortForField); if (datasets != null) { int size = datasets.size(); @@ -248,32 +250,34 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem String scope = setContexts(); DataCatalogueImpl catalogueImpl = CatalogueCMSFactory.getFactory().getCatalogueImplPerScope(scope); GCubeUser user = GcubeContextUtil.getCurrentUser(this.getThreadLocalRequest()); - + boolean moderationCheckPassed = false; - + if (user != null) { CkanDataset ckanDataset = catalogueImpl.getDataset(itemName, user.getUsername()); ds = null; if (ckanDataset != null) { ds = toPatchedCatalogueDataset(ckanDataset, catalogueImpl.getCatalogueUrl()); - + Boolean userModerator = isModeratorRoleAssigned(); - moderationCheckPassed = userModerator?true:false; - LOG.info("Moderation check: is the user a Moderator? "+moderationCheckPassed); - //The user is not a Moderator, yes otherwise - if(!moderationCheckPassed) { + moderationCheckPassed = userModerator ? true : false; + LOG.info("Moderation check: is the user a Moderator? " + moderationCheckPassed); + // The user is not a Moderator, yes otherwise + if (!moderationCheckPassed) { String datasetAuthorMail = ds.getAuthorEmail(); String userMail = user.getEmail(); - if(datasetAuthorMail!=null && userMail!=null && datasetAuthorMail.compareTo(userMail)==0) { - //The user is the owner of the dataset, so he/she can view the dataset (moderation check passed) - moderationCheckPassed = true; + if (datasetAuthorMail != null && userMail != null + && datasetAuthorMail.compareTo(userMail) == 0) { + // The user is the owner of the dataset, so he/she can view the dataset + // (moderation check passed) + moderationCheckPassed = true; } - LOG.info("Moderation check: is the user the owner of the dataset? "+moderationCheckPassed); + LOG.info("Moderation check: is the user the owner of the dataset? " + moderationCheckPassed); } } } - - if(!moderationCheckPassed) { + + if (!moderationCheckPassed) { LOG.info("Moderation ckeck not passed, returning null"); ds = null; } @@ -283,7 +287,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem throw e; } - LOG.info("getItemForName "+itemName+", returning: " + ds); + LOG.info("getItemForName " + itemName + ", returning: " + ds); return ds; } @@ -472,7 +476,7 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem List listDataset = new ArrayList(); try { LOG.debug("getListItemsForStatus with searchStartIndex: " + searchStartIndex + ", limit: " + limit); - listDataset = getListItemsForStatus(status, searchStartIndex, limit, restrictedToLoggedInUser, + listDataset = getListItemsForStatus(status, searchStartIndex, limit, true, restrictedToLoggedInUser, sortForField); } catch (Exception e) { String error = "Error occurred on getting items for status: " + status; diff --git a/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceTest.java b/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceTest.java index 888e4e4..50a5759 100644 --- a/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceTest.java +++ b/src/test/java/org/gcube/portlets/widgets/ckancontentmoderator/server/CkanContentModeratorServiceTest.java @@ -13,36 +13,41 @@ import org.gcube.datacatalogue.utillibrary.server.cms.CatalogueContentModeratorS import org.gcube.datacatalogue.utillibrary.shared.ItemStatus; import org.gcube.datacatalogue.utillibrary.shared.jackan.model.CkanDataset; import org.gcube.portlets.widgets.ckancontentmoderator.client.ContentModeratorWidgetConstants; +import org.junit.Test; import org.slf4j.LoggerFactory; public class CkanContentModeratorServiceTest { - //private String scope = "/gcube/devsec/devVRE"; - private String scope = "/pred4s/preprod/Dorne"; + private String scope = "/gcube/devsec/devVRE"; + // private String scope = "/pred4s/preprod/Dorne"; private String testUser = "francesco.mangiacrapa"; - private String authorizationToken = ""; - + // private String authorizationToken = ""; + // private String scope = "/gcube/devsec"; + private String authorizationToken = "8d2107bd-640c-4cdc-88cd-72d3242d893e-98187548"; // devVRE + private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(CkanContentModeratorServiceTest.class); - - //@Test + + // @Test public void test() { fail("Not yet implemented"); } - - //@Test - public void loadItemsForStatus() { + + @Test + public void loadItemsForStatus() { ScopeProvider.instance.set(scope); SecurityTokenProvider.instance.set(authorizationToken); ItemStatus itemStatus = ItemStatus.PENDING; try { CatalogueContentModeratorSystem cms = CatalogueCMSFactory.getFactory().getCMSPerScope(scope); Map filters = new HashMap(1); - filters.put(ContentModeratorWidgetConstants.CKAN_FIELD_NAME_AUTHOR_MAIL, "francesco.mangiacrapa@isti.cnr.it"); - List items = cms.getListItemsForStatus(itemStatus, 20, 0, filters, GCatCaller.DEFAULT_SORT_VALUE); + filters.put(ContentModeratorWidgetConstants.CKAN_FIELD_NAME_AUTHOR_MAIL, + "francesco.mangiacrapa@isti.cnr.it"); + List items = cms.getListItemsForStatus(itemStatus, 20, 0, true, filters, + GCatCaller.DEFAULT_SORT_VALUE); int i = 0; - System.out.println("Datasets with status "+itemStatus+" are: "+items.size()); + System.out.println("Datasets with status " + itemStatus + " are: " + items.size()); for (CkanDataset ckanDataset : items) { - System.out.println(i++ +")Read dataset: "+ckanDataset); + System.out.println(i++ + ")Read dataset: " + ckanDataset); } } catch (Exception e) { // TODO Auto-generated catch block