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.portlets.gcubeckan.gcubeckandatacatalog.client.event.EditMetadataEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.EditMetadataEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.InsertMetadataEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.InsertMetadataEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.PublishOnZenodoEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.PublishOnZenodoEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShareLinkEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShareLinkEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowDatasetsEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowDatasetsEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowGroupsEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowGroupsEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowHomeEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowHomeEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowManageProductWidgetEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowManageProductWidgetEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowOrganizationsEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowOrganizationsEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowRevertOperationWidgetEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowRevertOperationWidgetEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowStatisticsEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowStatisticsEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowTypesEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowTypesEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDataCatalogPanel; 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.ckandatapublisherwidget.client.events.CloseCreationFormEvent; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.form.CreateDatasetForm; import org.gcube.portlets_widgets.catalogue_sharing_widget.client.ShareCatalogueWidget; import com.github.gwtbootstrap.client.ui.Modal; import com.github.gwtbootstrap.client.ui.event.HideEvent; import com.github.gwtbootstrap.client.ui.event.HideHandler; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.rpc.AsyncCallback; /** * The Class CkanEventHandlerManager. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @author Costantino Perciante costantino.perciante@isti.cnr.it Jun 10, 2016 */ public class CkanEventHandlerManager { protected static final String WIDGET_CREATE_TITLE = "Publish Item"; private HandlerManager eventBus = new HandlerManager(null); private GCubeCkanDataCatalogPanel panel; private String logoutFromCKANURL; /** * Instantiates a new ckan event handler manager. */ public CkanEventHandlerManager() { bind(); } /** * Sets the panel. * * @param panel the panel to set */ public void setPanel(GCubeCkanDataCatalogPanel panel) { this.panel = panel; } /** * Bind. */ private void bind() { // bind on show home event eventBus.addHandler(ShowHomeEvent.TYPE, new ShowHomeEventHandler() { @Override public void onShowHome(ShowHomeEvent showHomeEvent) { String pathToUse = panel.isViewPerVREEnabled() ? panel.getPathInfo() : null; String request = getCkanRequest(pathToUse, null); panel.instanceCkanFrame(request); } }); // bind on insert metadata eventBus.addHandler(InsertMetadataEvent.TYPE, new InsertMetadataEventHandler() { @Override public void onInsertMetadata(InsertMetadataEvent loadSelecteReleaseEvent) { final Modal modal = new Modal(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"); modal.add(new CreateDatasetForm(eventBus)); modal.setCloseVisible(true); modal.show(); // hide any popup panel opened modal.addHideHandler(new HideHandler() { @Override public void onHide(HideEvent hideEvent) { eventBus.fireEvent(new CloseCreationFormEvent()); } }); } }); // bind on edit (TODO) eventBus.addHandler(EditMetadataEvent.TYPE, new EditMetadataEventHandler() { @Override public void onEditMetadata(EditMetadataEvent editMetadataEvent) { // TODO Auto-generated method stub } }); // show datasets event 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); } }); eventBus.addHandler(ShowTypesEvent.TYPE, new ShowTypesEventHandler() { @Override public void onShowTypes(ShowTypesEvent showTypes) { String request = getCkanRequest("/type", null); panel.instanceCkanFrame(request); } }); eventBus.addHandler( ShowOrganizationsEvent.TYPE, new ShowOrganizationsEventHandler() { @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() { @Override public void onShowGroups(ShowGroupsEvent showGroupsEvent) { //panel.instanceCkanFrame(request); if(showGroupsEvent.isOwnOnly()) panel.showGroups(); else{ String request = getCkanRequest("/group", null); panel.instanceCkanFrame(request); } } }); // show statistics event eventBus.addHandler( ShowStatisticsEvent.TYPE, new ShowStatisticsEventHandler() { @Override public void onShowStatistics( ShowStatisticsEvent showStatisticsEvent) { String request = getCkanRequest("/stats", null); panel.instanceCkanFrame(request); } }); // eventBus.addHandler(NotifyLogoutEvent.TYPE, new NotifyLogoutEventHandler() { // // @Override // public void onLogout(NotifyLogoutEvent editMetadataEvent) { // // // CKanLeaveFrame frame = new CKanLeaveFrame(GCubeCkanDataCatalog.CKAN_LOGUT_SERVICE); // // DOM.appendChild(RootPanel.getBodyElement(), frame.getElement()); // } // }); // // eventBus.addHandler(IFrameInstanciedEvent.TYPE, new IFrameInstanciedEventHandler() { // // @Override // public void onNewInstance(IFrameInstanciedEvent iFrameInstanciedEvent) { // // panel.updateSize(); // if(logoutFromCKANURL==null) // instanceLogoutSystem(); // } // }); eventBus.addHandler(ShowManageProductWidgetEvent.TYPE, new ShowManageProductWidgetEventHandler() { @Override public void onShowManageProductWidget(ShowManageProductWidgetEvent event) { new ManageProductWidget(event.getProductIdentifier(), eventBus); } }); eventBus.addHandler(ShowRevertOperationWidgetEvent.TYPE, new ShowRevertOperationWidgetEventHandler() { @Override public void onShowRevertOperationWidgetEvent( ShowRevertOperationWidgetEvent event) { new ManageProductWidget(event.getEncryptedUrl(), eventBus); } }); eventBus.addHandler(ShareLinkEvent.TYPE, new ShareLinkEventHandler() { @Override public void onShareLink(ShareLinkEvent event) { new ShareCatalogueWidget(event.getUuidItem()); } }); // hide management panel if user is not allowed to manage eventBus.addHandler(HideManagementPanelEvent.TYPE, new HideManagementPanelEventHandler() { @Override public void onEvent(HideManagementPanelEvent hideEvent) { panel.showManagementPanel(false); } }); eventBus.addHandler(PublishOnZenodoEvent.TYPE, new PublishOnZenodoEventHandler() { @Override public void onPublishOnZenodo(PublishOnZenodoEvent publishOnZenodoEvent) { if(publishOnZenodoEvent.getUuidItem()!=null) { CkanToZendoPublisherWidget publisherWidget = new CkanToZendoPublisherWidget(); CatalogueItem ci = new CatalogueItem(publishOnZenodoEvent.getUuidItem(), null, CatalogueItem.ITEM_TYPE.DATASET); publisherWidget.publishOnZenodo(ci); } } }); } /** * Gets the ckan request. * * @param pathInfo the path info * @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()); pathInfo = CkanConnectorAccessPoint.checkNullString(pathInfo); query = CkanConnectorAccessPoint.checkNullString(query); ckan.addPathInfo(pathInfo); ckan.addQueryString(query); return ckan.buildURI(); } /** * Instance logout system. */ private void instanceLogoutSystem() { GCubeCkanDataCatalog.service.logoutFromCkanURL(new AsyncCallback() { @Override public void onSuccess(String result) { logoutFromCKANURL = result; GWT.log("Loaded logout url: "+logoutFromCKANURL); performLogoutOnBrowserClosedEvent(logoutFromCKANURL); } @Override public void onFailure(Throwable caught) { } }); } /** * Perform logout on browser closed event. * * @param logoutService the logout service */ private static native void performLogoutOnBrowserClosedEvent(String logoutService)/*-{ var validNavigation = false; function wireUpEvents() { console.log("wireUpEvents"); var dont_confirm_leave = 1; //set dont_confirm_leave to 1 when you want the user to be able to leave without confirmation var leave_message = 'You sure you want to leave?' function disconnect(e) { if (!validNavigation) { var logoutPerformed = false; var ifrm = $doc.createElement("iframe"); ifrm.id = 'logout-iframe'; ifrm.onload = function() { logoutPerformed = true; console.log("ifrm loaded exit is: " + exit); } ifrm.style.width = "1px"; ifrm.style.height = "1px"; ifrm.src = logoutService; $doc.body.appendChild(ifrm); //sleep 500ms in order to loasad disconnect response performed by IFrame function sleep(milliseconds) { var start = new Date().getTime(); for (var i = 0; i < 1e7; i++) { if ((new Date().getTime() - start) > milliseconds || logoutPerformed) { break; } } } //sleep 500ms in order to have time to load disconnect response returned by IFrame sleep(500); if (dont_confirm_leave !== 1) { if (!e) e = window.event; //e.cancelBubble is supported by IE - this will kill the bubbling process. e.cancelBubble = true; e.returnValue = leave_message; //e.stopPropagation works in Firefox. if (e.stopPropagation) { e.stopPropagation(); e.preventDefault(); } //return works for Chrome and Safari return leave_message; } } } window.onbeforeunload = disconnect; // Attach the event keypress to exclude the F5 refresh $wnd.$(document).bind('keypress', function(e) { if (e.keyCode == 116) { validNavigation = true; console.log("keypress: " + validNavigation); } }); // Attach the event click for all links in the page $wnd.$("a").bind("click", function() { validNavigation = true; console.log("click: " + validNavigation); }); // Attach the event submit for all forms in the page $wnd.$("form").bind("submit", function() { validNavigation = true; console.log("form: " + validNavigation); }); // Attach the event click for all inputs in the page $wnd.$("input[type=submit]").bind("click", function() { validNavigation = true; console.log("submit: " + validNavigation); }); } // Wire up the events as soon as the DOM tree is ready $wnd.$(document).ready(function() { wireUpEvents(); }); //wireUpEvents(); }-*/; /** * Gets the event bus. * * @return the event bus */ public HandlerManager getEventBus() { return eventBus; } /** * Gets the logout from ckanurl. * * @return the logoutFromCKANURL */ public String getLogoutFromCKANURL() { return logoutFromCKANURL; } }