From 8e2b30707b79cce6ce44eeb200c15ac4253d068f Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Thu, 17 Feb 2022 17:01:25 +0100 Subject: [PATCH] in progress integration with CMS --- .classpath | 6 +- .../com.gwtplugins.gdt.eclipse.core.prefs | 2 +- .settings/org.eclipse.wst.common.component | 60 +++++++++++++++---- CHANGELOG.md | 2 +- pom.xml | 2 +- .../client/GcubeCkanDataCatalogService.java | 44 ++++++++------ .../GcubeCkanDataCatalogServiceAsync.java | 34 +++++------ .../ClickedCMSManageProductButtonEvent.java | 2 +- .../view/CkanMetadataManagementPanel.java | 32 +++++----- .../view/GCubeCkanDataCatalogPanel.java | 39 ++++++++---- .../GcubeCkanDataCatalogServiceImpl.java | 31 +++++++++- .../shared/ManageProductResponse.java | 25 ++------ src/main/webapp/WEB-INF/web.xml | 6 +- 13 files changed, 176 insertions(+), 109 deletions(-) diff --git a/.classpath b/.classpath index 7797d4a..da39f7e 100644 --- a/.classpath +++ b/.classpath @@ -1,12 +1,12 @@ - + - + @@ -35,5 +35,5 @@ - + diff --git a/.settings/com.gwtplugins.gdt.eclipse.core.prefs b/.settings/com.gwtplugins.gdt.eclipse.core.prefs index 28eef9c..e74a0a1 100644 --- a/.settings/com.gwtplugins.gdt.eclipse.core.prefs +++ b/.settings/com.gwtplugins.gdt.eclipse.core.prefs @@ -1,6 +1,6 @@ >>>>>>>=refs/heads/task_20699 eclipse.preferences.version=1 jarsExcludedFromWebInfLib= -lastWarOutDir=/home/francescomangiacrapa/git/gcube-ckan-datacatalog/target/gcube-ckan-datacatalog-2.1.0-SNAPSHOT +lastWarOutDir=/home/francescomangiacrapa/git/gcube-ckan-datacatalog/target/gcube-ckan-datacatalog-2.2.0-SNAPSHOT warSrcDir=src/main/webapp warSrcDirIsOutput=false diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 68b7976..2a2ea61 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -1,5 +1,5 @@ - + @@ -13,8 +13,16 @@ - - + + + + + + + + + + @@ -29,7 +37,11 @@ - + + + + + @@ -44,7 +56,11 @@ - + + + + + @@ -59,20 +75,28 @@ - + + + + + - + uses - + uses - + + + + + @@ -87,7 +111,11 @@ - + + + + + @@ -102,7 +130,11 @@ - + + + + + @@ -117,7 +149,11 @@ - + + + + + diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c58e32..4a2f340 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ 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). -## [v2.2.0-SNAPSHOT] - 2022-01-21 +## [v2.2.0-SNAPSHOT] - 2022-01-27 #### Enhancements diff --git a/pom.xml b/pom.xml index 1265aa8..bd38352 100644 --- a/pom.xml +++ b/pom.xml @@ -123,7 +123,7 @@ org.gcube.portlets.widgets ckan-content-moderator-widget - [0.0.1, 1.0.0-SNAPSHOT) + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java index 8f84ac9..1f24cba 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java @@ -10,28 +10,25 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.ManageProductRes import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; - /** * The Interface GcubeCkanDataCatalogService. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Nov 4, 2016 + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Nov 4, 2016 */ @RemoteServiceRelativePath("ckandatacatalogue") public interface GcubeCkanDataCatalogService extends RemoteService { - /** * Get the ckan connector access point. * - * @param browserLocationURL the browser location URL - * @param pathInfoParameters the path info parameters + * @param browserLocationURL the browser location URL + * @param pathInfoParameters the path info parameters * @param queryStringParameters the query string parameters * @return the c kan connector * @throws Exception the exception */ - CkanConnectorAccessPoint getCKanConnector( - String browserLocationURL, String pathInfoParameters, String queryStringParameters) throws Exception; + CkanConnectorAccessPoint getCKanConnector(String browserLocationURL, String pathInfoParameters, + String queryStringParameters) throws Exception; /** * Get the current role in CKAN for this user. @@ -62,32 +59,41 @@ public interface GcubeCkanDataCatalogService extends RemoteService { */ String logoutFromCkanURL(); - // /** - // * Remove auth cookie for ckan of this user. - // * - // * @return the string - // */ - // String logoutURIFromCkan(); - + // /** + // * Remove auth cookie for ckan of this user. + // * + // * @return the string + // */ + // String logoutURIFromCkan(); /** * Check if the manage product needs to be shown (e.g., for GRSF products) - * @return + * + * @return the manage product response */ ManageProductResponse isManageProductEnabled(); - + /** - * Check if the view per VRE is enabled, so the management panels but publish/share link must be removed. + * Check if the view per VRE is enabled, so the management panels but + * publish/share link must be removed. + * * @param browserLocationURL the browser location URL * @return the string */ String isViewPerVREEnabled(String browserLocationURL); - /** * Outside login portal. * * @return true, if successful */ boolean outsideLoginPortal(); + + /** + * Check moderation enabled. + * + * @param reloadConfig the reload config + * @return the manage product response + */ + ManageProductResponse checkModerationEnabled(boolean reloadConfig); } diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogServiceAsync.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogServiceAsync.java index 08e74b7..edc89a5 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogServiceAsync.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogServiceAsync.java @@ -12,14 +12,10 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.ManageProductRes import com.google.gwt.user.client.rpc.AsyncCallback; - - -// TODO: Auto-generated Javadoc /** * The Interface GcubeCkanDataCatalogServiceAsync. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Nov 4, 2016 + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Nov 4, 2016 */ public interface GcubeCkanDataCatalogServiceAsync { @@ -34,14 +30,13 @@ public interface GcubeCkanDataCatalogServiceAsync { /** * Gets the CKAN connector. * - * @param browserLocationURL the browser location URL that performs the call - * @param pathInfoParameters the path info parameters + * @param browserLocationURL the browser location URL that performs the call + * @param pathInfoParameters the path info parameters * @param queryStringParameters the query string parameters - * @param callback the callback + * @param callback the callback * @return the c kan connector */ - void getCKanConnector( - String browserLocationURL, String pathInfoParameters, String queryStringParameters, + void getCKanConnector(String browserLocationURL, String pathInfoParameters, String queryStringParameters, AsyncCallback callback); /** @@ -57,8 +52,7 @@ public interface GcubeCkanDataCatalogServiceAsync { * @param callback the callback * @return the ckan organizations names and urls for user */ - void getCkanOrganizationsNamesAndUrlsForUser( - AsyncCallback> callback); + void getCkanOrganizationsNamesAndUrlsForUser(AsyncCallback> callback); /** * Retrieve the list of groups to whom the user belongs and their urls. @@ -66,10 +60,8 @@ public interface GcubeCkanDataCatalogServiceAsync { * @param callback the callback * @return the ckan groups names and urls for user */ - void getCkanGroupsNamesAndUrlsForUser( - AsyncCallback> callback); + void getCkanGroupsNamesAndUrlsForUser(AsyncCallback> callback); - /** * Checks if is manage product enabled. * @@ -77,20 +69,26 @@ public interface GcubeCkanDataCatalogServiceAsync { */ void isManageProductEnabled(AsyncCallback callback); - /** * Checks if is view per VRE enabled. * * @param browserLocationURL the browser location URL - * @param callback the callback + * @param callback the callback */ void isViewPerVREEnabled(String browserLocationURL, AsyncCallback callback); - /** * Outside login portal. * * @param callback the callback */ void outsideLoginPortal(AsyncCallback callback); + + /** + * Check moderation enabled. + * + * @param reloadConfig the reload config + * @param callback the callback + */ + void checkModerationEnabled(boolean reloadConfig, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ClickedCMSManageProductButtonEvent.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ClickedCMSManageProductButtonEvent.java index b6491c3..e439704 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ClickedCMSManageProductButtonEvent.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ClickedCMSManageProductButtonEvent.java @@ -15,7 +15,7 @@ public class ClickedCMSManageProductButtonEvent extends GwtEvent TYPE = new Type(); /** - * Instantiates a new clicked CMS manage product button event. + * Instantiates a new clicked Content Moderation System (CMS) manage product button event. */ public ClickedCMSManageProductButtonEvent() { } diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java index f22db62..61ff19b 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java @@ -74,8 +74,8 @@ public class CkanMetadataManagementPanel extends FlowPanel { private Button uploadToZenodo = new Button("Upload to Zenodo"); private Button insertMeta = new Button("Publish Item"); private Button editMeta = new Button("Edit Item"); - private Button manageGRSFProduct = new Button("Manage GRSF Item"); - private Button manageCMS = new Button("Manage Items"); + private Button manageGRSFProduct = new Button("Manage GRSF Item"); //GRSF Manage + private Button manageCModS = new Button("Manage Items"); //Moderation private HandlerManager eventBus; /** @@ -108,8 +108,8 @@ public class CkanMetadataManagementPanel extends FlowPanel { manageGRSFProduct.setType(ButtonType.PRIMARY); manageGRSFProduct.getElement().getStyle().setFloat(Float.RIGHT); - manageCMS.setType(ButtonType.PRIMARY); - manageCMS.getElement().getStyle().setFloat(Float.RIGHT); + manageCModS.setType(ButtonType.PRIMARY); + manageCModS.getElement().getStyle().setFloat(Float.RIGHT); // set icons home.setIcon(IconType.HOME); @@ -126,7 +126,7 @@ public class CkanMetadataManagementPanel extends FlowPanel { editMeta.setIcon(IconType.EDIT_SIGN); statistics.setIcon(IconType.BAR_CHART); manageGRSFProduct.setIcon(IconType.CHECK_SIGN); - manageCMS.setIcon(IconType.CHECK_SIGN); + manageCModS.setIcon(IconType.CHECK_SIGN); // hide edit and insert shareLink.setEnabled(false); @@ -135,16 +135,16 @@ public class CkanMetadataManagementPanel extends FlowPanel { insertMeta.setVisible(false); manageGRSFProduct.setVisible(false); manageGRSFProduct.setEnabled(false); - manageCMS.setVisible(false); - manageCMS.setEnabled(false); + manageCModS.setVisible(false); + manageCModS.setEnabled(false); // manage GRSF item info manageGRSFProduct.setTitle(MANAGE_GRSF_ITEM_TOOLTIP); manageGRSFProduct.getElement().getStyle().setFontWeight(FontWeight.BOLD); // manage CMS item info - manageCMS.setTitle(MANAGE_CMS_ITEMS_TOOLTIP); - manageCMS.getElement().getStyle().setFontWeight(FontWeight.BOLD); + manageCModS.setTitle(MANAGE_CMS_ITEMS_TOOLTIP); + manageCModS.getElement().getStyle().setFontWeight(FontWeight.BOLD); // add to navigation bar nav.add(home); @@ -167,7 +167,7 @@ public class CkanMetadataManagementPanel extends FlowPanel { nav.add(insertMeta); nav.add(editMeta); nav.add(manageGRSFProduct); - nav.add(manageCMS); + nav.add(manageCModS); nav.setClose(false); nav.setType(AlertType.INFO); nav.getElement().getStyle().setMarginBottom(0, Unit.PX); @@ -300,7 +300,7 @@ public class CkanMetadataManagementPanel extends FlowPanel { } }); - manageCMS.addClickHandler(new ClickHandler() { + manageCModS.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { @@ -373,12 +373,12 @@ public class CkanMetadataManagementPanel extends FlowPanel { } /** - * Button to manage the CMS products.. + * Button to manage the products under moderation via Content Moderation System (CMS) * * @param value true or false */ public void showManageCMSProductsButton(boolean value) { - manageCMS.setVisible(value); + manageCModS.setVisible(value); } /** @@ -387,7 +387,7 @@ public class CkanMetadataManagementPanel extends FlowPanel { * @param value the value */ public void enableManageCMSProductsButton(boolean value) { - manageCMS.setEnabled(value); + manageCModS.setEnabled(value); } /** @@ -432,7 +432,7 @@ public class CkanMetadataManagementPanel extends FlowPanel { myOrganizations.setVisible(false); myGroups.setVisible(false); manageGRSFProduct.setVisible(false); - manageCMS.setVisible(false); + manageCModS.setVisible(false); } @@ -453,7 +453,7 @@ public class CkanMetadataManagementPanel extends FlowPanel { myGroups.setVisible(false); statistics.setVisible(false); manageGRSFProduct.setVisible(false); - manageCMS.setVisible(false); + manageCModS.setVisible(false); } diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java index 405d96f..963a48c 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java @@ -52,10 +52,12 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate { private HandlerManager eventBus; private CkanConnectorAccessPoint ckanAccessPoint; private ManageProductResponse manageProductResponse = null; + private ManageProductResponse moderationProductResponse = null; private String viewPerVREPath = null; private static String latestSelectedProductIdentifier; public static final int IFRAME_FIX_HEIGHT = 1800; private JSONObject obj; + private boolean reloadCatServiceConfig = true; //only first time the gCat service config is reloaded /** * Instantiates a new g cube ckan data catalog panel. @@ -227,17 +229,11 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate { .isManageProductEnabled(new AsyncCallback() { @Override - public void onSuccess(ManageProductResponse result) { - manageProductResponse = result; + public void onSuccess(ManageProductResponse manageResponse) { + manageProductResponse = manageResponse; if (manageProductResponse != null) { - - if(manageProductResponse.isGRSFManageEnabled()) { - managementPanel.showManageCMSProductsButton( - manageProductResponse.isManageEnabled()); - }else if(manageProductResponse.isManageEnabled()) { - managementPanel.showManageCMSProductsButton(manageProductResponse.isManageEnabled()); - managementPanel.enableManageCMSProductsButton(manageProductResponse.isManageEnabled()); - } + managementPanel.showManageGRSFProductButton( + manageProductResponse.isManageEnabled()); } } @@ -246,6 +242,26 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate { managementPanel.showManageGRSFProductButton(false); } }); + + + GCubeCkanDataCatalog.service.checkModerationEnabled(reloadCatServiceConfig, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + managementPanel.showManageCMSProductsButton( + false); + } + + @Override + public void onSuccess(ManageProductResponse moderationResponse) { + reloadCatServiceConfig = false; + //here the moderationProductResponse is not null. + moderationProductResponse = moderationResponse; + managementPanel.showManageCMSProductsButton(moderationProductResponse.isManageEnabled()); + managementPanel.enableManageCMSProductsButton(moderationProductResponse.isManageEnabled()); + } + }); } @@ -492,7 +508,8 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate { managementPanel.enableShareItemButton(productId != null && !productId.isEmpty()); managementPanel.enablePublishOnZenodoButton(productId != null && !productId.isEmpty()); managementPanel.enableManageGRSFProductButton( - productId != null && !productId.isEmpty() && manageProductResponse.isGRSFManageEnabled()); + productId != null && !productId.isEmpty() && manageProductResponse.isManageEnabled()); + //managementPanel.enableManageCMSProductsButton(productId != null && !productId.isEmpty() && moderationProductResponse.isManageEnabled()); } } else { // The data hasn't been sent from your site! diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java index a643871..7e9278d 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java @@ -517,8 +517,25 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem } else{ try{ - boolean toReturn = catalogue.isManageProductEnabled(); - logger.info("isManageProductEnabled: "+toReturn); + boolean isManageProductEnabled = catalogue.isManageProductEnabled(); + logger.info("isManageProductEnabled: "+isManageProductEnabled); + + //TO BE SURE THAT THE CURRENT CONTEXT IS A GRSF SCOPE FOR ENABLING THE "MANAGE GRSF ITEM" + boolean isGRSFContext = false; + if (scopePerCurrentUrl != null) { + if (scopePerCurrentUrl.toLowerCase().contains("grsf")) { + isGRSFContext = true; + } + } + + logger.info("isGRSFContext: "+isGRSFContext); + + boolean toReturn = false; + if(isGRSFContext && isManageProductEnabled) { + toReturn = true; + } + + logger.info("returning manage enabled: "+toReturn); ManageProductResponse mpr = new ManageProductResponse(toReturn, scopePerCurrentUrl); logger.info("Will manage product be enabled for this user? " + mpr); return mpr; @@ -528,6 +545,16 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem } } } + + @Override + public ManageProductResponse checkModerationEnabled(boolean reloadConfig) { + logger.info("Checking if the moderation is enabled in the current context, reload config? "+reloadConfig); + String scopePerCurrentUrl = SessionUtil.getScopeFromClientUrl(getThreadLocalRequest()); + DataCatalogue catalogue = getCatalogue(scopePerCurrentUrl); + boolean moderationEnabled = catalogue.isModerationEnabled(reloadConfig); + return new ManageProductResponse(moderationEnabled, scopePerCurrentUrl); + + } /** * Ask to liferay. diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/ManageProductResponse.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/ManageProductResponse.java index cc2f1a5..22037db 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/ManageProductResponse.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/ManageProductResponse.java @@ -7,15 +7,16 @@ import java.io.Serializable; * * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it * - * Jun 15, 2021 + * Feb 17, 2022 */ public class ManageProductResponse implements Serializable { /** * */ - private static final long serialVersionUID = 1L; - private boolean isManageEnabled; + private static final long serialVersionUID = 4042294108868246495L; + // Is GRSF MANAGE in the GRSF context, Is gCat moderation in the other contexts + private boolean isManageEnabled = false; private String scope; /** @@ -72,24 +73,6 @@ public class ManageProductResponse implements Serializable { this.scope = scope; } - public boolean isGRSFScope() { - if (this.scope != null) { - if (this.scope.toLowerCase().contains("grsf")) { - return true; - } - } - - return false; - } - - public boolean isGRSFManageEnabled() { - - if (isGRSFScope() && isManageEnabled) - return true; - - return false; - } - /** * To string. * diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 1e9a39a..3d0747d 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -62,13 +62,13 @@ - greetServlet + ckanContentModeratorServlet org.gcube.portlets.widgets.ckancontentmoderator.server.CkanContentModeratorServiceImpl - greetServlet - /gCubeCkanDataCatalog/greet + ckanContentModeratorServlet + /gCubeCkanDataCatalog/ckanContentModeratorService