From cbb9bfc4ca688bbf6ea442d994ec7f7d578c63c6 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Fri, 18 Feb 2022 14:17:19 +0100 Subject: [PATCH] integrated with gCatCaller methods --- .../client/CkanContentModeratorService.java | 7 +- .../CkanContentModeratorServiceAsync.java | 33 ++-- .../CkanContentModeratorWidgetController.java | 2 +- .../SelectItemsWithItemStatusEvent.java | 21 ++- .../client/ui/ContentModeratorToolbar.java | 4 +- .../client/ui/HomeView.java | 174 ++++++++++++------ .../CkanContentModeratorServiceImpl.java | 49 +++-- 7 files changed, 198 insertions(+), 92 deletions(-) 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 b8d0dc5..cdad3db 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 @@ -29,11 +29,14 @@ public interface CkanContentModeratorService extends RemoteService { /** * Sets the status. - * + * Currently, this only used to change the status from Rejected to Pending + * * @param theStatus the the status * @param itemNames the item names + * @return the operation report + * @throws Exception */ - public void setStatus(ItemStatus theStatus, List itemNames); + public OperationReport setStatus(ItemStatus theStatus, List itemNames) throws Exception; /** * Reject item. 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 3f27be9..036a98f 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 @@ -9,13 +9,12 @@ import org.gcube.portlets.widgets.ckancontentmoderator.shared.SearchedData; import com.google.gwt.user.client.rpc.AsyncCallback; - /** * The Interface CkanContentModeratorServiceAsync. * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * - * Jan 11, 2022 + * Jan 11, 2022 */ public interface CkanContentModeratorServiceAsync { @@ -29,10 +28,10 @@ public interface CkanContentModeratorServiceAsync { /** * Reject item. * - * @param itemNames the item names + * @param itemNames the item names * @param permanentlyDelete the permanently delete - * @param reasonMsg the reason msg - * @param callback the callback + * @param reasonMsg the reason msg + * @param callback the callback */ void rejectItem(List itemNames, boolean permanentlyDelete, String reasonMsg, AsyncCallback callback); @@ -41,9 +40,9 @@ public interface CkanContentModeratorServiceAsync { * Gets the list items for status. * * @param theStatus the the status - * @param limit the limit - * @param offset the offset - * @param callback the callback + * @param limit the limit + * @param offset the offset + * @param callback the callback * @return the list items for status */ void getListItemsForStatus(ItemStatus theStatus, int limit, int offset, @@ -52,10 +51,10 @@ public interface CkanContentModeratorServiceAsync { /** * Gets the data for status. * - * @param status the status - * @param startIndex the start index - * @param lenght the lenght - * @param serverIndex the server index + * @param status the status + * @param startIndex the start index + * @param lenght the lenght + * @param serverIndex the server index * @param asyncCallback the async callback * @return the data for status */ @@ -65,9 +64,9 @@ public interface CkanContentModeratorServiceAsync { /** * Approve item. * - * @param itemNames the item names + * @param itemNames the item names * @param moderatorMessage the moderator message - * @param callback the callback + * @param callback the callback */ void approveItem(List itemNames, String moderatorMessage, AsyncCallback callback); @@ -75,7 +74,7 @@ public interface CkanContentModeratorServiceAsync { * Permanently delete. * * @param itemNames the item names - * @param callback the callback + * @param callback the callback */ void permanentlyDelete(List itemNames, AsyncCallback callback); @@ -84,8 +83,8 @@ public interface CkanContentModeratorServiceAsync { * * @param theStatus the the status * @param itemNames the item names - * @param callback the callback + * @param callback the callback */ - void setStatus(ItemStatus theStatus, List itemNames, AsyncCallback callback); + void setStatus(ItemStatus theStatus, List itemNames, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidgetController.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidgetController.java index 2d7c122..b13b7b8 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidgetController.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/CkanContentModeratorWidgetController.java @@ -173,7 +173,7 @@ public class CkanContentModeratorWidgetController { if(statusSelectedEvent.getDisplayMessage()!=null) { final Alert alert = new Alert(statusSelectedEvent.getDisplayMessage()); - alert.setType(AlertType.INFO); + alert.setType(statusSelectedEvent.getAlertType()); alert.setClose(true); alert.setAnimation(true); infoPanel.add(alert); diff --git a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/events/SelectItemsWithItemStatusEvent.java b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/events/SelectItemsWithItemStatusEvent.java index d627810..9fad7bf 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/events/SelectItemsWithItemStatusEvent.java +++ b/src/main/java/org/gcube/portlets/widgets/ckancontentmoderator/client/events/SelectItemsWithItemStatusEvent.java @@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.ckancontentmoderator.client.events; import org.gcube.datacatalogue.utillibrary.shared.ItemStatus; +import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.event.shared.GwtEvent; /** @@ -9,22 +10,25 @@ import com.google.gwt.event.shared.GwtEvent; * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * - * Jun 28, 2021 + * Jun 28, 2021 */ public class SelectItemsWithItemStatusEvent extends GwtEvent { public static Type TYPE = new Type(); private ItemStatus itemStatus; private String displayMessage; + private AlertType alertType = AlertType.INFO; /** * Instantiates a new click item event. * - * @param itemStatus the item status + * @param itemStatus the item status * @param displayMessage the display message + * @param alerType the aler type */ - public SelectItemsWithItemStatusEvent(ItemStatus itemStatus, String displayMessage) { + public SelectItemsWithItemStatusEvent(ItemStatus itemStatus, String displayMessage, AlertType alerType) { this.itemStatus = itemStatus; this.displayMessage = displayMessage; + this.alertType = alerType; } /** @@ -55,7 +59,7 @@ public class SelectItemsWithItemStatusEvent extends GwtEvent selectedItems = paginatedView.getSelectItems(); doActionCMS.updateStatus(fromStatus, toStatus, selectedItems); @@ -265,22 +267,22 @@ public class HomeView extends Composite { @Override public void onClick(ClickEvent event) { confirmPanelContainer.clear(); - - - //TODO DO ACTION UPDATE STATUS OR DELETE PERMANENTLY - int count = selectedItems.size(); - String msg = ""; - if (count > 0) { - if (count == 1) { - msg += "One item"; - } else { - msg += count + " items"; - } + performCMSAction(doActionCMS); + // TODO DO ACTION UPDATE STATUS OR DELETE PERMANENTLY - msg += " moved to " + toStatus + " status"; - } - eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, msg)); +// int count = selectedItems.size(); +// String msg = ""; +// if (count > 0) { +// if (count == 1) { +// msg += "One item"; +// } else { +// msg += count + " items"; +// } +// +// msg += " moved to " + toStatus + " status"; +// } +// eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, msg)); } }); @@ -324,10 +326,7 @@ public class HomeView extends Composite { @Override public void onClick(ClickEvent event) { confirmPanelContainer.clear(); - - - //TODO DO ACTION DELETE PERMANENTLY - + AlertType alert = AlertType.SUCCESS; int count = selectedItems.size(); String msg = "Deleted permanently"; if (count > 0) { @@ -339,7 +338,7 @@ public class HomeView extends Composite { msg += " from Catalogue"; } - eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, msg)); + eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, msg, alert)); } }); @@ -382,25 +381,46 @@ public class HomeView extends Composite { * * @param doActionCMSView the do action CMS view */ - public void performCMSAction(DoActionCMSView doActionCMSView) { + private void performCMSAction(DoActionCMSView doActionCMSView) { - ItemStatus toStatus = doActionCMSView.getToStatus(); + final ItemStatus toStatus = doActionCMSView.getToStatus(); List listDatasetNames = UtilFunct.toListDatasetNames(doActionCMSView.getListSelectItems()); switch (toStatus) { case PENDING: CkanContentModeratorWidgetController.contentModeratorService.setStatus(toStatus, listDatasetNames, - new AsyncCallback() { + new AsyncCallback() { @Override - public void onSuccess(Void result) { - // TODO Auto-generated method stub + public void onSuccess(OperationReport result) { + AlertType alert = AlertType.SUCCESS; + int count = result.getPassedListItems().size(); + String msg = ""; + if (count > 0) { + if (count == 1) { + msg += "One item"; + } else { + msg += count + " items"; + } + + msg += " moved to " + toStatus + " status."; + } + + int errorCount = result.getErrorListItems().size(); + if (errorCount > 0) { + msg += "
Error occurred on updating status to " + errorCount + " item/s"; + alert = AlertType.WARNING; + } + + eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, msg, alert)); } @Override public void onFailure(Throwable caught) { - // TODO Auto-generated method stub + Window.alert(caught.getMessage()); + eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, + "Sorry an error occurred. Please, refresh and try again", AlertType.ERROR)); } }); @@ -408,41 +428,87 @@ public class HomeView extends Composite { break; case APPROVED: - - CkanContentModeratorWidgetController.contentModeratorService.approveItem(listDatasetNames, doActionCMSView.getTxtReasonMsg(), new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - // TODO Auto-generated method stub - - } + CkanContentModeratorWidgetController.contentModeratorService.approveItem(listDatasetNames, + doActionCMSView.getTxtReasonMsg(), new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + Window.alert(caught.getMessage()); + eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, + "Sorry an error occurred. Please, refresh and try again", AlertType.ERROR)); + + } + + @Override + public void onSuccess(OperationReport result) { + + AlertType alert = AlertType.SUCCESS; + int count = result.getPassedListItems().size(); + String msg = ""; + if (count > 0) { + if (count == 1) { + msg += "One item"; + } else { + msg += count + " items"; + } + + msg += " moved to " + toStatus + " status."; + } + + int errorCount = result.getErrorListItems().size(); + if (errorCount > 0) { + msg += "
Error occurred on approving " + errorCount + " item/s"; + alert = AlertType.WARNING; + } + + eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, msg, alert)); + + } + }); - @Override - public void onSuccess(OperationReport result) { - // TODO Auto-generated method stub - - } - }); - break; case REJECTED: - - CkanContentModeratorWidgetController.contentModeratorService.rejectItem(listDatasetNames, doActionCMSView.isPermanentlyDelete(), doActionCMSView.getTxtReasonMsg(), new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - // TODO Auto-generated method stub - - } + CkanContentModeratorWidgetController.contentModeratorService.rejectItem(listDatasetNames, + doActionCMSView.isPermanentlyDelete(), doActionCMSView.getTxtReasonMsg(), + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + Window.alert(caught.getMessage()); + eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, + "Sorry an error occurred. Please, refresh and try again", AlertType.ERROR)); + } + + @Override + public void onSuccess(OperationReport result) { + + AlertType alert = AlertType.SUCCESS; + int count = result.getPassedListItems().size(); + String msg = ""; + if (count > 0) { + if (count == 1) { + msg += "One item"; + } else { + msg += count + " items"; + } + + msg += " moved to " + toStatus + " status."; + } + + int errorCount = result.getErrorListItems().size(); + if (errorCount > 0) { + msg += "
Error occurred on rejecting " + errorCount + " item/s"; + alert = AlertType.WARNING; + } + + eventBus.fireEvent(new SelectItemsWithItemStatusEvent(displayingItemStatus, msg, alert)); + + } + }); - @Override - public void onSuccess(OperationReport result) { - // TODO Auto-generated method stub - - } - }); - break; default: 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 c3eb09d..b423f37 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 @@ -66,18 +66,6 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem return scope; } - /** - * Sets the status. - * - * @param theStatus the the status - * @param itemNames the item names - */ - @Override - public void setStatus(ItemStatus theStatus, List itemNames) { - LOG.info("Called set status " + theStatus + " for Items with name: " + itemNames); - - } - /** * Gets the list items for status. * @@ -119,6 +107,43 @@ public class CkanContentModeratorServiceImpl extends RemoteServiceServlet implem LOG.info("returning " + datasetList.size() + " dataset"); return datasetList; } + + + /** + * Sets the status. + * + * @param theStatus the the status + * @param itemNames the item names + * @return the operation report + * @throws Exception + */ + @Override + public OperationReport setStatus(ItemStatus theStatus, List itemNames) throws Exception { + LOG.info("Called set status " + theStatus + " for Items with name: " + itemNames); + + try { + String scope = setContexts(); + DataCatalogueImpl catalogueImpl = CatalogueCMSFactory.getFactory().getCatalogueImplPerScope(scope); + List errorListItems = new ArrayList(); + List approvedListItems = new ArrayList(); + for (String itemName : itemNames) { + try { + catalogueImpl.refreshDataset(itemName); + approvedListItems.add(itemName); + } catch (Exception e) { + LOG.warn("Error when setting status (updating) the itemName: " + itemName, e); + errorListItems.add(itemName); + } + } + + return new OperationReport(theStatus.getLabel(), errorListItems, approvedListItems); + + } catch (Exception e) { + LOG.error(e.getMessage(), e); + throw new Exception("Error occurred on updating the status for item/s: " + itemNames + ". Caused by: " + e.getMessage()); + } + } + /** * Approve item.