diff --git a/.classpath b/.classpath
index 0c68635..b673aa3 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,6 @@
-
+
@@ -13,7 +13,7 @@
-
+
@@ -36,5 +36,5 @@
-
+
diff --git a/.settings/com.gwtplugins.gdt.eclipse.core.prefs b/.settings/com.gwtplugins.gdt.eclipse.core.prefs
index 1264abe..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.1-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 15adbd0..f0a1277 100644
--- a/.settings/org.eclipse.wst.common.component
+++ b/.settings/org.eclipse.wst.common.component
@@ -1,5 +1,5 @@
-
+
@@ -10,8 +10,10 @@
-
-
+
+
+
+
@@ -23,7 +25,8 @@
-
+
+
@@ -35,7 +38,8 @@
-
+
+
@@ -47,7 +51,8 @@
-
+
+
@@ -59,7 +64,8 @@
-
+
+
@@ -71,7 +77,8 @@
-
+
+
@@ -83,7 +90,8 @@
-
+
+
@@ -95,7 +103,8 @@
-
+
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cf3384a..6448094 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,9 +4,13 @@
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.1.2-SNAPSHOT] - 2022-02-03
+## [v2.2.0-SNAPSHOT] - 2022-0-18
-- Just to include the fix #22889
+#### Enhancements
+
+- [#20650] Data Catalogue: integrate the Content Moderator System
+- [#22872] Updated the AppId (to 'service-account-gcat') used in the "Catalogue" GR
+- [#23259] Implemented the requirement described in #23156
## [v2.1.1] - 2022-01-21
diff --git a/pom.xml b/pom.xml
index 98ef2fd..bd38352 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,7 +14,7 @@
org.gcube.portlets.gcubeckan
gcube-ckan-datacatalog
war
- 2.1.2-SNAPSHOT
+ 2.2.0-SNAPSHOT
gCube CKAN Data Catalog
The gCube CKAN Data Catalog portlet
@@ -40,7 +40,7 @@
org.gcube.distribution
maven-portal-bom
- 3.6.3
+ 3.6.3-SNAPSHOT
pom
import
@@ -64,12 +64,31 @@
+
+
+ xml-apis
+ xml-apis
+ 1.4.01
+ provided
+
com.google.gwt
gwt-user
- provided
-
${gwtVersion}
+ provided
+
+
+
+ com.google.gwt
+ gwt-dev
+ ${gwtVersion}
+ provided
+
+
+ com.google.gwt
+ gwt-servlet
+ ${gwtVersion}
+ provided
com.github.gwtbootstrap
@@ -101,6 +120,11 @@
[1.0.0, 2.0.0-SNAPSHOT)
+
+ org.gcube.portlets.widgets
+ ckan-content-moderator-widget
+ [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)
+
org.gcube.portlets.widgets
@@ -114,7 +138,7 @@
[2.0.0-SNAPSHOT,3.0.0)
compile
-
+
org.gcube.portlets.widgets
ckan2zenodo-publisher-widget
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml
index db046d2..dde449b 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml
@@ -14,24 +14,32 @@
-
+
-
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
+
+
+
+
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java
index 4eef43e..d3eac8b 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java
@@ -4,6 +4,9 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client;
import org.gcube.datacatalogue.grsf_manage_widget.client.events.HideManagementPanelEvent;
import org.gcube.datacatalogue.grsf_manage_widget.client.events.HideManagementPanelEventHandler;
import org.gcube.datacatalogue.grsf_manage_widget.client.view.ManageProductWidget;
+import org.gcube.datacatalogue.utillibrary.shared.ItemStatus;
+import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ClickedCMSManageProductButtonEvent;
+import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ClickedCMSManageProductButtonEventHandler;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.EditMetadataEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.EditMetadataEventHandler;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.InsertMetadataEvent;
@@ -32,6 +35,10 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDa
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
import org.gcube.portlets.widgets.ckan2zenodopublisher.client.CkanToZendoPublisherWidget;
import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.CatalogueItem;
+import org.gcube.portlets.widgets.ckancontentmoderator.client.CkanContentModeratorCheckConfigs;
+import org.gcube.portlets.widgets.ckancontentmoderator.client.CkanContentModeratorWidgetTrusted;
+import org.gcube.portlets.widgets.ckancontentmoderator.client.ContentModeratorWidgetConstants;
+import org.gcube.portlets.widgets.ckancontentmoderator.shared.DISPLAY_FIELD;
import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.form.CreateDatasetForm;
import org.gcube.portlets_widgets.catalogue_sharing_widget.client.ShareCatalogueWidget;
@@ -51,7 +58,7 @@ public class CkanEventHandlerManager {
protected static final String WIDGET_CREATE_TITLE = "Publish Item";
private HandlerManager eventBus = new HandlerManager(null);
- private GCubeCkanDataCatalogPanel panel;
+ private GCubeCkanDataCatalogPanel gcubeCkanDataCatalogue;
private String logoutFromCKANURL;
/**
@@ -62,13 +69,13 @@ public class CkanEventHandlerManager {
}
/**
- * Sets the panel.
+ * Sets the gcubeCkanDataCatalogue.
*
- * @param panel the panel to set
+ * @param gcubeCkanDataCatalogue the gcubeCkanDataCatalogue to set
*/
public void setPanel(GCubeCkanDataCatalogPanel panel) {
- this.panel = panel;
+ this.gcubeCkanDataCatalogue = panel;
}
/**
@@ -81,9 +88,10 @@ public class CkanEventHandlerManager {
@Override
public void onShowHome(ShowHomeEvent showHomeEvent) {
- String pathToUse = panel.isViewPerVREEnabled() ? panel.getPathInfo() : null;
+ String pathToUse = gcubeCkanDataCatalogue.isViewPerVREEnabled() ? gcubeCkanDataCatalogue.getPathInfo()
+ : null;
String request = getCkanRequest(pathToUse, null);
- panel.instanceCkanFrame(request);
+ gcubeCkanDataCatalogue.instanceCkanFrame(request);
}
});
@@ -92,18 +100,17 @@ public class CkanEventHandlerManager {
@Override
public void onInsertMetadata(InsertMetadataEvent loadSelectedItemEvent) {
- GWT.log("onInsertMetadata: "+loadSelectedItemEvent);
+ GWT.log("onInsertMetadata: " + loadSelectedItemEvent);
final Modal modal = new ExtModal(true, true);
modal.setTitle(WIDGET_CREATE_TITLE);
modal.addStyleName("insert-metadata-modal-style");
modal.addStyleName("modal-top-custom");
- ((Element)modal.getElement().getChildNodes().getItem(1)).addClassName("modal-body-custom");
+ ((Element) modal.getElement().getChildNodes().getItem(1)).addClassName("modal-body-custom");
modal.add(new CreateDatasetForm(eventBus));
modal.setCloseVisible(true);
-
-// // hide any popup panel opened
+// // hide any popup gcubeCkanDataCatalogue opened
// modal.addHideHandler(new HideHandler() {
//
// @Override
@@ -118,7 +125,7 @@ public class CkanEventHandlerManager {
//
// }
// });
-
+
GWT.log("show");
modal.show();
}
@@ -134,95 +141,88 @@ public class CkanEventHandlerManager {
});
// show datasets event
- eventBus.addHandler(
- ShowDatasetsEvent.TYPE, new ShowDatasetsEventHandler() {
+ eventBus.addHandler(ShowDatasetsEvent.TYPE, new ShowDatasetsEventHandler() {
- @Override
- public void onShowDatasets(
- ShowDatasetsEvent showUserDatasetsEvent) {
- String request = null;
- if(showUserDatasetsEvent.isOwnOnly())
- request = getCkanRequest("/dashboard/datasets", null);
- else
- request = getCkanRequest("/dataset", null);
- panel.instanceCkanFrame(request);
- }
- });
+ @Override
+ public void onShowDatasets(ShowDatasetsEvent showUserDatasetsEvent) {
+ String request = null;
+ if (showUserDatasetsEvent.isOwnOnly())
+ request = getCkanRequest("/dashboard/datasets", null);
+ else
+ request = getCkanRequest("/dataset", null);
+ gcubeCkanDataCatalogue.instanceCkanFrame(request);
+ }
+ });
- eventBus.addHandler(ShowTypesEvent.TYPE,
- new ShowTypesEventHandler() {
+ eventBus.addHandler(ShowTypesEvent.TYPE, new ShowTypesEventHandler() {
@Override
public void onShowTypes(ShowTypesEvent showTypes) {
String request = getCkanRequest("/type", null);
- panel.instanceCkanFrame(request);
+ gcubeCkanDataCatalogue.instanceCkanFrame(request);
}
});
- eventBus.addHandler(
- ShowOrganizationsEvent.TYPE,
- new ShowOrganizationsEventHandler() {
+ eventBus.addHandler(ShowOrganizationsEvent.TYPE, new ShowOrganizationsEventHandler() {
- @Override
- public void onShowOrganizations(
- ShowOrganizationsEvent showUserDatasetsEvent) {
+ @Override
+ public void onShowOrganizations(ShowOrganizationsEvent showUserDatasetsEvent) {
- if(showUserDatasetsEvent.isOwnOnly())
- panel.showOrganizations();
- else{
- String request = getCkanRequest("/organization", null);
- panel.instanceCkanFrame(request);
- }
- }
- });
- eventBus.addHandler(
- ShowGroupsEvent.TYPE, new ShowGroupsEventHandler() {
+ if (showUserDatasetsEvent.isOwnOnly())
+ gcubeCkanDataCatalogue.showOrganizations();
+ else {
+ String request = getCkanRequest("/organization", null);
+ gcubeCkanDataCatalogue.instanceCkanFrame(request);
+ }
+ }
+ });
+ eventBus.addHandler(ShowGroupsEvent.TYPE, new ShowGroupsEventHandler() {
- @Override
- public void onShowGroups(ShowGroupsEvent showGroupsEvent) {
- //panel.instanceCkanFrame(request);
- if(showGroupsEvent.isOwnOnly())
- panel.showGroups();
- else{
- String request = getCkanRequest("/group", null);
- panel.instanceCkanFrame(request);
- }
- }
- });
+ @Override
+ public void onShowGroups(ShowGroupsEvent showGroupsEvent) {
+ // gcubeCkanDataCatalogue.instanceCkanFrame(request);
+ if (showGroupsEvent.isOwnOnly())
+ gcubeCkanDataCatalogue.showGroups();
+ else {
+ String request = getCkanRequest("/group", null);
+ gcubeCkanDataCatalogue.instanceCkanFrame(request);
+ }
+ }
+ });
// show statistics event
- eventBus.addHandler(
- ShowStatisticsEvent.TYPE, new ShowStatisticsEventHandler() {
+ eventBus.addHandler(ShowStatisticsEvent.TYPE, new ShowStatisticsEventHandler() {
- @Override
- public void onShowStatistics(
- ShowStatisticsEvent showStatisticsEvent) {
- String request = getCkanRequest("/stats", null);
- panel.instanceCkanFrame(request);
- }
- });
+ @Override
+ public void onShowStatistics(ShowStatisticsEvent showStatisticsEvent) {
+ String request = getCkanRequest("/stats", null);
+ gcubeCkanDataCatalogue.instanceCkanFrame(request);
+ }
+ });
- // eventBus.addHandler(NotifyLogoutEvent.TYPE, new NotifyLogoutEventHandler() {
+ // eventBus.addHandler(NotifyLogoutEvent.TYPE, new NotifyLogoutEventHandler() {
//
- // @Override
- // public void onLogout(NotifyLogoutEvent editMetadataEvent) {
+ // @Override
+ // public void onLogout(NotifyLogoutEvent editMetadataEvent) {
//
- // // CKanLeaveFrame frame = new CKanLeaveFrame(GCubeCkanDataCatalog.CKAN_LOGUT_SERVICE);
- // // DOM.appendChild(RootPanel.getBodyElement(), frame.getElement());
- // }
- // });
+ // // CKanLeaveFrame frame = new
+ // CKanLeaveFrame(GCubeCkanDataCatalog.CKAN_LOGUT_SERVICE);
+ // // DOM.appendChild(RootPanel.getBodyElement(), frame.getElement());
+ // }
+ // });
//
- // eventBus.addHandler(IFrameInstanciedEvent.TYPE, new IFrameInstanciedEventHandler() {
+ // eventBus.addHandler(IFrameInstanciedEvent.TYPE, new
+ // IFrameInstanciedEventHandler() {
//
- // @Override
- // public void onNewInstance(IFrameInstanciedEvent iFrameInstanciedEvent) {
+ // @Override
+ // public void onNewInstance(IFrameInstanciedEvent iFrameInstanciedEvent) {
//
- // panel.updateSize();
- // if(logoutFromCKANURL==null)
- // instanceLogoutSystem();
- // }
- // });
+ // gcubeCkanDataCatalogue.updateSize();
+ // if(logoutFromCKANURL==null)
+ // instanceLogoutSystem();
+ // }
+ // });
eventBus.addHandler(ShowManageProductWidgetEvent.TYPE, new ShowManageProductWidgetEventHandler() {
@@ -231,14 +231,40 @@ public class CkanEventHandlerManager {
new ManageProductWidget(event.getProductIdentifier(), eventBus);
}
});
-
+
+ eventBus.addHandler(ClickedCMSManageProductButtonEvent.TYPE, new ClickedCMSManageProductButtonEventHandler() {
+
+ @Override
+ public void onClickedManageProduct(ClickedCMSManageProductButtonEvent showManageProductWidgetEvent) {
+
+ CkanContentModeratorCheckConfigs config = gcubeCkanDataCatalogue.getCkanModeratorConfig();
+
+ DISPLAY_FIELD[] sortByFields = null;
+
+ try {
+ if (config.isModeratorRoleAssigned()) {
+ sortByFields = DISPLAY_FIELD.values();
+ }
+ } catch (Exception e) {
+ }
+
+ if (sortByFields == null) {
+ sortByFields = ContentModeratorWidgetConstants.DEFAULT_SORT_BY_FIELDS;
+ }
+
+ final CkanContentModeratorWidgetTrusted cmsTrusted = new CkanContentModeratorWidgetTrusted(
+ ItemStatus.PENDING, DISPLAY_FIELD.values(), sortByFields, config);
+
+ cmsTrusted.showAsModal(null);
+ }
+ });
+
eventBus.addHandler(ShowRevertOperationWidgetEvent.TYPE, new ShowRevertOperationWidgetEventHandler() {
@Override
- public void onShowRevertOperationWidgetEvent(
- ShowRevertOperationWidgetEvent event) {
-
+ public void onShowRevertOperationWidgetEvent(ShowRevertOperationWidgetEvent event) {
+
new ManageProductWidget(event.getEncryptedUrl(), eventBus);
-
+
}
});
@@ -252,31 +278,32 @@ public class CkanEventHandlerManager {
}
});
- // hide management panel if user is not allowed to manage
+ // hide management gcubeCkanDataCatalogue if user is not allowed to manage
eventBus.addHandler(HideManagementPanelEvent.TYPE, new HideManagementPanelEventHandler() {
@Override
public void onEvent(HideManagementPanelEvent hideEvent) {
- panel.showManagementPanel(false);
+ gcubeCkanDataCatalogue.showManagementPanel(false);
}
});
-
+
eventBus.addHandler(PublishOnZenodoEvent.TYPE, new PublishOnZenodoEventHandler() {
-
+
@Override
public void onPublishOnZenodo(PublishOnZenodoEvent publishOnZenodoEvent) {
-
- if(publishOnZenodoEvent.getItemId()!=null) {
-
+
+ if (publishOnZenodoEvent.getItemId() != null) {
+
CkanToZendoPublisherWidget publisherWidget = new CkanToZendoPublisherWidget();
- CatalogueItem ci = new CatalogueItem(publishOnZenodoEvent.getItemId(), null, null, CatalogueItem.ITEM_TYPE.DATASET);
+ CatalogueItem ci = new CatalogueItem(publishOnZenodoEvent.getItemId(), null, null,
+ CatalogueItem.ITEM_TYPE.DATASET);
publisherWidget.publishOnZenodo(ci);
-
+
}
}
-
+
});
}
@@ -284,13 +311,14 @@ public class CkanEventHandlerManager {
* Gets the ckan request.
*
* @param pathInfo the path info
- * @param query the query
+ * @param query the query
* @return the ckan request
*/
- private String getCkanRequest(String pathInfo, String query){
- CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(panel.getBaseURLCKANConnector(),"");
- if(panel.getGcubeTokenValueToCKANConnector() != null)
- ckan.addGubeToken(panel.getGcubeTokenValueToCKANConnector());
+ private String getCkanRequest(String pathInfo, String query) {
+ CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(gcubeCkanDataCatalogue.getBaseURLCKANConnector(),
+ "");
+ if (gcubeCkanDataCatalogue.getGcubeTokenValueToCKANConnector() != null)
+ ckan.addGubeToken(gcubeCkanDataCatalogue.getGcubeTokenValueToCKANConnector());
pathInfo = CkanConnectorAccessPoint.checkNullString(pathInfo);
query = CkanConnectorAccessPoint.checkNullString(query);
ckan.addPathInfo(pathInfo);
@@ -308,7 +336,7 @@ public class CkanEventHandlerManager {
@Override
public void onSuccess(String result) {
logoutFromCKANURL = result;
- GWT.log("Loaded logout url: "+logoutFromCKANURL);
+ GWT.log("Loaded logout url: " + logoutFromCKANURL);
performLogoutOnBrowserClosedEvent(logoutFromCKANURL);
}
@@ -353,7 +381,8 @@ public class CkanEventHandlerManager {
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
- if ((new Date().getTime() - start) > milliseconds || logoutPerformed) {
+ if ((new Date().getTime() - start) > milliseconds
+ || logoutPerformed) {
break;
}
}
@@ -417,7 +446,6 @@ public class CkanEventHandlerManager {
}-*/;
-
/**
* Gets the event bus.
*
@@ -428,7 +456,6 @@ public class CkanEventHandlerManager {
return eventBus;
}
-
/**
* Gets the logout from ckanurl.
*
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GCubeCkanDataCatalog.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GCubeCkanDataCatalog.java
index d3c3dd4..6512b4e 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GCubeCkanDataCatalog.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GCubeCkanDataCatalog.java
@@ -7,25 +7,23 @@ import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.RootPanel;
-
/**
* The Class GCubeCkanDataCatalog.
*
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Nov 4, 2016
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Nov 4, 2016
*/
public class GCubeCkanDataCatalog implements EntryPoint {
/**
- * Create a remote service proxy to talk to the server-side Greeting
- * service.
+ * Create a remote service proxy to talk to the server-side Greeting service.
*/
public static final GcubeCkanDataCatalogServiceAsync service = GWT.create(GcubeCkanDataCatalogService.class);
- public static final String CKAN_LOGUT_SERVICE = GWT.getModuleBaseURL() +"gcubeckanlogout";
+ public static final String CKAN_LOGUT_SERVICE = GWT.getModuleBaseURL() + "gcubeckanlogout";
private final String DIV_PORTLET_ID = "gCubeCkanDataCatalog";
private CkanEventHandlerManager eventManager = new CkanEventHandlerManager();
public static final String GET_PATH_PARAMETER = "path";
public static final String GET_QUERY_PARAMETER = "query";
+ public static final String GET_QUERY_STRING_PARAMETER = "query_string";
public static final String REVERT_QUERY_PARAM = "manage";
public static final String GCUBE_CKAN_IFRAME = "gcube-ckan-iframe";
@@ -34,7 +32,8 @@ public class GCubeCkanDataCatalog implements EntryPoint {
*/
public void onModuleLoad() {
- GCubeCkanDataCatalogPanel panel = new GCubeCkanDataCatalogPanel(RootPanel.get(DIV_PORTLET_ID), eventManager.getEventBus());
+ GCubeCkanDataCatalogPanel panel = new GCubeCkanDataCatalogPanel(RootPanel.get(DIV_PORTLET_ID),
+ eventManager.getEventBus());
eventManager.setPanel(panel);
}
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 e3790ab..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
@@ -5,32 +5,30 @@ import java.util.List;
import org.gcube.datacatalogue.utillibrary.shared.RolesCkanGroupOrOrg;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgGroupRole;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
+import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.ManageProductResponse;
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.
@@ -61,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
*/
- boolean isManageProductEnabled();
-
+ 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 9731480..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
@@ -8,16 +8,14 @@ import java.util.List;
import org.gcube.datacatalogue.utillibrary.shared.RolesCkanGroupOrOrg;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgGroupRole;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
+import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.ManageProductResponse;
import com.google.gwt.user.client.rpc.AsyncCallback;
-
-
/**
* 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 {
@@ -32,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);
/**
@@ -55,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.
@@ -64,30 +60,35 @@ public interface GcubeCkanDataCatalogServiceAsync {
* @param callback the callback
* @return the ckan groups names and urls for user
*/
- void getCkanGroupsNamesAndUrlsForUser(
- AsyncCallback> callback);
+ void getCkanGroupsNamesAndUrlsForUser(AsyncCallback> callback);
/**
- * Check if the manage product needs to be shown (e.g., for GRSF products)
+ * Checks if is manage product enabled.
*
* @param callback the callback
*/
- void isManageProductEnabled(AsyncCallback callback);
+ 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
new file mode 100644
index 0000000..e439704
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ClickedCMSManageProductButtonEvent.java
@@ -0,0 +1,43 @@
+package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+
+/**
+ * The Class ClickedCMSManageProductButtonEvent.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Jun 15, 2021
+ */
+public class ClickedCMSManageProductButtonEvent extends GwtEvent {
+
+ public static Type TYPE = new Type();
+
+ /**
+ * Instantiates a new clicked Content Moderation System (CMS) manage product button event.
+ */
+ public ClickedCMSManageProductButtonEvent() {
+ }
+
+ /**
+ * Gets the associated type.
+ *
+ * @return the associated type
+ */
+ @Override
+ public com.google.gwt.event.shared.GwtEvent.Type getAssociatedType() {
+ return TYPE;
+ }
+
+ /**
+ * Dispatch.
+ *
+ * @param handler the handler
+ */
+ @Override
+ protected void dispatch(ClickedCMSManageProductButtonEventHandler handler) {
+ handler.onClickedManageProduct(this);
+ }
+
+}
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ClickedCMSManageProductButtonEventHandler.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ClickedCMSManageProductButtonEventHandler.java
new file mode 100644
index 0000000..0283606
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ClickedCMSManageProductButtonEventHandler.java
@@ -0,0 +1,21 @@
+package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event;
+
+import com.google.gwt.event.shared.EventHandler;
+
+/**
+ * The Interface ClickedCMSManageProductButtonEventHandler.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Jun 15, 2021
+ */
+public interface ClickedCMSManageProductButtonEventHandler extends EventHandler {
+
+ /**
+ * On clicked manage product.
+ *
+ * @param showManageProductWidgetEvent the show manage product widget event
+ */
+ void onClickedManageProduct(ClickedCMSManageProductButtonEvent showManageProductWidgetEvent);
+
+}
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java
index d27d8cd..5c90ba0 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java
@@ -19,17 +19,17 @@ import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.NamedFrame;
-
/**
* The Class CkanFramePanel.
*
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Jun 9, 2016
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Feb 25, 2022
*/
-public class CkanFramePanel extends FlowPanel{
+public class CkanFramePanel extends FlowPanel {
private NamedFrame frame;
- //private static final String FRAME_NAME = "ckan-content-frame";
+ // private static final String FRAME_NAME = "ckan-content-frame";
private HandlerManager eventBus;
private Image loading = new Image(CkanPortletResources.ICONS.loading());
private String messageToSend;
@@ -47,19 +47,17 @@ public class CkanFramePanel extends FlowPanel{
/**
* Post message.
*
- * @param msg the msg (as json)
- * @param javaScriptObject
- * @param
- * @param
+ * @param msg the msg (as json)
+ * @param frameName the frame name
*/
protected native void sendMessage(String msg, String frameName) /*-{
- console.log("Sending message " + msg);
- // $wnd.parent.postMessage(msg,'*');
- //var f = $wnd.frames[frameName];
- //console.log(f);
- //f.contentWindow.postMessage(msg, "*");
- $wnd.frames[frameName].postMessage(msg,"*")
- console.log("Message sent");
+ console.log("Sending message " + msg);
+ // $wnd.parent.postMessage(msg,'*');
+ //var f = $wnd.frames[frameName];
+ //console.log(f);
+ //f.contentWindow.postMessage(msg, "*");
+ $wnd.frames[frameName].postMessage(msg, "*")
+ console.log("Message sent");
}-*/;
/**
@@ -68,36 +66,38 @@ public class CkanFramePanel extends FlowPanel{
* @param msg the msg
*/
private static native void print(String msg)/*-{
- console.log(msg);
+ console.log(msg);
}-*/;
/**
* Instance frame.
*
* @param ckanUrlConnector the ckan url connector
+ * @param messageToSend the message to send
+ * @param ckanUrl the ckan url
* @return the frame
*/
- public Frame instanceFrame(String ckanUrlConnector, final String messageToSend,final String ckanUrl) {
- GWT.log("Instancing new IFRAME with uri: "+ckanUrlConnector);
- try{
- if(frame != null)
+ public Frame instanceFrame(String ckanUrlConnector, final String messageToSend, final String ckanUrl) {
+ GWT.log("Instancing new IFRAME with uri: " + ckanUrlConnector);
+ try {
+ if (frame != null)
remove(frame);
- }catch(Exception e){
+ } catch (Exception e) {
print("Error " + e);
}
addLoading();
String urlEncoded = URL.encode(ckanUrlConnector);
GWT.log("Encoded url for instanciating frame is " + urlEncoded);
-
+
frame = new NamedFrame(GCubeCkanDataCatalog.GCUBE_CKAN_IFRAME);
frame.setUrl(urlEncoded);
frame.getElement().setId(GCubeCkanDataCatalog.GCUBE_CKAN_IFRAME);
frame.setWidth("100%");
- // frame.setHeight("100%");
- // frame.getElement().getStyle().setOverflow(Overflow.HIDDEN);
- // frame.getElement().setAttribute("scrolling", "no");
+ // frame.setHeight("100%");
+ // frame.getElement().getStyle().setOverflow(Overflow.HIDDEN);
+ // frame.getElement().setAttribute("scrolling", "no");
frame.getElement().getStyle().setBorderWidth(0, Unit.PX);
frame.addLoadHandler(new LoadHandler() {
@@ -125,9 +125,9 @@ public class CkanFramePanel extends FlowPanel{
}
/**
- * add loading image
+ * add loading image.
*/
- private void addLoading(){
+ private void addLoading() {
this.add(loading);
loading.getElement().getStyle().setProperty("margin", "auto");
loading.getElement().getStyle().setDisplay(Display.BLOCK);
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 af9d6e9..78271c0 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
@@ -3,6 +3,7 @@
*/
package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view;
+import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ClickedCMSManageProductButtonEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.EditMetadataEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.InsertMetadataEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.PublishOnZenodoEvent;
@@ -34,6 +35,7 @@ import com.google.gwt.user.client.ui.InlineHTML;
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* @author Costantino Perciante costantino.perciante@isti.cnr.it Jun 9, 2016
+ *
*/
public class CkanMetadataManagementPanel extends FlowPanel {
@@ -42,9 +44,12 @@ public class CkanMetadataManagementPanel extends FlowPanel {
*/
private static final String MY_PREFIX = "My ";
- private static final String MANAGE_ITEM_TOOLTIP = "By pushing on this button, you will be able to manage the item you are viewing."
+ private static final String MANAGE_GRSF_ITEM_TOOLTIP = "By pushing on this button, you will be able to manage the item you are viewing."
+ " Manageable items are the GRSF ones.";
+ private static final String MANAGE_CMS_ITEMS_TOOLTIP = "By pushing on this button, you will be able to manage (APPROVING or REJECTING) the item under approval"
+ + "Manageable items are not APPROVED and NOT PUBLISHED in the Catalogue.";
+
private AlertBlock nav = new AlertBlock();
// generic
@@ -69,7 +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 manageProduct = new Button("Manage Item");
+ private Button manageGRSFProduct = new Button("Manage GRSF Item"); //GRSF Manage
+ private Button manageCModS = new Button("Manage Items"); //Moderation
private HandlerManager eventBus;
/**
@@ -99,8 +105,12 @@ public class CkanMetadataManagementPanel extends FlowPanel {
uploadToZenodo.setType(ButtonType.LINK);
insertMeta.setType(ButtonType.LINK);
editMeta.setType(ButtonType.LINK);
- manageProduct.setType(ButtonType.PRIMARY);
- manageProduct.getElement().getStyle().setFloat(Float.RIGHT);
+ manageGRSFProduct.setType(ButtonType.PRIMARY);
+ manageGRSFProduct.getElement().getStyle().setFloat(Float.RIGHT);
+
+ manageCModS.setType(ButtonType.PRIMARY);
+ manageCModS.getElement().getStyle().setFloat(Float.RIGHT);
+ manageCModS.getElement().getStyle().setMarginRight(20, Unit.PX);
// set icons
home.setIcon(IconType.HOME);
@@ -116,19 +126,26 @@ public class CkanMetadataManagementPanel extends FlowPanel {
insertMeta.setIcon(IconType.FILE);
editMeta.setIcon(IconType.EDIT_SIGN);
statistics.setIcon(IconType.BAR_CHART);
- manageProduct.setIcon(IconType.CHECK_SIGN);
+ manageGRSFProduct.setIcon(IconType.CHECK_SIGN);
+ manageCModS.setIcon(IconType.CHECK_SIGN);
// hide edit and insert
shareLink.setEnabled(false);
uploadToZenodo.setEnabled(false);
editMeta.setVisible(false);
insertMeta.setVisible(false);
- manageProduct.setVisible(false);
- manageProduct.setEnabled(false);
+ manageGRSFProduct.setVisible(false);
+ manageGRSFProduct.setEnabled(false);
+ manageCModS.setVisible(false);
+ manageCModS.setEnabled(false);
- // manage item info
- manageProduct.setTitle(MANAGE_ITEM_TOOLTIP);
- manageProduct.getElement().getStyle().setFontWeight(FontWeight.BOLD);
+ // manage GRSF item info
+ manageGRSFProduct.setTitle(MANAGE_GRSF_ITEM_TOOLTIP);
+ manageGRSFProduct.getElement().getStyle().setFontWeight(FontWeight.BOLD);
+
+ // manage CMS item info
+ manageCModS.setTitle(MANAGE_CMS_ITEMS_TOOLTIP);
+ manageCModS.getElement().getStyle().setFontWeight(FontWeight.BOLD);
// add to navigation bar
nav.add(home);
@@ -150,7 +167,8 @@ public class CkanMetadataManagementPanel extends FlowPanel {
nav.add(uploadToZenodo);
nav.add(insertMeta);
nav.add(editMeta);
- nav.add(manageProduct);
+ nav.add(manageGRSFProduct);
+ nav.add(manageCModS);
nav.setClose(false);
nav.setType(AlertType.INFO);
nav.getElement().getStyle().setMarginBottom(0, Unit.PX);
@@ -272,7 +290,7 @@ public class CkanMetadataManagementPanel extends FlowPanel {
}
});
- manageProduct.addClickHandler(new ClickHandler() {
+ manageGRSFProduct.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -283,6 +301,16 @@ public class CkanMetadataManagementPanel extends FlowPanel {
}
});
+ manageCModS.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+
+ eventBus.fireEvent(new ClickedCMSManageProductButtonEvent());
+
+ }
+ });
+
shareLink.addClickHandler(new ClickHandler() {
@Override
@@ -328,12 +356,12 @@ public class CkanMetadataManagementPanel extends FlowPanel {
}
/**
- * Button to manage the product.. for example in grsf case
+ * Button to manage the GRSF product.. for example in grsf case
*
* @param value true or false
*/
- public void showManageProductButton(boolean value) {
- manageProduct.setVisible(value);
+ public void showManageGRSFProductButton(boolean value) {
+ manageGRSFProduct.setVisible(value);
}
/**
@@ -341,8 +369,26 @@ public class CkanMetadataManagementPanel extends FlowPanel {
*
* @param value the value
*/
- public void enableManageProductButton(boolean value) {
- manageProduct.setEnabled(value);
+ public void enableManageGRSFProductButton(boolean value) {
+ manageGRSFProduct.setEnabled(value);
+ }
+
+ /**
+ * Button to manage the products under moderation via Content Moderation System (CMS)
+ *
+ * @param value true or false
+ */
+ public void showManageCMSProductsButton(boolean value) {
+ manageCModS.setVisible(value);
+ }
+
+ /**
+ * Enable manage CMS products button.
+ *
+ * @param value the value
+ */
+ public void enableManageCMSProductsButton(boolean value) {
+ manageCModS.setEnabled(value);
}
/**
@@ -362,7 +408,7 @@ public class CkanMetadataManagementPanel extends FlowPanel {
public void enablePublishOnZenodoButton(boolean value) {
uploadToZenodo.setEnabled(value);
}
-
+
/**
* Visibility publish on zenodo button.
*
@@ -386,7 +432,8 @@ public class CkanMetadataManagementPanel extends FlowPanel {
myDatasets.setVisible(false);
myOrganizations.setVisible(false);
myGroups.setVisible(false);
- manageProduct.setVisible(false);
+ manageGRSFProduct.setVisible(false);
+ manageCModS.setVisible(false);
}
@@ -406,7 +453,8 @@ public class CkanMetadataManagementPanel extends FlowPanel {
myOrganizations.setVisible(false);
myGroups.setVisible(false);
statistics.setVisible(false);
- manageProduct.setVisible(false);
+ manageGRSFProduct.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 96f05a5..95780b6 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
@@ -14,7 +14,13 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowRevert
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource.CkanPortletResources;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgGroupRole;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
+import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.ManageProductResponse;
import org.gcube.portlets.widgets.ckan2zenodopublisher.client.CkanToZenodoPublisherServiceAsync;
+import org.gcube.portlets.widgets.ckancontentmoderator.client.CkanContentModeratorCheckConfigs;
+import org.gcube.portlets.widgets.ckancontentmoderator.client.CkanContentModeratorWidget;
+import org.gcube.portlets.widgets.ckancontentmoderator.client.util.ModerationQueryStringUtil;
+import org.gcube.portlets.widgets.ckancontentmoderator.client.util.ModerationQueryStringUtil.ModerationBuilder;
+import org.gcube.portlets.widgets.ckancontentmoderator.client.util.QueryStringUtil;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.logical.shared.ResizeEvent;
@@ -25,6 +31,7 @@ import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
+import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -50,27 +57,27 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
private RootPanel rootPanel;
private HandlerManager eventBus;
private CkanConnectorAccessPoint ckanAccessPoint;
- private boolean isManageProductToShow = false;
+ 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 = false;
+ private CkanContentModeratorCheckConfigs ckanModeratorCheckConfig;
/**
* Instantiates a new g cube ckan data catalog panel.
*
- * @param rootPanel
- * the root panel
- * @param eventManager
- * the event manager
+ * @param rootPanel the root panel
+ * @param eventManager the event manager
*/
- public GCubeCkanDataCatalogPanel(
- RootPanel rootPanel, HandlerManager eventManager) {
+ public GCubeCkanDataCatalogPanel(RootPanel rootPanel, HandlerManager eventManager) {
this.rootPanel = rootPanel;
this.eventBus = eventManager;
- //postMessage(obj.toString(), ckanFramePanel.getFrame());
+ // postMessage(obj.toString(), ckanFramePanel.getFrame());
// send message about gateway url
obj = new JSONObject();
String landingPageVREs = Window.Location.getProtocol() + "//" + Window.Location.getHostName() + "/explore";
@@ -85,9 +92,9 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
setTopPanelVisible(true);
// decode parameters (they could have been encoded)
- final Map paramsMap = new HashMap(2);
+ final Map paramsMap = new HashMap(3);
String queryParameters = Window.Location.getQueryString();
- if(queryParameters != null && !queryParameters.isEmpty()){
+ if (queryParameters != null && !queryParameters.isEmpty()) {
String decoded = URL.decodeQueryString(queryParameters); // equals should be encoded too (%3D)
String[] params = decoded.substring(decoded.indexOf("?") + 1).split("&");
for (int i = 0; i < params.length; i++) {
@@ -97,19 +104,32 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
GWT.log("Extracted parameters are " + paramsMap);
}
- String pathParameter = paramsMap.get(GCubeCkanDataCatalog.GET_PATH_PARAMETER); //Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER);
+ String pathParameter = paramsMap.get(GCubeCkanDataCatalog.GET_PATH_PARAMETER); // Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER);
String queryParameter = paramsMap.get(GCubeCkanDataCatalog.GET_QUERY_PARAMETER);// Window.Location.getParameter(GCubeCkanDataCatalog.GET_QUERY_PARAMETER);
+ String queryStringParameter = paramsMap.get(GCubeCkanDataCatalog.GET_QUERY_STRING_PARAMETER);
+
+ if (queryStringParameter != null) {
+ GWT.log("Read "+GCubeCkanDataCatalog.GET_QUERY_STRING_PARAMETER+ " as: "+queryStringParameter);
+ String base64DecodeQueryString = QueryStringUtil.base64DecodeQueryString(queryStringParameter);
+
+ ModerationBuilder moderationBuilder = new ModerationQueryStringUtil()
+ .toModerationBuilder(base64DecodeQueryString);
+ if (moderationBuilder != null) {
+ GWT.log("Moderation Builder is: "+moderationBuilder);
+ CkanContentModeratorWidget ccmw = new CkanContentModeratorWidget(moderationBuilder);
+ ccmw.showAsModal("Manage Items");
+ }
+ }
String browserLocationURL = getBrowserLocationURL();
-
- GCubeCkanDataCatalog.service.getCKanConnector(browserLocationURL,
- pathParameter, queryParameter,
+
+ GCubeCkanDataCatalog.service.getCKanConnector(browserLocationURL, pathParameter, queryParameter,
new AsyncCallback() {
@Override
public void onSuccess(CkanConnectorAccessPoint ckan) {
- if(ckan.isOutsideLoginOnPortal()){
+ if (ckan.isOutsideLoginOnPortal()) {
// the portlet is outside the portal and no user is logged
// in show only home and statistics
@@ -124,36 +144,37 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
ckanAccessPoint = ckan;
instanceCkanFrame(ckan.buildURI());
GCubeCkanDataCatalogPanel.this.rootPanel.remove(loading);
-
+
String browserLocationURL = getBrowserLocationURL();
-
- // check if view per organisation is enabled
- //and performing some actions in this case (e.g. removed the management buttons, etc.)
- GCubeCkanDataCatalog.service.isViewPerVREEnabled(browserLocationURL, new AsyncCallback() {
- @Override
- public void onSuccess(String result) {
- GWT.log("isViewPerVREEnabled?: "+result);
- if(result != null && !result.isEmpty()){
- // hide all management buttons
- managementPanel.removeGenericManagementButtons();
- // set real relative path
- ckanAccessPoint.addPathInfo(result);
- // save this information
- viewPerVREPath = result;
- }
- }
+ // check if view per organisation is enabled
+ // and performing some actions in this case (e.g. removed the management
+ // buttons, etc.)
+ GCubeCkanDataCatalog.service.isViewPerVREEnabled(browserLocationURL,
+ new AsyncCallback() {
- @Override
- public void onFailure(Throwable caught) {
+ @Override
+ public void onSuccess(String result) {
+ GWT.log("isViewPerVREEnabled?: " + result);
+ if (result != null && !result.isEmpty()) {
+ // hide all management buttons
+ managementPanel.removeGenericManagementButtons();
+ // set real relative path
+ ckanAccessPoint.addPathInfo(result);
+ // save this information
+ viewPerVREPath = result;
+ }
+ }
- // ?
+ @Override
+ public void onFailure(Throwable caught) {
- }
- });
+ // ?
+ }
+ });
- if(!ckan.isOutsideLoginOnPortal()){
+ if (!ckan.isOutsideLoginOnPortal()) {
// MANAGE CKAN MANAGEMENT PANEL ACCORDING TO MY ROLE
GCubeCkanDataCatalog.service.getMyRole(new AsyncCallback() {
@@ -184,60 +205,117 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
});
// retrieve organizations
- GCubeCkanDataCatalog.service.getCkanOrganizationsNamesAndUrlsForUser(new AsyncCallback>() {
+ GCubeCkanDataCatalog.service.getCkanOrganizationsNamesAndUrlsForUser(
+ new AsyncCallback>() {
- @Override
- public void onSuccess(List result) {
- ckanOrganizationsPanel.setOrganizations(result);
- }
+ @Override
+ public void onSuccess(List result) {
+ ckanOrganizationsPanel.setOrganizations(result);
+ }
- @Override
- public void onFailure(Throwable caught) {
- // an error message will be displayed
- ckanOrganizationsPanel.setOrganizations(null);
- }
- });
+ @Override
+ public void onFailure(Throwable caught) {
+ // an error message will be displayed
+ ckanOrganizationsPanel.setOrganizations(null);
+ }
+ });
// retrieve groups
- GCubeCkanDataCatalog.service.getCkanGroupsNamesAndUrlsForUser(new AsyncCallback>() {
+ GCubeCkanDataCatalog.service.getCkanGroupsNamesAndUrlsForUser(
+ new AsyncCallback>() {
- @Override
- public void onSuccess(List result) {
- ckanGroupsPanel.setGroups(result);
- }
+ @Override
+ public void onSuccess(List result) {
+ ckanGroupsPanel.setGroups(result);
+ }
- @Override
- public void onFailure(Throwable caught) {
- ckanGroupsPanel.setGroups(null);
- }
- });
+ @Override
+ public void onFailure(Throwable caught) {
+ ckanGroupsPanel.setGroups(null);
+ }
+ });
// check if the url encodes a revert operation to be performed
- if(paramsMap.containsKey(GCubeCkanDataCatalog.REVERT_QUERY_PARAM) &&
- paramsMap.get(GCubeCkanDataCatalog.REVERT_QUERY_PARAM).equals("true")){
+ if (paramsMap.containsKey(GCubeCkanDataCatalog.REVERT_QUERY_PARAM)
+ && paramsMap.get(GCubeCkanDataCatalog.REVERT_QUERY_PARAM).equals("true")) {
eventBus.fireEvent(new ShowRevertOperationWidgetEvent(Window.Location.getHref()));
}
+ final CkanContentModeratorCheckConfigs moderatorcheckConfig = new CkanContentModeratorCheckConfigs();
+
+ final Command whenDone = new Command() {
+
+ @Override
+ public void execute() {
+ GWT.log("onConfigurationLoaded executed");
+ boolean isContentModerationEnabled = false;
+ boolean isModeratorRoleAssingned = false;
+ boolean isExistsMyItemInModeration = false;
+
+ try {
+ isContentModerationEnabled = moderatorcheckConfig.isContentModerationEnabled();
+ isModeratorRoleAssingned = moderatorcheckConfig.isModeratorRoleAssigned();
+ isExistsMyItemInModeration = moderatorcheckConfig.isExistsMyItemInModeration();
+ } catch (Exception e) {
+ GWT.log("Command - Check configs error: " + e.getMessage());
+ }
+
+ ckanModeratorCheckConfig = moderatorcheckConfig;
+
+ GWT.log("Moderation is enabled? " + isContentModerationEnabled);
+ GWT.log("Moderator role is assigned? " + isModeratorRoleAssingned);
+ GWT.log("isExistsMyItemInModeration? " + isExistsMyItemInModeration);
+
+ // Enabling moderation if the moderation is active in the context and
+ // the user has the role of MODERATOR in the context
+ if (isContentModerationEnabled && isModeratorRoleAssingned) {
+ GWT.log("The moderator role is assigned to user and the moderation is enabled in the context");
+ managementPanel.showManageCMSProductsButton(isContentModerationEnabled);
+ managementPanel.enableManageCMSProductsButton(isContentModerationEnabled);
+
+ }
+
+ // Enabling moderation if the moderation is active in the context and
+ // the user has at least one item under moderation or already moderated
+ if (isContentModerationEnabled && isExistsMyItemInModeration) {
+ GWT.log("The user has at least one item moderated or under moderation, and the moderation is enabled in the context");
+ managementPanel.showManageCMSProductsButton(isContentModerationEnabled);
+ managementPanel.enableManageCMSProductsButton(isContentModerationEnabled);
+
+ }
+ }
+ };
+
+ try {
+ moderatorcheckConfig.checkConfigs(whenDone, reloadCatServiceConfig);
+ // reloadCatServiceConfig = false;
+ } catch (Exception e) {
+ GWT.log("Check configs error: " + e.getMessage());
+ }
+
/**
- * Just check if it is enabled.. then we need to listen for dom events coming
+ * (GRSF) Just check if it is enabled.. then we need to listen for dom events
+ * coming
*/
- GCubeCkanDataCatalog.service.isManageProductEnabled(new AsyncCallback() {
+ GCubeCkanDataCatalog.service
+ .isManageProductEnabled(new AsyncCallback() {
- @Override
- public void onSuccess(Boolean result) {
- isManageProductToShow = result;
- managementPanel.showManageProductButton(isManageProductToShow);
+ @Override
+ public void onSuccess(ManageProductResponse manageResponse) {
+ manageProductResponse = manageResponse;
+ if (manageProductResponse != null) {
+ managementPanel.showManageGRSFProductButton(
+ manageProductResponse.isManageEnabled());
+ }
+ }
- }
-
- @Override
- public void onFailure(Throwable caught) {
- isManageProductToShow = false;
- managementPanel.showManageProductButton(isManageProductToShow);
- }
- });
+ @Override
+ public void onFailure(Throwable caught) {
+ managementPanel.showManageGRSFProductButton(false);
+ }
+ });
}
@@ -251,14 +329,12 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
}
});
-
Window.addResizeHandler(new ResizeHandler() {
@Override
public void onResize(ResizeEvent event) {
- GWT.log("onWindowResized width: " + event.getWidth() +
- " height: " + event.getHeight());
+ GWT.log("onWindowResized width: " + event.getWidth() + " height: " + event.getHeight());
updateSize();
}
});
@@ -269,47 +345,45 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
// listen for DOM messages
listenForPostMessage();
-
-
+
CkanToZenodoPublisherServiceAsync.Util.getInstance().checkZenodoEnvironment(new AsyncCallback() {
@Override
public void onFailure(Throwable caught) {
managementPanel.visibilityPublishOnZenodoButton(false);
-
+
}
@Override
public void onSuccess(Boolean result) {
- GWT.log("checkZenodoEnvironment result: "+result);
+ GWT.log("checkZenodoEnvironment result: " + result);
managementPanel.visibilityPublishOnZenodoButton(result);
-
+
}
});
}
-
-
+
/**
* Gets the browser location URL.
*
* @return the browser location URL
*/
public String getBrowserLocationURL() {
-
+
String browserLocationURL = null;
-
+
try {
browserLocationURL = Window.Location.getHref();
- }catch (Exception e) {
+ } catch (Exception e) {
// silent
}
-
- GWT.log("Returning browserLocationURL: "+browserLocationURL);
+
+ GWT.log("Returning browserLocationURL: " + browserLocationURL);
return browserLocationURL;
}
- public static String getLatestSelectedProductIdentifier(){
+ public static String getLatestSelectedProductIdentifier() {
return latestSelectedProductIdentifier;
}
@@ -328,8 +402,7 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
/**
* Sets the top panel visible.
*
- * @param bool
- * the new top panel visible
+ * @param bool the new top panel visible
*/
public void setTopPanelVisible(boolean bool) {
@@ -340,8 +413,7 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
/**
* show or hide edit/insert buttons according to the role.
*
- * @param show
- * the show
+ * @param show the show
*/
public void showEditInsertButtons(boolean show) {
@@ -351,8 +423,7 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
/**
* Instance ckan frame.
*
- * @param ckanUrlConnector
- * the ckan url connector
+ * @param ckanUrlConnector the ckan url connector
* @return the frame
*/
public Frame instanceCkanFrame(String ckanUrlConnector) {
@@ -384,16 +455,15 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
* Update window size.
*/
public void updateSize() {
- /*RootPanel workspace = rootPanel;
- int topBorder = workspace.getAbsoluteTop();
- GWT.log("top: "+topBorder);
- int footer = 30; // 85 footer is bottombar + sponsor
- int rootHeight = Window.getClientHeight() - topBorder - 5 - footer;
- int height = rootHeight - getTopPanelHeight();
- if (ckanFramePanel.getFrame() != null) {
- int newH =managementPanel != null && managementPanel.getCurrentHeight() > 0 ? managementPanel.getOffsetHeight() + height : height;
- ckanFramePanel.getFrame().setHeight(2000+"px");
- }*/
+ /*
+ * RootPanel workspace = rootPanel; int topBorder = workspace.getAbsoluteTop();
+ * GWT.log("top: "+topBorder); int footer = 30; // 85 footer is bottombar +
+ * sponsor int rootHeight = Window.getClientHeight() - topBorder - 5 - footer;
+ * int height = rootHeight - getTopPanelHeight(); if (ckanFramePanel.getFrame()
+ * != null) { int newH =managementPanel != null &&
+ * managementPanel.getCurrentHeight() > 0 ? managementPanel.getOffsetHeight() +
+ * height : height; ckanFramePanel.getFrame().setHeight(2000+"px"); }
+ */
RootPanel workspace = this.rootPanel;
int topBorder = workspace.getAbsoluteTop();
@@ -401,14 +471,17 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
int rootHeight = Window.getClientHeight() - topBorder - 5 - footer;
int height = rootHeight - getTopPanelHeight();
if (this.ckanFramePanel.getFrame() != null) {
- int newH = this.managementPanel != null &&this.managementPanel.getCurrentHeight() > 0? this.managementPanel.getOffsetHeight() + height : height;
+ int newH = this.managementPanel != null && this.managementPanel.getCurrentHeight() > 0
+ ? this.managementPanel.getOffsetHeight() + height
+ : height;
this.ckanFramePanel.getFrame().setHeight(newH + "px");
}
- // workspace.setHeight(height+"px");
+ // workspace.setHeight(height+"px");
}
/**
* Print a message
+ *
* @param string
*/
protected native void printString(String string) /*-{
@@ -419,71 +492,78 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
* Listen for post message.
*/
private final native void listenForPostMessage() /*-{
- var that = this;
- $wnd.addEventListener("message", function(msg) {
- console.log("read message...");
- that.@org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDataCatalogPanel::onPostMessage(Ljava/lang/String;Ljava/lang/String;)(msg.data, msg.origin);
- });
+ var that = this;
+ $wnd
+ .addEventListener(
+ "message",
+ function(msg) {
+ console.log("read message...");
+ that.@org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDataCatalogPanel::onPostMessage(Ljava/lang/String;Ljava/lang/String;)(msg.data, msg.origin);
+ });
}-*/;
/**
* On post message.
*
- * @param data the data
+ * @param data the data
* @param origin the origin
*/
private void onPostMessage(String data, String origin) {
- printString("Read data: "+data+", from origin: "+origin);
- printString("Ckan base url: "+ckanAccessPoint.getBaseUrl());
+ printString("Read data: " + data + ", from origin: " + origin);
+ printString("Ckan base url: " + ckanAccessPoint.getBaseUrl());
// parsing data.. it is a json bean of the type
printString("Incoming message is " + data + " from " + origin);
- if (ckanAccessPoint.getBaseUrl().indexOf(origin)>=0) {
+ if (ckanAccessPoint.getBaseUrl().indexOf(origin) >= 0) {
// The data has been sent from your site
// The data sent with postMessage is stored in event.data
String height = null;
String productId = null;
boolean isProductKeyMissing = false;
- try{
+ try {
JSONValue parsedJSON = JSONParser.parseStrict(data);
JSONObject object = parsedJSON.isObject();
GWT.log("Object is " + object);
- if(object != null){
- //Supporting Task #12286: parsing the translate values for 'dataset', 'organization' and so on
- if(object.containsKey("translate")){
+ if (object != null) {
+ // Supporting Task #12286: parsing the translate values for 'dataset',
+ // 'organization' and so on
+ if (object.containsKey("translate")) {
JSONObject theTranslate = (JSONObject) object.get("translate");
GWT.log("theTranslate is " + object);
for (String key : theTranslate.keySet()) {
- //GWT.log("theTranslate key " + key);
+ // GWT.log("theTranslate key " + key);
String value = theTranslate.get(key).isString().stringValue();
- printString("Customizing navigation link '" + key +"' with translate: "+value);
- managementPanel.customizeLabelAccordingTranslate(key,value);
+ printString("Customizing navigation link '" + key + "' with translate: " + value);
+ managementPanel.customizeLabelAccordingTranslate(key, value);
}
- }else if(object.containsKey("height")){
+ } else if (object.containsKey("height")) {
height = object.get("height").isString().stringValue();
- if(object.containsKey("product"))
+ if (object.containsKey("product"))
productId = object.get("product").isString().stringValue();
else
isProductKeyMissing = true;
}
}
- }catch(Exception e){
+ } catch (Exception e) {
GWT.log("Exception is " + e);
}
- if(height != null)
+ if (height != null)
setIFrameHeight(height.toString());
// show or hide the manage product button
- if(!isProductKeyMissing){
+ if (!isProductKeyMissing) {
latestSelectedProductIdentifier = productId.toString();
managementPanel.enableShareItemButton(productId != null && !productId.isEmpty());
managementPanel.enablePublishOnZenodoButton(productId != null && !productId.isEmpty());
- managementPanel.enableManageProductButton(productId != null && !productId.isEmpty() && isManageProductToShow);
+ managementPanel.enableManageGRSFProductButton(
+ productId != null && !productId.isEmpty() && manageProductResponse.isManageEnabled());
+ // managementPanel.enableManageCMSProductsButton(productId != null &&
+ // !productId.isEmpty() && moderationProductResponse.isManageEnabled());
}
} else {
// The data hasn't been sent from your site!
@@ -493,30 +573,43 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
}
-
/**
* Sets the i frame height.
*
* @param height the new i frame height
*/
- private void setIFrameHeight(String height){
+ private void setIFrameHeight(String height) {
String parsedHeight = null;
- if(height==null || height.isEmpty())
+ if (height == null || height.isEmpty())
return;
- if(height.contains("px")){
+ if (height.contains("px")) {
parsedHeight = height;
- }else{
- try{
+
+ // Setting parsedHeight to null if the height is 0px
+ String checkHeight = height;
+ checkHeight = checkHeight.replaceAll("px", "");
+ try {
+ int intH = Integer.parseInt(checkHeight);
+ if (intH == 0) {
+ parsedHeight = null;
+ printString("height is 0px so setting parsedHeight = null");
+ }
+ } catch (Exception e) {
+
+ }
+
+ } else {
+ try {
int intH = Integer.parseInt(height);
parsedHeight = intH + " px";
- }catch(Exception e ){
+ } catch (Exception e) {
}
}
- if(parsedHeight!=null){
- GWT.log("Setting new height for ckan iFrame: "+height);
+ if (parsedHeight != null) {
+ GWT.log("Setting new height for ckan iFrame: " + height);
this.ckanFramePanel.getFrame().setHeight(height);
}
}
@@ -533,9 +626,10 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
/**
* Return the catalogue url (e.g. http://ckan-d-d4s.d4science.org:443/)
+ *
* @return
*/
- public String getCatalogueUrl(){
+ public String getCatalogueUrl() {
printString("Base url for iframe is " + ckanAccessPoint.getCatalogueBaseUrl());
return ckanAccessPoint.getCatalogueBaseUrl();
@@ -583,11 +677,12 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
/**
* Show management panel
+ *
* @param show
*/
- public void showManagementPanel(boolean show){
+ public void showManagementPanel(boolean show) {
- managementPanel.showManageProductButton(show);
+ managementPanel.showManageGRSFProductButton(show);
}
@@ -598,4 +693,7 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate {
return viewPerVREPath != null;
}
+ public CkanContentModeratorCheckConfigs getCkanModeratorConfig() {
+ return ckanModeratorCheckConfig;
+ }
}
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 a9d72f4..2ff0c7d 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
@@ -28,6 +28,7 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCat
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server.thread.UpdateItemCatalogueResource;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgGroupRole;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint;
+import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.ManageProductResponse;
import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.OrganizationBean;
import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
@@ -332,10 +333,10 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
// String scopePerCurrentUrl = SessionUtil.getScopeFromClientUrl(getThreadLocalRequest());
//
// CkanConnectorAccessPoint ckanAP = SessionUtil.getCkanAccessPoint(this.getThreadLocalRequest().getSession(), scopePerCurrentUrl);
- // logger.info("Logout from CKAN for: "+username +" by token: "+ckanAP.getGcubeTokenValue());
+ // LOG.info("Logout from CKAN for: "+username +" by token: "+ckanAP.getGcubeTokenValue());
//
// String ckanConnectorLogut = getServletContext().getInitParameter(CKANCONNECTORLOGOUT);
- // logger.debug(CKANCONNECTORLOGOUT + " is: "+ckanConnectorLogut);
+ // LOG.debug(CKANCONNECTORLOGOUT + " is: "+ckanConnectorLogut);
//
// CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(ckanAP.getBaseUrl(), ckanConnectorLogut);
// ckan.addGubeToken(ckanAP.getGcubeTokenValue());
@@ -506,25 +507,54 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem
* @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#isManageProductEnabled()
*/
@Override
- public boolean isManageProductEnabled() {
+ public ManageProductResponse isManageProductEnabled() {
logger.info("Checking if the manage product button needs to be shown or not for the current context");
String scopePerCurrentUrl = SessionUtil.getScopeFromClientUrl(getThreadLocalRequest());
DataCatalogue catalogue = getCatalogue(scopePerCurrentUrl);
if(catalogue == null){
logger.warn("There is no catalogue instance here..., returning false");
- return false;
+ return new ManageProductResponse(false, scopePerCurrentUrl);
}
else{
try{
- boolean toReturn = catalogue.isManageProductEnabled();
- logger.info("Will manage product be enabled for this user? " + Boolean.toString(toReturn));
- return 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;
}catch(Exception e){
logger.error("Unable to determine if the manage product needs to be shown or not", e);
- return false;
+ return new ManageProductResponse(false, scopePerCurrentUrl);
}
}
}
+
+ @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/server/SessionUtil.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java
index fa3ea10..653fbc3 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java
@@ -33,7 +33,7 @@ public class SessionUtil {
public static final String CKAN_END_POINT = "CKAN_END_POINT";
public static final String CKAN_ACCESS_POINT = "CKAN_ACCESS_POINT";
public static final String GCUBE_REQUEST_URL = "gcube-request-url";
- //private static Logger logger = LoggerFactory.getLogger(SessionUtil.class);
+ //private static Logger LOG = LoggerFactory.getLogger(SessionUtil.class);
private static final Log logger = LogFactoryUtil.getLog(SessionUtil.class);
/**
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/UserUtil.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/UserUtil.java
index 30bb633..6bec2c9 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/UserUtil.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/UserUtil.java
@@ -42,7 +42,7 @@ import com.liferay.portal.kernel.log.LogFactoryUtil;
*/
public class UserUtil {
- //private static Logger logger = LoggerFactory.getLogger(UserUtil.class);
+ //private static Logger LOG = LoggerFactory.getLogger(UserUtil.class);
private static final Log logger = LogFactoryUtil.getLog(UserUtil.class);
private static final String ADD_USER_TO_OTHER_ORG_KEY = "ADD_USER_TO_OTHER_ORG_KEY";
diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/thread/UpdateItemCatalogueResource.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/thread/UpdateItemCatalogueResource.java
index 134a469..8c114f2 100644
--- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/thread/UpdateItemCatalogueResource.java
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/thread/UpdateItemCatalogueResource.java
@@ -24,20 +24,20 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
-
/**
- * This thread is scheduled to update the resource related to org.gcube.datacatalogue.ProductCatalogue
+ * This thread is scheduled to update the resource related to
+ * org.gcube.datacatalogue.ProductCatalogue
* {org.gcube.portlets.widgets.ckandatapublisherwidget.server.threads}
+ *
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
*/
-public class UpdateItemCatalogueResource extends Thread{
+public class UpdateItemCatalogueResource extends Thread {
private String currentScope;
private String cleanUrl;
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(UpdateItemCatalogueResource.class);
-
- public static final String APPLICATION_ID_CATALOGUE_MANAGER = "gCat";
+ public static final String APP_ID_CATALOGUE_APPLICATION_PROFILE = "service-account-gcat";
/**
* @param currentScope
@@ -52,55 +52,57 @@ public class UpdateItemCatalogueResource extends Thread{
@Override
public void run() {
- try{
+ try {
- if(cleanUrl == null || cleanUrl.isEmpty() || currentScope==null || currentScope.isEmpty()){
+ if (cleanUrl == null || cleanUrl.isEmpty() || currentScope == null || currentScope.isEmpty()) {
logger.warn("One or more arguments {}{} is wrong. Exiting", currentScope, cleanUrl);
return;
}
- ScopeBean scope = new ScopeBean(currentScope);
- if(!scope.is(Type.VRE)){
+ ScopeBean scope = new ScopeBean(currentScope);
+ if (!scope.is(Type.VRE)) {
logger.warn("{} is not a VRE scope", currentScope);
return;
}
// set the scope of the root infrastructure
String rootInfrastructure = getRootScope();
- ScopeProvider.instance.set("/"+rootInfrastructure);
+ ScopeProvider.instance.set("/" + rootInfrastructure);
// check if the resource is present
- Query q = new QueryBox("for $profile in collection('/db/Profiles/GenericResource')//Resource " +
- "where $profile/Profile/SecondaryType/string() eq 'ApplicationProfile' and $profile/Profile/Body/AppId/string() " +
- " eq '" + APPLICATION_ID_CATALOGUE_MANAGER + "'" +
- "return $profile");
+ Query q = new QueryBox("for $profile in collection('/db/Profiles/GenericResource')//Resource "
+ + "where $profile/Profile/SecondaryType/string() eq 'ApplicationProfile' and $profile/Profile/Body/AppId/string() "
+ + " eq '" + APP_ID_CATALOGUE_APPLICATION_PROFILE + "'" + "return $profile");
DiscoveryClient client = client();
List appProfile = client.submit(q);
- if (appProfile == null || appProfile.size() == 0)
+ if (appProfile == null || appProfile.size() == 0)
throw new Exception("this applicationProfile is not registered in the infrastructure");
- else{
+ else {
String elem = appProfile.get(0);
- DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement();
XPathHelper helper = new XPathHelper(node);
// look for the scope
List currValue = null;
- currValue = helper.evaluate(String.format("/Resource/Profile/Body/EndPoint/Scope/text()[.='%s']", scope));
+ currValue = helper
+ .evaluate(String.format("/Resource/Profile/Body/EndPoint/Scope/text()[.='%s']", scope));
logger.debug("Result is " + currValue);
if (currValue == null || currValue.isEmpty()) {
logger.info("Adding the following url " + cleanUrl);
- String endpoint2Add = ""+currentScope+""+cleanUrl+"";
+ String endpoint2Add = "" + currentScope + "" + cleanUrl
+ + "";
GenericResource toUpdate = clientFor(GenericResource.class).submit(q).get(0);
try {
- docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Element body = toUpdate.profile().body();
- Node fragmentNode = docBuilder.parse(new InputSource(new StringReader(endpoint2Add))).getDocumentElement();
+ Node fragmentNode = docBuilder.parse(new InputSource(new StringReader(endpoint2Add)))
+ .getDocumentElement();
fragmentNode = body.getOwnerDocument().importNode(fragmentNode, true);
body.appendChild(fragmentNode);
} catch (Exception e) {
@@ -111,20 +113,21 @@ public class UpdateItemCatalogueResource extends Thread{
logger.info("Resource updated!");
}
}
- }catch(Exception e){
+ } catch (Exception e) {
logger.error("Failed to execute this check", e);
- }finally{
+ } finally {
ScopeProvider.instance.reset();
}
}
- private String getRootScope() throws Exception{
+ private String getRootScope() throws Exception {
- if(currentScope == null || currentScope.isEmpty())
+ if (currentScope == null || currentScope.isEmpty())
throw new Exception("Scope was not specified");
return currentScope.split("/")[1];
}
+
}
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
new file mode 100644
index 0000000..22037db
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/ManageProductResponse.java
@@ -0,0 +1,92 @@
+package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared;
+
+import java.io.Serializable;
+
+/**
+ * The Class ManageProductResponse.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * Feb 17, 2022
+ */
+public class ManageProductResponse implements Serializable {
+
+ /**
+ *
+ */
+ 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;
+
+ /**
+ * Instantiates a new manage product response.
+ */
+ public ManageProductResponse() {
+
+ }
+
+ /**
+ * Instantiates a new manage product response.
+ *
+ * @param isManageEnabled the is manage enabled
+ * @param scope the scope
+ */
+ public ManageProductResponse(boolean isManageEnabled, String scope) {
+ this.isManageEnabled = isManageEnabled;
+ this.scope = scope;
+ }
+
+ /**
+ * Checks if is manage enabled.
+ *
+ * @return true, if is manage enabled
+ */
+ public boolean isManageEnabled() {
+ return isManageEnabled;
+ }
+
+ /**
+ * Gets the scope.
+ *
+ * @return the scope
+ */
+ public String getScope() {
+ return scope;
+ }
+
+ /**
+ * Sets the manage enabled.
+ *
+ * @param isManageEnabled the new manage enabled
+ */
+ public void setManageEnabled(boolean isManageEnabled) {
+ this.isManageEnabled = isManageEnabled;
+ }
+
+ /**
+ * Sets the scope.
+ *
+ * @param scope the new scope
+ */
+ public void setScope(String scope) {
+ this.scope = scope;
+ }
+
+ /**
+ * To string.
+ *
+ * @return the string
+ */
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("ManageProductResponse [isManageEnabled=");
+ builder.append(isManageEnabled);
+ builder.append(", scope=");
+ builder.append(scope);
+ builder.append("]");
+ return builder.toString();
+ }
+
+}
diff --git a/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml b/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml
index faf87aa..dde449b 100644
--- a/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml
+++ b/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml
@@ -14,24 +14,32 @@
-
+
-
+
-
-
-
+
+
+
-
-
+
+
+
-
-
-
+
+
+
diff --git a/src/main/webapp/GCubeCkanDataCatalog.css b/src/main/webapp/GCubeCkanDataCatalog.css
index 14e626a..e8cb87e 100644
--- a/src/main/webapp/GCubeCkanDataCatalog.css
+++ b/src/main/webapp/GCubeCkanDataCatalog.css
@@ -148,4 +148,13 @@ h1 {
.button-as-role-style {
padding-left: 0px !important;
color: black !important;
+}
+
+.modal-content-moderator {
+ width: 1200px;
+ min-height: 720px;
+}
+
+.modal-content-moderator .modal-body {
+ min-height: 720px;
}
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index f46f0c0..3d0747d 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -55,12 +55,23 @@
org.gcube.portlets_widgets.catalogue_sharing_widget.server.ShareServicesImpl
-
+
ckanToZenodoServlet
org.gcube.portlets.widgets.ckan2zenodopublisher.server.CkanToZenodoPublisherServiceImpl
+
+ ckanContentModeratorServlet
+ org.gcube.portlets.widgets.ckancontentmoderator.server.CkanContentModeratorServiceImpl
+
+
+
+ ckanContentModeratorServlet
+ /gCubeCkanDataCatalog/ckanContentModeratorService
+
+
+
ckanToZenodoServlet
/gCubeCkanDataCatalog/ckantozenodo