From a3c3dd2070913a23bef0063610006186353892e3 Mon Sep 17 00:00:00 2001 From: Costantino Perciante Date: Mon, 12 Dec 2016 13:49:42 +0000 Subject: [PATCH] added patch for #6171 (sobigdata). Added more tabs to the portlet to let user perform catalogue navigation more easily git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/gcube-ckan-datacatalog@139913 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/CkanEventHandlerManager.java | 51 +++++++---- ...asetsEvent.java => ShowDatasetsEvent.java} | 19 ++-- ...ler.java => ShowDatasetsEventHandler.java} | 4 +- ...rGroupsEvent.java => ShowGroupsEvent.java} | 17 ++-- ...ndler.java => ShowGroupsEventHandler.java} | 4 +- ...Event.java => ShowOrganizationsEvent.java} | 16 ++-- ...ava => ShowOrganizationsEventHandler.java} | 4 +- .../view/CkanMetadataManagementPanel.java | 88 ++++++++++++++++--- .../gcubeckandatacatalog/server/UserUtil.java | 43 +++++++-- 9 files changed, 185 insertions(+), 61 deletions(-) rename src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/{ShowUserDatasetsEvent.java => ShowDatasetsEvent.java} (57%) rename src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/{ShowUserDatasetsEventHandler.java => ShowDatasetsEventHandler.java} (69%) rename src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/{ShowUserGroupsEvent.java => ShowGroupsEvent.java} (58%) rename src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/{ShowUserGroupsEventHandler.java => ShowGroupsEventHandler.java} (73%) rename src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/{ShowUserOrganizationsEvent.java => ShowOrganizationsEvent.java} (57%) rename src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/{ShowUserOrganizationsEventHandler.java => ShowOrganizationsEventHandler.java} (67%) 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 e8b8d75..cbabf00 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 @@ -9,18 +9,18 @@ import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.InsertMeta 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.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.ShowStatisticsEvent; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowStatisticsEventHandler; -import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserDatasetsEvent; -import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserDatasetsEventHandler; -import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserGroupsEvent; -import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserGroupsEventHandler; -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.ui.ManageProductWidget; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDataCatalogPanel; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; @@ -117,35 +117,48 @@ public class CkanEventHandlerManager { // show datasets event eventBus.addHandler( - ShowUserDatasetsEvent.TYPE, new ShowUserDatasetsEventHandler() { + ShowDatasetsEvent.TYPE, new ShowDatasetsEventHandler() { @Override public void onShowDatasets( - ShowUserDatasetsEvent showUserDatasetsEvent) { - String request = getCkanRequest("/dashboard/datasets", null); + ShowDatasetsEvent showUserDatasetsEvent) { + String request = null; + if(showUserDatasetsEvent.isOwnOnly()) + request = getCkanRequest("/dashboard/datasets", null); + else + request = getCkanRequest("/dataset", null); panel.instanceCkanFrame(request); } }); eventBus.addHandler( - ShowUserOrganizationsEvent.TYPE, - new ShowUserOrganizationsEventHandler() { + ShowOrganizationsEvent.TYPE, + new ShowOrganizationsEventHandler() { @Override public void onShowOrganizations( - ShowUserOrganizationsEvent showUserDatasetsEvent) { - - panel.showOrganizations(); + ShowOrganizationsEvent showUserDatasetsEvent) { + if(showUserDatasetsEvent.isOwnOnly()) + panel.showOrganizations(); + else{ + String request = getCkanRequest("/organization", null); + panel.instanceCkanFrame(request); + } } }); eventBus.addHandler( - ShowUserGroupsEvent.TYPE, new ShowUserGroupsEventHandler() { + ShowGroupsEvent.TYPE, new ShowGroupsEventHandler() { @Override - public void onShowGroups(ShowUserGroupsEvent showUserDatasetsEvent) { + public void onShowGroups(ShowGroupsEvent showGroupsEvent) { //String request = getCkanRequest("/dashboard/groups", null); //panel.instanceCkanFrame(request); - panel.showGroups(); + if(showGroupsEvent.isOwnOnly()) + panel.showGroups(); + else{ + String request = getCkanRequest("/group", null); + panel.instanceCkanFrame(request); + } } }); @@ -187,8 +200,8 @@ public class CkanEventHandlerManager { @Override public void onShowManageProductWidget(ShowManageProductWidgetEvent event) { - - new ManageProductWidget(event.getProductIdentifier()); + + new ManageProductWidget(event.getProductIdentifier()); } }); diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserDatasetsEvent.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowDatasetsEvent.java similarity index 57% rename from src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserDatasetsEvent.java rename to src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowDatasetsEvent.java index b53fcdc..7f3d61e 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserDatasetsEvent.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowDatasetsEvent.java @@ -6,21 +6,30 @@ import com.google.gwt.event.shared.GwtEvent; * Raised when the user wants to see his datasets. * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) */ -public class ShowUserDatasetsEvent extends GwtEvent{ +public class ShowDatasetsEvent extends GwtEvent{ - public static Type TYPE = new Type(); + public static Type TYPE = new Type(); + + private boolean ownOnly; /** * Instantiates a new show user datasets event. */ - public ShowUserDatasetsEvent() { + public ShowDatasetsEvent(boolean ownOnly) { + + this.ownOnly = ownOnly; + + } + + public boolean isOwnOnly() { + return ownOnly; } /* (non-Javadoc) * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() */ @Override - public Type getAssociatedType() { + public Type getAssociatedType() { return TYPE; } @@ -28,7 +37,7 @@ public class ShowUserDatasetsEvent extends GwtEvent{ +public class ShowGroupsEvent extends GwtEvent{ - public static Type TYPE = new Type(); + public static Type TYPE = new Type(); + + private boolean ownOnly; /** * Instantiates a new show user organizations event. */ - public ShowUserGroupsEvent() { + public ShowGroupsEvent(boolean ownOnly) { + this.ownOnly = ownOnly; + } + + public boolean isOwnOnly() { + return ownOnly; } /* (non-Javadoc) * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() */ @Override - public Type getAssociatedType() { + public Type getAssociatedType() { return TYPE; } @@ -31,7 +38,7 @@ public class ShowUserGroupsEvent extends GwtEvent{ * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) */ @Override - protected void dispatch(ShowUserGroupsEventHandler handler) { + protected void dispatch(ShowGroupsEventHandler handler) { handler.onShowGroups(this); } diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserGroupsEventHandler.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowGroupsEventHandler.java similarity index 73% rename from src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserGroupsEventHandler.java rename to src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowGroupsEventHandler.java index 5c3e40e..c7ae41f 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserGroupsEventHandler.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowGroupsEventHandler.java @@ -9,7 +9,7 @@ import com.google.gwt.event.shared.EventHandler; * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Jun 23, 2016 */ -public interface ShowUserGroupsEventHandler extends EventHandler { +public interface ShowGroupsEventHandler extends EventHandler { /** @@ -17,6 +17,6 @@ public interface ShowUserGroupsEventHandler extends EventHandler { * * @param showUserDatasetsEvent the show user datasets event */ - void onShowGroups(ShowUserGroupsEvent showUserDatasetsEvent); + void onShowGroups(ShowGroupsEvent showUserDatasetsEvent); } diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserOrganizationsEvent.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowOrganizationsEvent.java similarity index 57% rename from src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserOrganizationsEvent.java rename to src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowOrganizationsEvent.java index 09f5698..3747e29 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowUserOrganizationsEvent.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/ShowOrganizationsEvent.java @@ -6,21 +6,27 @@ import com.google.gwt.event.shared.GwtEvent; * Raised when the user wants to see his organizations. * @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it) */ -public class ShowUserOrganizationsEvent extends GwtEvent{ +public class ShowOrganizationsEvent extends GwtEvent{ - public static Type TYPE = new Type(); + public static Type TYPE = new Type(); + private boolean ownOnly; /** * Instantiates a new show user organizations event. */ - public ShowUserOrganizationsEvent() { + public ShowOrganizationsEvent(boolean ownOnly) { + this.ownOnly = ownOnly; + } + + public boolean isOwnOnly() { + return ownOnly; } /* (non-Javadoc) * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() */ @Override - public Type getAssociatedType() { + public Type getAssociatedType() { return TYPE; } @@ -28,7 +34,7 @@ public class ShowUserOrganizationsEvent extends GwtEvent|")); nav.add(myDatasets); nav.add(myOrganizations); nav.add(myGroups); - nav.add(statistics); + separatorAdminButtons = new InlineHTML("|"); + separatorAdminButtons.setVisible(false); + nav.add(separatorAdminButtons); nav.add(insertMeta); nav.add(editMeta); nav.add(manageProduct); @@ -101,7 +130,7 @@ public class CkanMetadataManagementPanel extends FlowPanel{ /** * */ - private void addHandlers() { + private void addHandlers() { home.addClickHandler(new ClickHandler() { @@ -113,6 +142,36 @@ public class CkanMetadataManagementPanel extends FlowPanel{ } }); + organizations.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + eventBus.fireEvent(new ShowOrganizationsEvent(false)); + + } + }); + + groups.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + eventBus.fireEvent(new ShowGroupsEvent(false)); + + } + }); + + products.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + eventBus.fireEvent(new ShowDatasetsEvent(false)); + + } + }); + insertMeta.addClickHandler(new ClickHandler() { @Override @@ -136,7 +195,7 @@ public class CkanMetadataManagementPanel extends FlowPanel{ @Override public void onClick(ClickEvent event) { - eventBus.fireEvent(new ShowUserDatasetsEvent()); + eventBus.fireEvent(new ShowDatasetsEvent(true)); } }); @@ -146,7 +205,7 @@ public class CkanMetadataManagementPanel extends FlowPanel{ @Override public void onClick(ClickEvent event) { - eventBus.fireEvent(new ShowUserOrganizationsEvent()); + eventBus.fireEvent(new ShowOrganizationsEvent(true)); } }); @@ -157,7 +216,7 @@ public class CkanMetadataManagementPanel extends FlowPanel{ @Override public void onClick(ClickEvent event) { - eventBus.fireEvent(new ShowUserGroupsEvent()); + eventBus.fireEvent(new ShowGroupsEvent(true)); } }); @@ -199,6 +258,7 @@ public class CkanMetadataManagementPanel extends FlowPanel{ public void showInsertAndEditProductButtons(boolean show){ //editMeta.setVisible(show); TODO + separatorAdminButtons.setVisible(show); insertMeta.setVisible(show); } @@ -211,14 +271,14 @@ public class CkanMetadataManagementPanel extends FlowPanel{ public void showManageProductButton(boolean value){ manageProduct.setVisible(value); } - + /** * Enable or disable the manage product button */ public void enableManageProductButton(boolean value){ manageProduct.setEnabled(value); } - + /** * Show only home/statistics buttons */ 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 dff9e15..6d4522a 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 @@ -38,6 +38,7 @@ import eu.trentorise.opendata.jackan.model.CkanOrganization; public class UserUtil { private static Logger logger = LoggerFactory.getLogger(UserUtil.class); + private static final String SOBIGDATA_VO_CONTEXT = "/d4science.research-infrastructures.eu/SoBigData"; /** * Gets the list vre for user. @@ -59,16 +60,24 @@ public class UserUtil { List listOfGroups = groupManager.listGroupsByUser(user.getUserId()); logger.info("List of VREs for "+userEMail+ " is/are: "+listOfGroups.size()); List vreNames = new ArrayList(listOfGroups.size()); + + boolean containsSoBigDataVRE = false; for (GCubeGroup gCubeGroup : listOfGroups) { - - // TODO: why only the VRES??...however check for the production root vo - // if(gCubeGroup.getGroupName().equals(CKanUtilsImpl.PRODUCTION_LIFERAY_ORGNAME_ROOT)) - // vreNames.add(CKanUtilsImpl.PRODUCTION_CKAN_ORGNAME_ROOT); - - //if(groupManager.isVRE(gCubeGroup.getGroupId())) //Is it a VRE? - // else vreNames.add(gCubeGroup.getGroupName()); + + // in case of sobigdata vres (under the SoBigData VO) we need to let users access all the sobigdata organizations in ckan + // The VO scope is "/d4science.research-infrastructures.eu/SoBigData" + // This code will work only if all the sobigdata organizations are on the same ckan, of course + if(!containsSoBigDataVRE) + if(gCubeGroup.getParentGroupId() != -1 && SOBIGDATA_VO_CONTEXT.equals(groupManager.getInfrastructureScope(gCubeGroup.getParentGroupId()))) + containsSoBigDataVRE = true; + } + + // check if we need to add also sobigdata vres + if(containsSoBigDataVRE) + addSoBigDataVREs(groupManager, vreNames); + logger.debug("Returning VRE names: "+vreNames); return vreNames; }catch (UserManagementSystemException | UserRetrievalFault | GroupRetrievalFault e) { @@ -77,6 +86,26 @@ public class UserUtil { } } + /** + * Fetch (if needed) the groups' names of the vres under sobigdata + * @param groupManager + * @param vreNames + */ + private static void addSoBigDataVREs(GroupManager groupManager, List vreNames){ + + try{ + // fetch all sobigdata contexts + GCubeGroup sobigdataVO = groupManager.getGroup(groupManager.getGroupIdFromInfrastructureScope(SOBIGDATA_VO_CONTEXT)); + List children = sobigdataVO.getChildren(); + + for (GCubeGroup gcubeSobigDataChild : children) { + vreNames.add(gcubeSobigDataChild.getGroupName()); + } + }catch(Exception e){ + logger.error("Unable to retrieve SoBigData vres", e); + } + } + /** * Retrieve the highest ckan role the user has and also retrieve the list of organizations (scopes) in which the user has the ckan-admin or ckan-editor role * @param currentScope the current scope