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
This commit is contained in:
Costantino Perciante 2016-12-12 13:49:42 +00:00
parent ca4f796b72
commit a3c3dd2070
9 changed files with 185 additions and 61 deletions

View File

@ -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());
}
});

View File

@ -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<ShowUserDatasetsEventHandler>{
public class ShowDatasetsEvent extends GwtEvent<ShowDatasetsEventHandler>{
public static Type<ShowUserDatasetsEventHandler> TYPE = new Type<ShowUserDatasetsEventHandler>();
public static Type<ShowDatasetsEventHandler> TYPE = new Type<ShowDatasetsEventHandler>();
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<ShowUserDatasetsEventHandler> getAssociatedType() {
public Type<ShowDatasetsEventHandler> getAssociatedType() {
return TYPE;
}
@ -28,7 +37,7 @@ public class ShowUserDatasetsEvent extends GwtEvent<ShowUserDatasetsEventHandler
* @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler)
*/
@Override
protected void dispatch(ShowUserDatasetsEventHandler handler) {
protected void dispatch(ShowDatasetsEventHandler handler) {
handler.onShowDatasets(this);
}

View File

@ -6,12 +6,12 @@ import com.google.gwt.event.shared.EventHandler;
* Event handler for the ShowUserDatasetsEvent
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
*/
public interface ShowUserDatasetsEventHandler extends EventHandler {
public interface ShowDatasetsEventHandler extends EventHandler {
/**
*
* @param showUserDatasetsEvent
*/
void onShowDatasets(ShowUserDatasetsEvent showUserDatasetsEvent);
void onShowDatasets(ShowDatasetsEvent showUserDatasetsEvent);
}

View File

@ -9,21 +9,28 @@ import com.google.gwt.event.shared.GwtEvent;
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* Jun 23, 2016
*/
public class ShowUserGroupsEvent extends GwtEvent<ShowUserGroupsEventHandler>{
public class ShowGroupsEvent extends GwtEvent<ShowGroupsEventHandler>{
public static Type<ShowUserGroupsEventHandler> TYPE = new Type<ShowUserGroupsEventHandler>();
public static Type<ShowGroupsEventHandler> TYPE = new Type<ShowGroupsEventHandler>();
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<ShowUserGroupsEventHandler> getAssociatedType() {
public Type<ShowGroupsEventHandler> getAssociatedType() {
return TYPE;
}
@ -31,7 +38,7 @@ public class ShowUserGroupsEvent extends GwtEvent<ShowUserGroupsEventHandler>{
* @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);
}

View File

@ -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);
}

View File

@ -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<ShowUserOrganizationsEventHandler>{
public class ShowOrganizationsEvent extends GwtEvent<ShowOrganizationsEventHandler>{
public static Type<ShowUserOrganizationsEventHandler> TYPE = new Type<ShowUserOrganizationsEventHandler>();
public static Type<ShowOrganizationsEventHandler> TYPE = new Type<ShowOrganizationsEventHandler>();
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<ShowUserOrganizationsEventHandler> getAssociatedType() {
public Type<ShowOrganizationsEventHandler> getAssociatedType() {
return TYPE;
}
@ -28,7 +34,7 @@ public class ShowUserOrganizationsEvent extends GwtEvent<ShowUserOrganizationsEv
* @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler)
*/
@Override
protected void dispatch(ShowUserOrganizationsEventHandler handler) {
protected void dispatch(ShowOrganizationsEventHandler handler) {
handler.onShowOrganizations(this);
}

View File

@ -6,12 +6,12 @@ import com.google.gwt.event.shared.EventHandler;
* Event handler for the ShowUserOrganizationsEvent
* @author Costantino Perciante at ISTI-CNR (costantino.perciante@isti.cnr.it)
*/
public interface ShowUserOrganizationsEventHandler extends EventHandler {
public interface ShowOrganizationsEventHandler extends EventHandler {
/**
*
* @param showUserDatasetsEvent
*/
void onShowOrganizations(ShowUserOrganizationsEvent showUserDatasetsEvent);
void onShowOrganizations(ShowOrganizationsEvent showUserDatasetsEvent);
}

View File

@ -5,12 +5,12 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view;
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.ShowDatasetsEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowGroupsEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowHomeEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowManageProductWidgetEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowOrganizationsEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowStatisticsEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserDatasetsEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserGroupsEvent;
import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.ShowUserOrganizationsEvent;
import com.github.gwtbootstrap.client.ui.AlertBlock;
import com.github.gwtbootstrap.client.ui.Button;
@ -23,6 +23,7 @@ import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.InlineHTML;
/**
@ -35,13 +36,25 @@ import com.google.gwt.user.client.ui.FlowPanel;
public class CkanMetadataManagementPanel extends FlowPanel{
private AlertBlock nav = new AlertBlock();
// generic
private Button home = new Button("Home");
private Button insertMeta = new Button("Publish Product");
private Button editMeta = new Button("Edit Product");
private Button organizations = new Button("Organizations");
private Button groups = new Button("Groups");
private Button products = new Button("Products");
// user's own
private InlineHTML separatorAdminButtons = null;
private Button myDatasets = new Button("My Products");
private Button myOrganizations = new Button("My Organizations");
private Button myGroups = new Button("My Groups");
// statistics
private Button statistics = new Button("Statistics");
// other stuff
private Button insertMeta = new Button("Publish Product");
private Button editMeta = new Button("Edit Product");
private Button manageProduct = new Button("Manage Product");
private HandlerManager eventBus;
@ -56,17 +69,26 @@ public class CkanMetadataManagementPanel extends FlowPanel{
// set link style buttons
home.setType(ButtonType.LINK);
organizations.setType(ButtonType.LINK);
groups.setType(ButtonType.LINK);
products.setType(ButtonType.LINK);
myDatasets.setType(ButtonType.LINK);
myOrganizations.setType(ButtonType.LINK);
myGroups.setType(ButtonType.LINK);
statistics.setType(ButtonType.LINK);
insertMeta.setType(ButtonType.LINK);
editMeta.setType(ButtonType.LINK);
statistics.setType(ButtonType.LINK);
manageProduct.setType(ButtonType.LINK);
manageProduct.getElement().getStyle().setFloat(Float.RIGHT);
// set icons
home.setIcon(IconType.HOME);
organizations.setIcon(IconType.BUILDING);
groups.setIcon(IconType.GROUP);
products.setIcon(IconType.SITEMAP);
myDatasets.setIcon(IconType.SITEMAP);
myOrganizations.setIcon(IconType.BUILDING);
myGroups.setIcon(IconType.GROUP);
@ -74,7 +96,7 @@ public class CkanMetadataManagementPanel extends FlowPanel{
editMeta.setIcon(IconType.EDIT_SIGN);
statistics.setIcon(IconType.BAR_CHART);
manageProduct.setIcon(IconType.CHECK_SIGN);
// hide edit and insert
editMeta.setVisible(false);
insertMeta.setVisible(false);
@ -83,10 +105,17 @@ public class CkanMetadataManagementPanel extends FlowPanel{
// add to navigation bar
nav.add(home);
nav.add(organizations);
nav.add(groups);
nav.add(products);
nav.add(statistics);
nav.add(new InlineHTML("<span style=\"font-weight:bold;vertical-alignment:middle;\">|</span>"));
nav.add(myDatasets);
nav.add(myOrganizations);
nav.add(myGroups);
nav.add(statistics);
separatorAdminButtons = new InlineHTML("<span style=\"font-weight:bold;vertical-alignment:middle;\">|</span>");
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
*/

View File

@ -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<GCubeGroup> listOfGroups = groupManager.listGroupsByUser(user.getUserId());
logger.info("List of VREs for "+userEMail+ " is/are: "+listOfGroups.size());
List<String> vreNames = new ArrayList<String>(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<String> vreNames){
try{
// fetch all sobigdata contexts
GCubeGroup sobigdataVO = groupManager.getGroup(groupManager.getGroupIdFromInfrastructureScope(SOBIGDATA_VO_CONTEXT));
List<GCubeGroup> 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