diff --git a/.project b/.project index 51b285c..d2ecc22 100644 --- a/.project +++ b/.project @@ -46,6 +46,7 @@ org.eclipse.wst.common.modulecore.ModuleCoreNature org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + org.maven.ide.eclipse.maven2Nature org.eclipse.wst.common.project.facet.core.nature org.eclipse.wst.jsdt.core.jsNature com.google.gwt.eclipse.core.gwtNature diff --git a/.settings/com.google.gwt.eclipse.core.prefs b/.settings/com.google.gwt.eclipse.core.prefs index f23a752..3acdfdb 100644 --- a/.settings/com.google.gwt.eclipse.core.prefs +++ b/.settings/com.google.gwt.eclipse.core.prefs @@ -1,2 +1,2 @@ eclipse.preferences.version=1 -entryPointModules= +entryPointModules=org.gcube.portlets.gcubeckan.gcubeckandatacatalog.GCubeCkanDataCatalog diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 0df7cc0..1afbdfc 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -4,7 +4,10 @@ - + + uses + + uses 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 8eaf13f..21bd063 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 @@ -1,9 +1,14 @@ + package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; 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.IFrameInstanciedEvent; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.IFrameInstanciedEventHandler; 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.NotifyLogoutEvent; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.NotifyLogoutEventHandler; 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.ShowStatisticsEvent; @@ -13,6 +18,7 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserDa import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserOrganizationsEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserOrganizationsEventHandler; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDataCatalogPanel; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.CreateDatasetForm; import com.github.gwtbootstrap.client.ui.Modal; @@ -20,12 +26,9 @@ import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; - /** - * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @author Costantino Perciante costantino.perciante@isti.cnr.it - * Jun 10, 2016 + * @author Costantino Perciante costantino.perciante@isti.cnr.it Jun 10, 2016 */ public class CkanEventHandlerManager { @@ -39,193 +42,235 @@ public class CkanEventHandlerManager { bind(); } - /** - * @param panel the panel to set + * @param panel + * the panel to set */ public void setPanel(GCubeCkanDataCatalogPanel panel) { + this.panel = panel; } - - private void bind() { - + // bind on show home event eventBus.addHandler(ShowHomeEvent.TYPE, new ShowHomeEventHandler() { - + @Override public void onShowHome(ShowHomeEvent showHomeEvent) { - - // redirect - String baseUrlCkanConnector = panel.getBaseURLCKANConnector(); - panel.instanceCkanFrame(baseUrlCkanConnector); - + + CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint( panel.getBaseURLCKANConnector()); + ckan.addGubeToken(panel.getGcubeTokenValueToCKANConnector()); + panel.instanceCkanFrame(ckan.buildURI()); } }); - // bind on insert metadata eventBus.addHandler(InsertMetadataEvent.TYPE, new InsertMetadataEventHandler() { - @Override - public void onInsertMetadata(InsertMetadataEvent loadSelecteReleaseEvent) { + @Override + public void onInsertMetadata( + InsertMetadataEvent loadSelecteReleaseEvent) { - final Modal modal = new Modal(true, true); + final Modal modal = new Modal(true, true); + // request who's doing the insert + GCubeCkanDataCatalog.service.getUser(new AsyncCallback() { - // request who's doing the insert - GCubeCkanDataCatalog.service.getUser(new AsyncCallback() { + @Override + public void onSuccess(String username) { - @Override - public void onSuccess(String username) { - - if(username != null){ - modal.setTitle("Publish Product"); - modal.addStyleName("insert-metadata-modal-style"); - modal.add(new CreateDatasetForm(username)); - modal.setCloseVisible(true); - modal.show(); + if (username != null) { + modal.setTitle("Publish Product"); + modal.addStyleName("insert-metadata-modal-style"); + modal.add(new CreateDatasetForm(username)); + modal.setCloseVisible(true); + modal.show(); + } + else + Window.alert("Please, logout and login again then retry."); } - else - Window.alert("Please, logout and login again then retry."); + @Override + public void onFailure(Throwable caught) { + + Window.alert("Please, logout and login again then retry."); + } + }); + } + }); + // 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( + ShowUserDatasetsEvent.TYPE, new ShowUserDatasetsEventHandler() { + + @Override + public void onShowDatasets( + ShowUserDatasetsEvent showUserDatasetsEvent) { + + // // get the current path + // String currentPath = Window.Location.getHref(); + // + // // check if the "path" parameter is already present + // String currentParameter = + // Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER); + // + // // the final path must be + // String queryPar = "?" + + // GCubeCkanDataCatalog.GET_PATH_PARAMETER + "=" + + // "/dashboard/datasets"; + // + // String finalPath; + // + // if(currentParameter == null){ + // finalPath = currentPath + queryPar; + // + // }else{ + // + // // remove from the first "path" on + // int index = + // currentPath.lastIndexOf("?"+GCubeCkanDataCatalog.GET_PATH_PARAMETER); + // String firstPartOfThePath = currentPath.substring(0, + // index); + // finalPath = firstPartOfThePath + queryPar; + // + // } + // + // // redirect + // Window.Location.assign(finalPath); + // redirect +// String baseUrlCkanConnector = panel.getBaseURLCKANConnector(); + CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint( panel.getBaseURLCKANConnector()); + ckan.addGubeToken(panel.getGcubeTokenValueToCKANConnector()); + ckan.addPathInfo("/dashboard/datasets"); + panel.instanceCkanFrame(ckan.buildURI()); + } + }); + eventBus.addHandler( + ShowUserOrganizationsEvent.TYPE, + new ShowUserOrganizationsEventHandler() { + + @Override + public void onShowOrganizations( + ShowUserOrganizationsEvent showUserDatasetsEvent) { + + // get the current path + /*String currentPath = Window.Location.getHref(); + // check if the "path" parameter is already present + String currentParameter = + Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER); + // the final path must be + String queryPar = + "?" + GCubeCkanDataCatalog.GET_PATH_PARAMETER + "=" + + "/dashboard/organizations"; + String finalPath; + if (currentParameter == null) { + finalPath = currentPath + queryPar; } + else { + // remove from the first "path" on + int index = + currentPath.lastIndexOf("?" + + GCubeCkanDataCatalog.GET_PATH_PARAMETER); + String firstPartOfThePath = + currentPath.substring(0, index); + finalPath = firstPartOfThePath + queryPar; + } + Window.Location.assign(finalPath); + */ + // redirect + CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint( panel.getBaseURLCKANConnector()); + ckan.addGubeToken(panel.getGcubeTokenValueToCKANConnector()); + ckan.addPathInfo("/dashboard/organizations"); + panel.instanceCkanFrame(ckan.buildURI()); + } + }); + // show statistics event + eventBus.addHandler( + ShowStatisticsEvent.TYPE, new ShowStatisticsEventHandler() { + + @Override + public void onShowStatistics( + ShowStatisticsEvent showStatisticsEvent) { + + // get the current path + /*String currentPath = Window.Location.getHref(); + // check if the "path" parameter is already present + String currentParameter = + Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER); + // the final path must be + String queryPar = + "?" + GCubeCkanDataCatalog.GET_PATH_PARAMETER + "=" + + "/stats"; + String finalPath; + if (currentParameter == null) { + finalPath = currentPath + queryPar; + } + else { + // remove from the first "path" on + int index = + currentPath.lastIndexOf("?" + + GCubeCkanDataCatalog.GET_PATH_PARAMETER); + String firstPartOfThePath = + currentPath.substring(0, index); + finalPath = firstPartOfThePath + queryPar; + } + // redirect + Window.Location.assign(finalPath);*/ + + CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint( panel.getBaseURLCKANConnector()); + ckan.addGubeToken(panel.getGcubeTokenValueToCKANConnector()); + ckan.addPathInfo("/stats"); + panel.instanceCkanFrame(ckan.buildURI()); + } + }); + + eventBus.addHandler(NotifyLogoutEvent.TYPE, new NotifyLogoutEventHandler() { + + @Override + public void onLogout(NotifyLogoutEvent editMetadataEvent) { + + GCubeCkanDataCatalog.service.logoutFromCkan(new AsyncCallback() { @Override public void onFailure(Throwable caught) { - Window.alert("Please, logout and login again then retry."); + // TODO Auto-generated method stub + + } + + @Override + public void onSuccess(Void result) { + + // TODO Auto-generated method stub } }); } }); - // bind on edit (TODO) - eventBus.addHandler(EditMetadataEvent.TYPE, new EditMetadataEventHandler() { + eventBus.addHandler(IFrameInstanciedEvent.TYPE, new IFrameInstanciedEventHandler() { @Override - public void onEditMetadata(EditMetadataEvent editMetadataEvent) { - // TODO Auto-generated method stub + public void onNewInstance(IFrameInstanciedEvent iFrameInstanciedEent) { + panel.updateSize(); } }); - - // show datasets event - eventBus.addHandler(ShowUserDatasetsEvent.TYPE, new ShowUserDatasetsEventHandler() { - - @Override - public void onShowDatasets(ShowUserDatasetsEvent showUserDatasetsEvent) { - -// // get the current path -// String currentPath = Window.Location.getHref(); -// -// // check if the "path" parameter is already present -// String currentParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER); -// -// // the final path must be -// String queryPar = "?" + GCubeCkanDataCatalog.GET_PATH_PARAMETER + "=" + "/dashboard/datasets"; -// -// String finalPath; -// -// if(currentParameter == null){ -// finalPath = currentPath + queryPar; -// -// }else{ -// -// // remove from the first "path" on -// int index = currentPath.lastIndexOf("?"+GCubeCkanDataCatalog.GET_PATH_PARAMETER); -// String firstPartOfThePath = currentPath.substring(0, index); -// finalPath = firstPartOfThePath + queryPar; -// -// } -// -// // redirect -// Window.Location.assign(finalPath); - - // redirect - String baseUrlCkanConnector = panel.getBaseURLCKANConnector(); - baseUrlCkanConnector += "/dashboard/datasets"; - panel.instanceCkanFrame(baseUrlCkanConnector); - - } - }); - - eventBus.addHandler(ShowUserOrganizationsEvent.TYPE, new ShowUserOrganizationsEventHandler() { - - @Override - public void onShowOrganizations( - ShowUserOrganizationsEvent showUserDatasetsEvent) { - - // get the current path - String currentPath = Window.Location.getHref(); - - // check if the "path" parameter is already present - String currentParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER); - - // the final path must be - String queryPar = "?" + GCubeCkanDataCatalog.GET_PATH_PARAMETER + "=" + "/dashboard/organizations"; - - String finalPath; - - if(currentParameter == null){ - finalPath = currentPath + queryPar; - - }else{ - - // remove from the first "path" on - int index = currentPath.lastIndexOf("?"+GCubeCkanDataCatalog.GET_PATH_PARAMETER); - String firstPartOfThePath = currentPath.substring(0, index); - finalPath = firstPartOfThePath + queryPar; - - } - - // redirect - Window.Location.assign(finalPath); - - } - }); - - // show statistics event - eventBus.addHandler(ShowStatisticsEvent.TYPE, new ShowStatisticsEventHandler() { - - @Override - public void onShowStatistics(ShowStatisticsEvent showStatisticsEvent) { - - // get the current path - String currentPath = Window.Location.getHref(); - - // check if the "path" parameter is already present - String currentParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER); - - // the final path must be - String queryPar = "?" + GCubeCkanDataCatalog.GET_PATH_PARAMETER + "=" + "/stats"; - - String finalPath; - - if(currentParameter == null){ - finalPath = currentPath + queryPar; - - }else{ - - // remove from the first "path" on - int index = currentPath.lastIndexOf("?"+GCubeCkanDataCatalog.GET_PATH_PARAMETER); - String firstPartOfThePath = currentPath.substring(0, index); - finalPath = firstPartOfThePath + queryPar; - - } - - // redirect - Window.Location.assign(finalPath); - - } - }); - } /** * @return */ public HandlerManager getEventBus() { + return eventBus; } } 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 f944334..21ce1d3 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 @@ -1,10 +1,13 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.NotifyLogoutEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDataCatalogPanel; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.shared.GWT; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.Window.ClosingEvent; import com.google.gwt.user.client.ui.RootPanel; @@ -27,6 +30,29 @@ public class GCubeCkanDataCatalog implements EntryPoint { * This is the entry point method. */ public void onModuleLoad() { +// if (BrowserCloseDetector.get().wasClosed()) { +// GWT.log("Browser was closed."); +// } +// else { +// GWT.log("Refreshing or returning from another page."); +// } + +// Window.addCloseHandler(new CloseHandler() { +// +// public void onClose(CloseEvent windowCloseEvent) { +// +// Window.alert("I'm closing"); +// } +// }); + + Window.addWindowClosingHandler(new Window.ClosingHandler() { + + @Override + public void onWindowClosing(ClosingEvent closingEvent) { + eventManager.getEventBus().fireEvent(new NotifyLogoutEvent()); + } + }); + 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 4de205f..4a4d618 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 @@ -1,5 +1,6 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; import com.google.gwt.user.client.rpc.RemoteService; @@ -15,10 +16,12 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; public interface GcubeCkanDataCatalogService extends RemoteService { - String getCKanConnector( + CkanConnectorAccessPoint getCKanConnector( String pathInfoParameters, String queryStringParameters) throws Exception; CkanRole getMyRole() throws Exception; String getUser(); + + void logoutFromCkan(); } 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 e955a4e..5a4ad20 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 @@ -3,6 +3,7 @@ */ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -24,5 +25,12 @@ public interface GcubeCkanDataCatalogServiceAsync { void getCKanConnector( String pathInfoParameters, String queryStringParameters, - AsyncCallback callback); + AsyncCallback callback); + + + /** + * + */ + void logoutFromCkan(AsyncCallback callback); + } diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/IFrameInstanciedEvent.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/IFrameInstanciedEvent.java new file mode 100644 index 0000000..332b54f --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/IFrameInstanciedEvent.java @@ -0,0 +1,39 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event; + +import com.google.gwt.event.shared.GwtEvent; + + + +/** + * The Class NotifyLogoutEvent. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 23, 2016 + */ +public class IFrameInstanciedEvent extends GwtEvent { + public static Type TYPE = new Type(); + + + /** + * Instantiates a new insert metadata event. + */ + public IFrameInstanciedEvent() { + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() + */ + @Override + public Type getAssociatedType() { + return TYPE; + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) + */ + @Override + protected void dispatch(IFrameInstanciedEventHandler handler) { + handler.onNewInstance(this); + } + +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/IFrameInstanciedEventHandler.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/IFrameInstanciedEventHandler.java new file mode 100644 index 0000000..1ffb1c8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/IFrameInstanciedEventHandler.java @@ -0,0 +1,23 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event; + +import com.google.gwt.event.shared.EventHandler; + + + +/** + * The Interface IFrameInstanciedEentHandler. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 23, 2016 + */ +public interface IFrameInstanciedEventHandler extends EventHandler { + + + /** + * On new instance. + * + * @param iFrameInstanciedEent the i frame instancied eent + */ + void onNewInstance(IFrameInstanciedEvent iFrameInstanciedEent); + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/NotifyLogoutEvent.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/NotifyLogoutEvent.java new file mode 100644 index 0000000..cd652a7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/NotifyLogoutEvent.java @@ -0,0 +1,39 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event; + +import com.google.gwt.event.shared.GwtEvent; + + + +/** + * The Class NotifyLogoutEvent. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 23, 2016 + */ +public class NotifyLogoutEvent extends GwtEvent { + public static Type TYPE = new Type(); + + + /** + * Instantiates a new insert metadata event. + */ + public NotifyLogoutEvent() { + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() + */ + @Override + public Type getAssociatedType() { + return TYPE; + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) + */ + @Override + protected void dispatch(NotifyLogoutEventHandler handler) { + handler.onLogout(this); + } + +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/NotifyLogoutEventHandler.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/NotifyLogoutEventHandler.java new file mode 100644 index 0000000..d0ae1d3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/NotifyLogoutEventHandler.java @@ -0,0 +1,22 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event; + +import com.google.gwt.event.shared.EventHandler; + + +/** + * The Interface NotifyLogoutEventHandler. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 23, 2016 + */ +public interface NotifyLogoutEventHandler extends EventHandler { + + + /** + * On logout. + * + * @param editMetadataEvent the edit metadata event + */ + void onLogout(NotifyLogoutEvent editMetadataEvent); + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/utility/BrowserCloseDetector.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/utility/BrowserCloseDetector.java new file mode 100644 index 0000000..7517746 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/utility/BrowserCloseDetector.java @@ -0,0 +1,40 @@ +/** + * + */ + +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.utility; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 23, 2016 + */ +import com.google.gwt.user.client.Cookies; +import com.google.gwt.user.client.Window; + +public class BrowserCloseDetector { + + private static final String COOKIE = "ckan-browser-detector-closed"; + private static BrowserCloseDetector instance; + + private BrowserCloseDetector() { + + Window.addWindowClosingHandler(new Window.ClosingHandler() { + + public void onWindowClosing(Window.ClosingEvent closingEvent) { + Cookies.setCookie(COOKIE, ""); + } + }); + } + + public static BrowserCloseDetector get() { + + return instance == null + ? instance = new BrowserCloseDetector() : instance; + } + + public boolean wasClosed() { + + return Cookies.getCookie(COOKIE) == null; + } +} 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 bbb8308..8fb90bd 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 @@ -3,10 +3,13 @@ */ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.IFrameInstanciedEvent; + import com.google.gwt.core.shared.GWT; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; +import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Frame; @@ -20,14 +23,24 @@ import com.google.gwt.user.client.ui.Frame; public class CkanFramePanel extends FlowPanel{ private Frame frame; + private HandlerManager eventBus; + /** * Instantiates a new ckan frame panel. + * + * @param eventBus the event bus */ - public CkanFramePanel() { + public CkanFramePanel(HandlerManager eventBus) { + this.eventBus = eventBus; } + /** + * Prints the. + * + * @param msg the msg + */ private static native void print(String msg)/*-{ console.log(msg); }-*/; @@ -39,7 +52,7 @@ public class CkanFramePanel extends FlowPanel{ * @return the frame */ public Frame instanceFrame(String ckanUrlConnector) { - + GWT.log("Instancing new IFRAME with uri: "+ckanUrlConnector); try{ if(frame != null) remove(frame); @@ -65,13 +78,18 @@ public class CkanFramePanel extends FlowPanel{ } }else GWT.log("List Header by tag name is null");*/ + } }); add(frame); + eventBus.fireEvent(new IFrameInstanciedEvent()); return frame; } + /** - * @return + * Gets the frame. + * + * @return the frame */ public Frame getFrame() { return frame; 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 8a9d4cd..6705b22 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 @@ -5,6 +5,7 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GCubeCkanDataCatalog; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource.CkanPortletResources; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; import com.google.gwt.core.shared.GWT; @@ -30,11 +31,12 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{ private CkanMetadataManagementPanel managementPanel; private ScrollPanel centerScrollable = new ScrollPanel(); - private CkanFramePanel ckanFramePanel = new CkanFramePanel(); + private CkanFramePanel ckanFramePanel; private Image loading = new Image(CkanPortletResources.ICONS.loading()); private RootPanel rootPanel; private HandlerManager eventBus; private String baseURLCKANConnector; + private String gCubeTokeValue; /** * Instantiates a new g cube ckan data catalog panel. @@ -45,20 +47,21 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{ public GCubeCkanDataCatalogPanel(RootPanel rootPanel, HandlerManager eventManager){ this.rootPanel = rootPanel; this.eventBus = eventManager; + ckanFramePanel = new CkanFramePanel(eventBus); managementPanel = new CkanMetadataManagementPanel(eventBus); initPanel(); String pathParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_PATH_PARAMETER); String queryParameter = Window.Location.getParameter(GCubeCkanDataCatalog.GET_QUERY_PARAMETER); - GCubeCkanDataCatalog.service.getCKanConnector(pathParameter, queryParameter, new AsyncCallback() { + GCubeCkanDataCatalog.service.getCKanConnector(pathParameter, queryParameter, new AsyncCallback() { @Override - public void onSuccess(String ckanUrlConnector) { - GWT.log("Instancing CKAN iframe with url: "+ckanUrlConnector); - baseURLCKANConnector = ckanUrlConnector; - instanceCkanFrame(baseURLCKANConnector); + public void onSuccess(CkanConnectorAccessPoint ckan) { +// GWT.log("Instancing CKAN iframe with url: "+uriToCkan); + baseURLCKANConnector = ckan.getBaseUrl(); + gCubeTokeValue = ckan.getGcubeTokenValue(); + instanceCkanFrame(ckan.buildURI()); GCubeCkanDataCatalogPanel.this.rootPanel.remove(loading); - updateSize(); } @Override @@ -141,7 +144,9 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{ } /** - * show or hide edit/insert buttons according to the role + * show or hide edit/insert buttons according to the role. + * + * @param show the show */ public void showEditInsertButtons(boolean show){ managementPanel.showInsertAndEditProductButtons(show); @@ -189,10 +194,22 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{ } /** + * Gets the base urlckan connector. + * * @return the baseURLCKANConnector */ public String getBaseURLCKANConnector() { return baseURLCKANConnector; } - + + + /** + * Gets the gcube token value to ckan connector. + * + * @return the gcube token value to ckan connector + */ + public String getGcubeTokenValueToCKANConnector() { + return gCubeTokeValue; + } + } 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 d19d84e..0608e41 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 @@ -16,6 +16,7 @@ import org.gcube.datacatalogue.ckanutillibrary.models.CkanRolesIntoLiferay; import org.gcube.datacatalogue.ckanutillibrary.models.RolesIntoOrganization; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; import org.gcube.vomanagement.usermanagement.GroupManager; import org.gcube.vomanagement.usermanagement.RoleManager; @@ -37,14 +38,13 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; @SuppressWarnings("serial") public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implements GcubeCkanDataCatalogService { - private static final String LIST_OF_VRES_PARAMETER = "listOfVres"; private static final String PORT_HTTP = ":80"; private static final String PORT_HTTPS = ":443"; - private static final String GCUBE_TOKEN_PARAMETER = "gcube-token"; private static final String HTTPS = "https"; private static final String HTTP = "http"; public static String CKANCONNECTORCONTEXT = "CkanConnectorContext"; - public static String CKANHIDEHEADER = "CkanHideHeader"; +// public static String CKANHIDEHEADER = "CkanHideHeader"; + public static String CKANCONNECTORLOGOUT = "CkanConnectorLogout"; public static final String USERNAME_ATTRIBUTE = ScopeHelper.USERNAME_ATTRIBUTE; private static Logger logger = LoggerFactory.getLogger(GcubeCkanDataCatalogServiceImpl.class); private final static String DEFAULT_ROLE = "OrganizationMember"; @@ -80,8 +80,8 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem * @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#getCKanConnector(java.lang.String, java.lang.String) */ @Override - public String getCKanConnector(String pathInfoParameters, String queryStringParameters) throws Exception { - logger.info("getCKanConnector [pathInfo: "+pathInfoParameters + ", query: "+queryStringParameters+"]"); + public CkanConnectorAccessPoint getCKanConnector(String pathInfoParameter, String queryStringParameters) throws Exception { + logger.info("getCKanConnector [pathInfo: "+pathInfoParameter + ", query: "+queryStringParameters+"]"); try{ if(queryStringParameters!=null && Base64.isBase64(queryStringParameters.getBytes())){ @@ -102,10 +102,9 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem ckanConnectorUri+=ckanContext; logger.debug("CKanConnector URI + Context: "+ckanConnectorUri); logger.debug("adding parameters..."); - String fullPath = getCkanConnectorParameters(pathInfoParameters, queryStringParameters); - ckanConnectorUri = ckanConnectorUri+fullPath; - logger.info("returning ckanConnectorUri: "+ckanConnectorUri); - return ckanConnectorUri; + CkanConnectorAccessPoint ckAP = getCkanConnectorAccessPoint(ckanConnectorUri, pathInfoParameter, queryStringParameters); + logger.info("returning ckanConnectorUri: "+ckAP); + return ckAP; // return "http://ckan-d-d4s.d4science.org"; }catch(Exception e ){ String message = "Sorry an error occurred during contacting gCube Ckan Data Catalogue"; @@ -118,55 +117,82 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem /** * Gets the ckan connector parameters. * - * @param pathInfoParameters the path info parameters + * @param ckanConnectorBaseUrl the ckan connector base url + * @param pathInfoParameter the path info parameters * @param queryStringParameters the query string parameters * @return the ckan connector parameters */ - private String getCkanConnectorParameters(String pathInfoParameters, String queryStringParameters) { + private CkanConnectorAccessPoint getCkanConnectorAccessPoint(String ckanConnectorBaseUrl, String pathInfoParameter, String queryStringParameters) { - String ckanHideHeader = getServletContext().getInitParameter(CKANHIDEHEADER); - logger.debug(CKANHIDEHEADER + " is: "+ckanHideHeader); +// String ckanHideHeader = getServletContext().getInitParameter(CKANHIDEHEADER); +// logger.debug(CKANHIDEHEADER + " is: "+ckanHideHeader); - String pathInfo = ""; - if(pathInfoParameters!=null && !pathInfoParameters.isEmpty()){ - pathInfo=pathInfoParameters.startsWith("/")?pathInfoParameters:"/"+pathInfoParameters; - } + CkanConnectorAccessPoint ckan = new CkanConnectorAccessPoint(ckanConnectorBaseUrl); - String queryString =""; - if(queryStringParameters!=null && !queryStringParameters.isEmpty()){ - queryString = "?"+queryStringParameters; - } +// +// String pathInfo = ""; +// if(pathInfoParameter!=null && !pathInfoParameter.isEmpty()){ +// pathInfo=pathInfoParameter.startsWith("/")?pathInfoParameter:"/"+pathInfoParameter; +// } - String gcubeTokenParameter = null; + ckan.addPathInfo(pathInfoParameter); + ckan.addQueryString(queryStringParameters); + +// String queryString =""; +// if(queryStringParameters!=null && !queryStringParameters.isEmpty()){ +// queryString = "?"+queryStringParameters; +// } + +// String gcubeTokenParameter = null; +// if(SessionUtil.isIntoPortal()){ +// gcubeTokenParameter = GCUBE_TOKEN_PARAMETER+"="+getGcubeSecurityToken(); +// }else{ +// logger.warn("******** Using TEST_USER security token!!!"); +// gcubeTokenParameter = GCUBE_TOKEN_PARAMETER+"="+TEST_SEC_TOKEN; +// } + + + String gcubeTokenValue = null; if(SessionUtil.isIntoPortal()){ - gcubeTokenParameter = GCUBE_TOKEN_PARAMETER+"="+getGcubeSecurityToken(); + gcubeTokenValue = getGcubeSecurityToken(); }else{ logger.warn("******** Using TEST_USER security token!!!"); - gcubeTokenParameter = GCUBE_TOKEN_PARAMETER+"="+TEST_SEC_TOKEN; + gcubeTokenValue = TEST_SEC_TOKEN; } - //ADDING CKAN HH (HIDE HEADER PARAMETER) - queryString = queryString.isEmpty()?"?"+ckanHideHeader:"&"+ckanHideHeader; - //ADDING GCUBE TOKEN PARAMETER - queryString+="&"+gcubeTokenParameter; + ckan.addGubeToken(gcubeTokenValue); +// ckan.addGenericParameter(ckanHideHeader, "true"); + +// //ADDING CKAN HH (HIDE HEADER PARAMETER) +// queryString = queryString.isEmpty()?"?"+ckanHideHeader:"&"+ckanHideHeader; +// //ADDING GCUBE TOKEN PARAMETER +// queryString+="&"+gcubeTokenParameter; //ADDING LIST OF VRE TO WHICH USER BELONGS + if(!SessionUtil.isIntoPortal()){ + return ckan; + } + ASLSession session = getASLSession(this.getThreadLocalRequest().getSession()); List listVres = UserUtil.getListVreForUser(session.getUserEmailAddress()); - String vres = ""; - if(listVres!=null && listVres.size()>0){ - for (String vre : listVres) { - vres+=vre+","; - } - vres = vres.substring(0, vres.length()-1).toLowerCase(); //remove last "," and to lower case. A CKAN Organization ID must be lower case - } +// String vres = ""; +// if(listVres!=null && listVres.size()>0){ +// for (String vre : listVres) { +// vres+=vre+","; +// } +// vres = vres.substring(0, vres.length()-1).toLowerCase(); //remove last "," and to lower case. A CKAN Organization ID must be lower case +// } - logger.debug("List of VREs contains: " +vres); - if(vres.length()>0){ - queryString+="&"+LIST_OF_VRES_PARAMETER+"="+vres; - } +// logger.debug("List of VREs contains: " +vres); +// if(vres.length()>0){ +// queryString+="&"+LIST_OF_VRES_PARAMETER+"="+vres; +// } - return pathInfo+queryString; + +// ckan.addGubeToken(gcubeTokenParameter); + ckan.addListOfVREs(listVres); + + return ckan; } /** @@ -316,7 +342,7 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem switch(mainRole){ case CkanRolesIntoLiferay.CATALOG_ADMIN: return CkanRole.ADMIN; case CkanRolesIntoLiferay.CATALOG_EDITOR: return CkanRole.EDITOR; - case CkanRolesIntoLiferay.CATALOG_MEMBER: ; + case CkanRolesIntoLiferay.CATALOG_MEMBER: return CkanRole.MEMBER; default : return CkanRole.MEMBER; } } @@ -360,4 +386,21 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem return token; } + + + /* (non-Javadoc) + * @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#logoutFromCkan() + */ + @Override + public void logoutFromCkan() { + HttpSession httpSession = this.getThreadLocalRequest().getSession(); + ASLSession session = getASLSession(httpSession); + String username = session.getUsername(); + logger.debug("Logout from CKAN for: "+username); + + String ckanConnectorLogut = getServletContext().getInitParameter(CKANCONNECTORLOGOUT); + logger.debug(CKANCONNECTORLOGOUT + " is: "+ckanConnectorLogut); + + + } } diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/CkanConnectorAccessPoint.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/CkanConnectorAccessPoint.java new file mode 100644 index 0000000..5f0492c --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/CkanConnectorAccessPoint.java @@ -0,0 +1,201 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared; + +import java.io.Serializable; +import java.util.List; + + +/** + * The Class CkanConnectorAccessPoint. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 23, 2016 + */ +public class CkanConnectorAccessPoint implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 3771903616375335843L; + + private static final String LIST_OF_VRES_PARAMETER = "listOfVres"; + private static final String GCUBE_TOKEN_PARAMETER = "gcube-token"; + private String baseUrl; + private String pathInfoParameter; + private String queryStringParameters; + private String gcubeTokenValue; + private List listOfVRes; + + /** + * + */ + public CkanConnectorAccessPoint() { + } + + /** + * Instantiates a new ckan connector access point. + * + * @param baseUrl the base url + */ + public CkanConnectorAccessPoint(String baseUrl){ + this.baseUrl = baseUrl; + } + + /** + * Adds the generic parameter. + * + * @param key the key + * @param value the value + */ + public void addGenericParameter(String key, String value){ + queryStringParameters=queryStringParameters==null?key+"="+value:queryStringParameters+"&"+key+"="+value; + } + + + /** + * Adds the query string. + * + * @param queryString the query string + */ + public void addQueryString(String queryString){ + + if(queryString==null || queryString.isEmpty()) + return; + + if(queryString.startsWith("&")){ + queryString = queryString.substring(1, queryString.length()); //removes '&' + } + + queryStringParameters=queryStringParameters==null?queryString:queryStringParameters+"&"+queryString; + } + + /** + * Adds the gube token. + * + * @param value the value + */ + public void addGubeToken(String value){ + this.gcubeTokenValue = value; + addGenericParameter(GCUBE_TOKEN_PARAMETER, value); + } + + /** + * Adds the list of vr es. + * + * @param listVREs the list vr es + */ + public void addListOfVREs(List listVREs){ + this.listOfVRes = listVREs; + String vres = ""; + if(listVREs!=null && listVREs.size()>0){ + for (String vre : listVREs) { + vres+=vre+","; + } + vres = vres.substring(0, vres.length()-1).toLowerCase(); //remove last "," and to lower case. A CKAN Organization ID must be lower case + } + + if(vres.length()>0){ + addGenericParameter(LIST_OF_VRES_PARAMETER, vres); + } + } + + /** + * Adds the path info. + * + * @param pathInfo the path info + */ + public void addPathInfo(String pathInfo){ + pathInfoParameter = pathInfo; + } + + + /** + * Builds the uri to contact the CKAN Connector. + * + * @return the string + */ + public String buildURI(){ + + if(pathInfoParameter!=null && !pathInfoParameter.isEmpty()) + pathInfoParameter=pathInfoParameter.startsWith("/")?pathInfoParameter:"/"+pathInfoParameter; + else + pathInfoParameter=""; + + if(queryStringParameters==null) + queryStringParameters=""; + + return baseUrl+pathInfoParameter+"?"+queryStringParameters; + } + + + + + + /** + * @return the baseUrl + */ + public String getBaseUrl() { + + return baseUrl; + } + + + /** + * @return the pathInfoParameter + */ + public String getPathInfoParameter() { + + return pathInfoParameter; + } + + + /** + * @return the queryStringParameters + */ + public String getQueryStringParameters() { + + return queryStringParameters; + } + + + /** + * @return the gcubeTokenValue + */ + public String getGcubeTokenValue() { + + return gcubeTokenValue; + } + + + /** + * @return the listOfVRes + */ + public List getListOfVRes() { + + return listOfVRes; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + StringBuilder builder = new StringBuilder(); + builder.append("CkanConnectorAccessPoint [baseUrl="); + builder.append(baseUrl); + builder.append(", pathInfoParameter="); + builder.append(pathInfoParameter); + builder.append(", queryStringParameters="); + builder.append(queryStringParameters); + builder.append(", gcubeTokenValue="); + builder.append(gcubeTokenValue); + builder.append(", listOfVRes="); + builder.append(listOfVRes); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 03b55cd..0e248a3 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -10,10 +10,16 @@ /gcube/service/connect + + + + + + - Used like GET parameter in order to hide header section of CKAN template from gCube Portal - CkanHideHeader - hh=true + ckan connector logout from CKAN + CkanConnectorLogout + /gcube/service/connect