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