diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component index 2f0fecc..5fe3680 100644 --- a/.settings/org.eclipse.wst.common.component +++ b/.settings/org.eclipse.wst.common.component @@ -4,9 +4,6 @@ - - uses - 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 17dfc05..c7bed1f 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,7 +1,8 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; -import java.util.Map; +import java.util.List; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgRole; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; @@ -40,7 +41,7 @@ public interface GcubeCkanDataCatalogService extends RemoteService { * Retrieve the list of organizations to whom the user belongs and their urls * @return */ - Map getCkanOrganizationsNamesAndUrlsForUser(); + List getCkanOrganizationsNamesAndUrlsForUser(); /** * Logout from ckan 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 ead1dd5..a24cc13 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,8 +3,9 @@ */ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; -import java.util.Map; +import java.util.List; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgRole; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; @@ -30,7 +31,7 @@ public interface GcubeCkanDataCatalogServiceAsync { void logoutURIFromCkan(AsyncCallback callback); void getCkanOrganizationsNamesAndUrlsForUser( - AsyncCallback> callback); + AsyncCallback> callback); void outsidePortal(AsyncCallback callback); diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanOrganizationsPanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanOrganizationsPanel.java index f14b581..a7a143a 100644 --- a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanOrganizationsPanel.java +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanOrganizationsPanel.java @@ -1,9 +1,8 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; +import java.util.List; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgRole; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import com.github.gwtbootstrap.client.ui.Button; @@ -14,6 +13,7 @@ import com.github.gwtbootstrap.client.ui.base.UnorderedList; import com.github.gwtbootstrap.client.ui.constants.ButtonType; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.VerticalPanel; @@ -23,7 +23,7 @@ import com.google.gwt.user.client.ui.VerticalPanel; */ public class CkanOrganizationsPanel extends VerticalPanel{ - private Map organizations; + private List organizations; private GCubeCkanDataCatalogPanel father; public CkanOrganizationsPanel( @@ -35,7 +35,7 @@ public class CkanOrganizationsPanel extends VerticalPanel{ * Set the organizations to show. If a null list is passed, it is an error * @param result */ - public void setOrganizations(Map result) { + public void setOrganizations(List result) { HorizontalPanel hPanel = new HorizontalPanel(); hPanel.setStyleName("horizontal-panel-organizations"); @@ -63,27 +63,31 @@ public class CkanOrganizationsPanel extends VerticalPanel{ }else{ UnorderedList list = new UnorderedList(); - Iterator> iterator = organizations.entrySet().iterator(); - - while (iterator.hasNext()) { - final Map.Entry entry = iterator - .next(); + for (final BeanUserInOrgRole org : organizations) { + + Paragraph line = new Paragraph(); Button b = new Button(); b.setType(ButtonType.LINK); - b.setText(entry.getKey()); + b.setText(org.getOrgName()); b.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - String request = getCkanRequest(entry.getValue(), null); + String request = getCkanRequest(org.getOrgUrl(), null); father.instanceCkanFrame(request); } }); - ListItem item = new ListItem(b); + line.add(b); + Button role = new Button(); + role.setType(ButtonType.LINK); + role.setText("as Catalogue-" + org.getRole().toString().toLowerCase()); + role.getElement().getStyle().setProperty("pointer-events", "none"); + line.add(role); + ListItem item = new ListItem(line); list.add(item); } 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 e76970a..cf3569f 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 @@ -4,10 +4,12 @@ package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; +import java.util.List; import java.util.Map; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GCubeCkanDataCatalog; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource.CkanPortletResources; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgRole; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; import org.gcube.portlets.widgets.sessionchecker.client.CheckSession; @@ -76,6 +78,24 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate { ckanAccessPoint = ckan; instanceCkanFrame(ckan.buildURI()); GCubeCkanDataCatalogPanel.this.rootPanel.remove(loading); + + // RETRIEVE USER'S ORGANIZATIONS + GCubeCkanDataCatalog.service.getCkanOrganizationsNamesAndUrlsForUser(new AsyncCallback>() { + + @Override + public void onSuccess(List result) { + + ckanOrganizationsPanel.setOrganizations(result); + } + + @Override + public void onFailure(Throwable caught) { + + // an error message will be displayed + ckanOrganizationsPanel.setOrganizations(null); + + } + }); // now perform the other requests GCubeCkanDataCatalog.service.outsidePortal(new AsyncCallback() { @@ -93,24 +113,6 @@ public class GCubeCkanDataCatalogPanel extends BaseViewTemplate { // polling for session expired check CheckSession.getInstance().startPolling(); - // RETRIEVE USER'S ORGANIZATIONS - GCubeCkanDataCatalog.service.getCkanOrganizationsNamesAndUrlsForUser(new AsyncCallback>() { - - @Override - public void onSuccess(Map result) { - - ckanOrganizationsPanel.setOrganizations(result); - } - - @Override - public void onFailure(Throwable caught) { - - // an error message will be displayed - ckanOrganizationsPanel.setOrganizations(null); - - } - }); - // MANAGE CKAN MANAGEMENT PANEL ACCORDING TO MY ROLE GCubeCkanDataCatalog.service.getMyRole(new AsyncCallback() { 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 42f0299..ade23df 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 @@ -7,7 +7,6 @@ import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -27,6 +26,7 @@ import org.gcube.datacatalogue.ckanutillibrary.utils.SessionCatalogueAttributes; import org.gcube.datacatalogue.ckanutillibrary.utils.UtilMethods; import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.BeanUserInOrgRole; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanConnectorAccessPoint; import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.OrganizationBean; @@ -411,14 +411,15 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem } @Override - public Map getCkanOrganizationsNamesAndUrlsForUser() { + public List getCkanOrganizationsNamesAndUrlsForUser() { - Map toReturn = new HashMap<>(); + List toReturn = new ArrayList(); if(!SessionUtil.isIntoPortal()){ logger.warn("You are not into the portal"); - toReturn.put("testVRE", "/organization/devvre"); + BeanUserInOrgRole org = new BeanUserInOrgRole("testVRE", "/organization/devvre", CkanRole.ADMIN); + toReturn.add(org); }else{ @@ -434,13 +435,16 @@ public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implem // check if the aslsession already has such information if(httpSession.getAttribute(keyPerScope) != null){ - toReturn = (Map) httpSession.getAttribute(keyPerScope); + toReturn = (List) httpSession.getAttribute(keyPerScope); logger.debug("List of organizations was into the session " + toReturn); }else{ logger.debug("Organizations list wasn't into session, retrieving them"); - List organizations = getCkanUtilsObj(scopePerCurrentUrl).getOrganizationsByUser(username); + CKanUtils utils = getCkanUtilsObj(scopePerCurrentUrl); + List organizations = utils.getOrganizationsByUser(username); for (CkanOrganization ckanOrganization : organizations) { - toReturn.put(ckanOrganization.getTitle(), "/organization/" + ckanOrganization.getName()); + String role = getCkanUtilsObj(scopePerCurrentUrl).getRoleOfUserInOrganization(username, ckanOrganization.getName(), utils.getApiKeyFromUsername(username)); + BeanUserInOrgRole org = new BeanUserInOrgRole(ckanOrganization.getTitle(), "/organization/" + ckanOrganization.getName(), CkanRole.valueOf(role.toUpperCase())); + toReturn.add(org); } logger.debug("List of organizations to return for user " + username + " is " + toReturn); httpSession.setAttribute(keyPerScope, toReturn); diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/BeanUserInOrgRole.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/BeanUserInOrgRole.java new file mode 100644 index 0000000..ef30018 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/BeanUserInOrgRole.java @@ -0,0 +1,63 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared; + +import java.io.Serializable; + +/** + * A bean that contains the tuple : + * + * @author Costantino Perciante at ISTI-CNR + * (costantino.perciante@isti.cnr.it) + */ +public class BeanUserInOrgRole implements Serializable { + + private static final long serialVersionUID = 9022496195659804838L; + private String orgName; + private String orgUrl; + private CkanRole role; + + public BeanUserInOrgRole() { + super(); + } + + /** + * @param orgName + * @param orgUrl + * @param role + */ + public BeanUserInOrgRole(String orgName, String orgUrl, CkanRole role) { + super(); + this.orgName = orgName; + this.orgUrl = orgUrl; + this.role = role; + } + + public String getOrgName() { + return orgName; + } + + public void setOrgName(String orgName) { + this.orgName = orgName; + } + + public String getOrgUrl() { + return orgUrl; + } + + public void setOrgUrl(String orgUrl) { + this.orgUrl = orgUrl; + } + + public CkanRole getRole() { + return role; + } + + public void setRole(CkanRole role) { + this.role = role; + } + + @Override + public String toString() { + return "BeanUserInOrgRole [orgName=" + orgName + ", orgUrl=" + orgUrl + + ", role=" + role + "]"; + } +}