added fetch groups method for catalogue

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@134323 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Costantino Perciante 2016-11-17 14:07:33 +00:00
parent 9cc90eaae1
commit 93c2db193b
1 changed files with 39 additions and 1 deletions

View File

@ -89,6 +89,7 @@ import org.gcube.portlets.user.workspace.shared.WorkspaceUserQuote;
import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingEntryType;
import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingField;
import org.gcube.portlets.user.workspaceapplicationhandler.ApplicationReaderFromGenericResource;
import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.GroupBean;
import org.gcube.portlets.widgets.ckandatapublisherwidget.shared.OrganizationBean;
import org.gcube.vomanagement.usermanagement.GroupManager;
import org.gcube.vomanagement.usermanagement.UserManager;
@ -101,6 +102,8 @@ import org.gcube.vomanagement.usermanagement.model.GCubeUser;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.liferay.portal.service.UserLocalServiceUtil;
import eu.trentorise.opendata.jackan.model.CkanGroup;
/**
* The Class GWTWorkspaceServiceImpl.
@ -3504,6 +3507,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT
// get key per scope
String keyPerScopeRole = UtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_PUBLISH_WORKSPACE, scopePerCurrentUrl);
String keyPerScopeOrganizations = UtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_ORGANIZATIONS_PUBLISH_KEY, scopePerCurrentUrl);
String keyPerScopeGroups = UtilMethods.concatenateSessionKeyScope(SessionCatalogueAttributes.CKAN_GROUPS_MEMBER, scopePerCurrentUrl);
// check if this information was already into the ASL Session (true means the user has at least in one org
// the role editor), false that he is just a member so he cannot publish
@ -3528,7 +3532,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT
// 1) organizations in which he can publish (the widget will find these info in session)
if(role){
httpSession.setAttribute(keyPerScopeOrganizations, orgsInWhichAtLeastEditorRole);
workspaceLogger.info("Set organizations in which he can publish to " + orgsInWhichAtLeastEditorRole + " into session for user " + username);
httpSession.setAttribute(keyPerScopeGroups, fetchUserGroups(scopePerCurrentUrl, username));
}
}catch(Exception e){
workspaceLogger.error("Unable to retrieve the role information for this user. Returning FALSE", e);
@ -3544,6 +3548,40 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT
// return false
return role;
}
/**
* Fetch the list of ckan groups for which the user is member
* @param context
* @return
*/
private List<GroupBean> fetchUserGroups(String context, String username) {
List<GroupBean> toReturn = null;
workspaceLogger.info("Preloading user's groups");
try{
DataCatalogue catalogue = getCatalogue(context);
List<CkanGroup> ckanGroups = catalogue.getGroups();
String apiKey = catalogue.getApiKeyFromUsername(username);
toReturn = new ArrayList<GroupBean>();
// Members/Admin of the group
for (CkanGroup ckanGroup : ckanGroups) {
String role = catalogue.getRoleOfUserInGroup(username, ckanGroup.getName(), apiKey);
if(role == null)
continue;
toReturn.add(new GroupBean(ckanGroup.getTitle(), ckanGroup.getName()));
}
workspaceLogger.debug("List of groups to return is " + toReturn);
}catch(Exception e){
workspaceLogger.error("Failed to preload user's groups");
}
return toReturn;
}
/* (non-Javadoc)
* @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService#markFolderAsPublicForFolderItemId(java.lang.String, boolean)