Fixed Get Info for shared Folder
git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@179445 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
c82d433772
commit
66b42cab91
|
@ -550,7 +550,7 @@ public class GWTWorkspaceSharingBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the workspace acl from ac ls.
|
* Gets the workspace acl from list of acl.
|
||||||
*
|
*
|
||||||
* @param listACL
|
* @param listACL
|
||||||
* the types
|
* the types
|
||||||
|
@ -568,8 +568,9 @@ public class GWTWorkspaceSharingBuilder {
|
||||||
switch (accessType) {
|
switch (accessType) {
|
||||||
case ADMINISTRATOR:
|
case ADMINISTRATOR:
|
||||||
// acls.add(new WorkspaceACL(acl.toString(),
|
// acls.add(new WorkspaceACL(acl.toString(),
|
||||||
// ACL_TYPE.ADMINISTRATOR, "Admin", false,
|
// ACL_TYPE.ADMINISTRATOR, "Administrator", false,
|
||||||
// USER_TYPE.ADMINISTRATOR, ""));
|
// USER_TYPE.ADMINISTRATOR, "Users are administrator and can
|
||||||
|
// update/delete any file"));
|
||||||
break;
|
break;
|
||||||
case READ_ONLY:
|
case READ_ONLY:
|
||||||
acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.READ_ONLY, "Read Only", false, USER_TYPE.OTHER,
|
acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.READ_ONLY, "Read Only", false, USER_TYPE.OTHER,
|
||||||
|
@ -600,6 +601,54 @@ public class GWTWorkspaceSharingBuilder {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the workspace acl from list of acl.
|
||||||
|
*
|
||||||
|
* @param acl
|
||||||
|
* the types
|
||||||
|
* @return the workspace acl from acl
|
||||||
|
* @throws Exception
|
||||||
|
* the exception
|
||||||
|
*/
|
||||||
|
public List<WorkspaceACL> getWorkspaceACLForUser(ACL acl) throws Exception {
|
||||||
|
|
||||||
|
List<WorkspaceACL> acls = new ArrayList<WorkspaceACL>();
|
||||||
|
|
||||||
|
List<AccessType> listAccessType = acl.getAccessTypes();
|
||||||
|
for (AccessType accessType : listAccessType) {
|
||||||
|
switch (accessType) {
|
||||||
|
case ADMINISTRATOR:
|
||||||
|
acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.ADMINISTRATOR, "Admin", false,
|
||||||
|
USER_TYPE.ADMINISTRATOR, "Users are administrator and can update/delete any file"));
|
||||||
|
break;
|
||||||
|
case READ_ONLY:
|
||||||
|
acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.READ_ONLY, "Read Only", false, USER_TYPE.OTHER,
|
||||||
|
"Users can read any file but cannot update/delete"));
|
||||||
|
break;
|
||||||
|
case WRITE_OWNER:
|
||||||
|
acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.WRITE_OWNER, "Write Own", true, USER_TYPE.OTHER,
|
||||||
|
"Users can update/delete only their files"));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WRITE_ALL:
|
||||||
|
acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.WRITE_ANY, "Write Any", false, USER_TYPE.OTHER,
|
||||||
|
"Any user can update/delete any file"));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// acls.add(new WorkspaceACL(acl.toString(),
|
||||||
|
// ACL_TYPE.WRITE_OWNER,
|
||||||
|
// acl.toString(), false, USER_TYPE.OTHER, ""));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (acls.size() == 0)
|
||||||
|
throw new Exception("No ACLs rules found!");
|
||||||
|
|
||||||
|
return acls;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the formatted html acl from ac ls.
|
* Gets the formatted html acl from ac ls.
|
||||||
*
|
*
|
||||||
|
|
|
@ -11,10 +11,12 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType;
|
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType;
|
||||||
import org.gcube.common.homelibrary.home.HomeLibrary;
|
import org.gcube.common.homelibrary.home.HomeLibrary;
|
||||||
|
import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException;
|
||||||
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
||||||
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
|
||||||
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType;
|
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType;
|
||||||
|
import org.gcube.common.portal.PortalContext;
|
||||||
import org.gcube.common.scope.api.ScopeProvider;
|
import org.gcube.common.scope.api.ScopeProvider;
|
||||||
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
||||||
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||||
|
@ -47,6 +49,11 @@ import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ReportAssignmentACL;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ReportAssignmentACL;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.SessionExpiredException;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.SessionExpiredException;
|
||||||
import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL;
|
import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL;
|
||||||
|
import org.gcube.vomanagement.usermanagement.GroupManager;
|
||||||
|
import org.gcube.vomanagement.usermanagement.impl.LiferayGroupManager;
|
||||||
|
import org.gcube.vomanagement.usermanagement.impl.LiferayUserManager;
|
||||||
|
import org.gcube.vomanagement.usermanagement.model.GCubeGroup;
|
||||||
|
import org.gcube.vomanagement.usermanagement.model.GCubeUser;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -93,6 +100,36 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
return !WsUtil.isWithinPortal(); // IS NOT INTO PORTAL
|
return !WsUtil.isWithinPortal(); // IS NOT INTO PORTAL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Workspace getWorkspace(HttpServletRequest httpServletRequest)
|
||||||
|
throws org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException,
|
||||||
|
org.gcube.common.homelibrary.home.exceptions.InternalErrorException, HomeNotFoundException {
|
||||||
|
|
||||||
|
logger.trace("Get Workspace");
|
||||||
|
PortalContext pContext = PortalContext.getConfiguration();
|
||||||
|
// USER
|
||||||
|
GCubeUser user = pContext.getCurrentUser(httpServletRequest);
|
||||||
|
String username = user.getUsername();
|
||||||
|
String fullName = user.getFullname();
|
||||||
|
String email = user.getEmail();
|
||||||
|
String avatarID = user.getUserAvatarId();
|
||||||
|
String avatarURL = user.getUserAvatarURL();
|
||||||
|
// SESSION
|
||||||
|
String currentScope = pContext.getCurrentScope(httpServletRequest);
|
||||||
|
String userToken = pContext.getCurrentUserToken(httpServletRequest);
|
||||||
|
long currGroupId = pContext.getCurrentGroupId(httpServletRequest);
|
||||||
|
|
||||||
|
PortalContextInfo info = new PortalContextInfo(username, fullName, email, avatarID, avatarURL, currentScope,
|
||||||
|
userToken, currGroupId);
|
||||||
|
|
||||||
|
logger.trace("PortalContextInfo: " + info);
|
||||||
|
|
||||||
|
ScopeProvider.instance.set(info.getCurrentScope());
|
||||||
|
logger.trace("Scope provider instancied");
|
||||||
|
|
||||||
|
Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
|
||||||
|
return workspace;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -655,68 +692,94 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
try {
|
try {
|
||||||
logger.info("Call addAdministratorsByFolderId(): [itemId=" + itemId + ", listContactLogins"
|
logger.info("Call addAdministratorsByFolderId(): [itemId=" + itemId + ", listContactLogins"
|
||||||
+ listContactLogins + "]");
|
+ listContactLogins + "]");
|
||||||
logger.info("This function is not available in StorageHub!");
|
// logger.info("This function is not available in StorageHub!");
|
||||||
return false;
|
if (itemId == null || listContactLogins == null || listContactLogins.size() == 0)
|
||||||
// if(folderId==null || listContactLogins==null ||
|
return false;
|
||||||
// listContactLogins.size()==0)
|
|
||||||
// return false;
|
StorageHubClient shc = new StorageHubClient();
|
||||||
// Workspace workspace = getWorkspace();
|
OpenResolver openResolverForItem = shc.open(itemId);
|
||||||
// WorkspaceItem item = workspace.getItem(folderId);
|
FolderContainer folderContainer = openResolverForItem.asFolder();
|
||||||
// workspaceLogger.info("Adding administator/s to folder:
|
FolderItem folderItem = folderContainer.get();
|
||||||
// "+folderId);
|
if (folderItem.isShared()) {
|
||||||
//
|
if (folderItem instanceof SharedFolder) {
|
||||||
// if(item!=null &&
|
return addAdminstratorByWorkspace(folderItem.getId(), listContactLogins);
|
||||||
// item.getType().equals(WorkspaceItemType.SHARED_FOLDER)){
|
|
||||||
// WorkspaceSharedFolder sharedFolder = (WorkspaceSharedFolder)
|
} else {
|
||||||
// item;
|
String error = "Attention, the set administrators operation can only be done on the root shared folder. "
|
||||||
//
|
+ "Please, select the root shared folder if you want to set the administrators.";
|
||||||
// //retrieving old administrators list
|
logger.error(error);
|
||||||
// GWTWorkspaceBuilder builder = getGWTWorkspaceBuilder();
|
throw new Exception(error);
|
||||||
// workspaceLogger.info("Retrieving old administator/s..");
|
|
||||||
// List<InfoContactModel> oldAdmins =
|
}
|
||||||
// builder.buildGxtInfoContactsFromPortalLogins(sharedFolder.getAdministrators());
|
} else {
|
||||||
// workspaceLogger.info("Retrieving old administator/s are/is:
|
logger.error("The item requested is not a valid shared folder : [itemId=" + itemId + "]");
|
||||||
// "+oldAdmins.size());
|
throw new Exception("The item requested is not a valid shared folder. Impossible set the administrators.");
|
||||||
//
|
}
|
||||||
// workspaceLogger.info("Setting administators:");
|
|
||||||
// printList(listContactLogins);
|
|
||||||
// sharedFolder.setAdmins(listContactLogins);
|
|
||||||
//
|
|
||||||
// workspaceLogger.info("Converting new administator/s..");
|
|
||||||
// List<InfoContactModel> newAdmins =
|
|
||||||
// builder.buildGxtInfoContactsFromPortalLogins(listContactLogins);
|
|
||||||
// NotificationsProducer np = getNotificationProducer();
|
|
||||||
//
|
|
||||||
// workspaceLogger.info("Sending notifications downgrade/upgrade
|
|
||||||
// administator/s..");
|
|
||||||
// DifferenceBetweenInfoContactModel diff1 = new
|
|
||||||
// DifferenceBetweenInfoContactModel(oldAdmins, newAdmins);
|
|
||||||
// List<InfoContactModel> contactsDowngrade =
|
|
||||||
// diff1.getDifferentsContacts();
|
|
||||||
//
|
|
||||||
// for (InfoContactModel infoContactModel : contactsDowngrade) {
|
|
||||||
// np.notifyAdministratorDowngrade(infoContactModel, sharedFolder);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// DifferenceBetweenInfoContactModel diff2 = new
|
|
||||||
// DifferenceBetweenInfoContactModel(newAdmins, oldAdmins);
|
|
||||||
// List<InfoContactModel> contactsUpgrade =
|
|
||||||
// diff2.getDifferentsContacts();
|
|
||||||
//
|
|
||||||
// for (InfoContactModel infoContactModel : contactsUpgrade) {
|
|
||||||
// np.notifyAdministratorUpgrade(infoContactModel, sharedFolder);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return true;
|
|
||||||
//
|
|
||||||
// }else
|
|
||||||
// throw new Exception("The item is null or not instanceof
|
|
||||||
// "+WorkspaceItemType.SHARED_FOLDER);
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("Error in addAdministratorsByFolderId(): " + e.getLocalizedMessage(), e);
|
logger.error("Error in addAdministratorsByFolderId(): " + e.getLocalizedMessage(), e);
|
||||||
String error = "Attention, administrators can not be added by StorageHub.";
|
throw e;
|
||||||
throw new Exception(error);
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean addAdminstratorByWorkspace(String itemId, List<String> listContactLogins) throws Exception {
|
||||||
|
try {
|
||||||
|
Workspace workspace = getWorkspace(this.getThreadLocalRequest());
|
||||||
|
WorkspaceItem item = workspace.getItem(itemId);
|
||||||
|
logger.info("Adding administator/s to folder: " + itemId);
|
||||||
|
|
||||||
|
if (item != null && item.getType().equals(WorkspaceItemType.SHARED_FOLDER)) {
|
||||||
|
WorkspaceSharedFolder sharedFolder = (WorkspaceSharedFolder) item;
|
||||||
|
|
||||||
|
// retrieving old administrators list
|
||||||
|
// GWTWorkspaceSharingBuilder builder = new
|
||||||
|
// GWTWorkspaceSharingBuilder();
|
||||||
|
// logger.info("Retrieving old administator/s..");
|
||||||
|
// List<InfoContactModel> oldAdmins = builder
|
||||||
|
// .buildGxtInfoContactsFromPortalLogins(sharedFolder.getAdministrators());
|
||||||
|
// logger.info("Retrieving old administator/s are/is:" +
|
||||||
|
// oldAdmins.size());
|
||||||
|
|
||||||
|
logger.info("Setting administators:");
|
||||||
|
sharedFolder.setAdmins(listContactLogins);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* logger.info("Converting new administator/s..");
|
||||||
|
* List<InfoContactModel> newAdmins =
|
||||||
|
* builder.buildGxtInfoContactsFromPortalLogins(
|
||||||
|
* listContactLogins); NotificationsProducer np =
|
||||||
|
* getNotificationProducer();
|
||||||
|
*
|
||||||
|
* logger.
|
||||||
|
* info("Sending notifications downgrade/upgrade administator/s.."
|
||||||
|
* ); DifferenceBetweenInfoContactModel diff1 = new
|
||||||
|
* DifferenceBetweenInfoContactModel(oldAdmins, newAdmins);
|
||||||
|
* List<InfoContactModel> contactsDowngrade =
|
||||||
|
* diff1.getDifferentsContacts();
|
||||||
|
*
|
||||||
|
* for (InfoContactModel infoContactModel : contactsDowngrade) {
|
||||||
|
* np.notifyAdministratorDowngrade(infoContactModel,
|
||||||
|
* sharedFolder); }
|
||||||
|
*
|
||||||
|
* DifferenceBetweenInfoContactModel diff2 = new
|
||||||
|
* DifferenceBetweenInfoContactModel(newAdmins, oldAdmins);
|
||||||
|
* List<InfoContactModel> contactsUpgrade =
|
||||||
|
* diff2.getDifferentsContacts();
|
||||||
|
*
|
||||||
|
* for (InfoContactModel infoContactModel : contactsUpgrade) {
|
||||||
|
* np.notifyAdministratorUpgrade(infoContactModel,
|
||||||
|
* sharedFolder); }
|
||||||
|
*/
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
} else
|
||||||
|
throw new Exception("The item is null or not instanceof " + WorkspaceItemType.SHARED_FOLDER);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Error in addAdminstratorByWorkspace() : " + e.getLocalizedMessage(), e);
|
||||||
|
throw new Exception("Error in set administrators operation for this item.");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -749,38 +812,6 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
|
||||||
// * DEBUG.
|
|
||||||
// *
|
|
||||||
// * @return the fake groups
|
|
||||||
// */
|
|
||||||
// private List<InfoContactModel> getFakeGroups() {
|
|
||||||
//
|
|
||||||
// List<InfoContactModel> listContactsModel = new
|
|
||||||
// ArrayList<InfoContactModel>();
|
|
||||||
//
|
|
||||||
// PortalContext context = PortalContext.getConfiguration();
|
|
||||||
// System.out.println("context.getInfrastructureName(): " +
|
|
||||||
// context.getInfrastructureName());
|
|
||||||
// // System.out.println("context.getVOsAsString():
|
|
||||||
// // "+context.getVOsAsString());
|
|
||||||
// List<VO> vos =
|
|
||||||
// WsUtil.getVresFromInfrastructure(context.getInfrastructureName(),
|
|
||||||
// "devsec");
|
|
||||||
//
|
|
||||||
// for (VO vo : vos) {
|
|
||||||
// System.out.println("vo name " + vo.getName());
|
|
||||||
//
|
|
||||||
// for (VRE vre : vo.getVres()) {
|
|
||||||
// System.out.println("vre name " + vre.getName());
|
|
||||||
// listContactsModel.add(new InfoContactModel(vre.getName(), vre.getName(),
|
|
||||||
// vre.getName(), true));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return listContactsModel;
|
|
||||||
// }
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -1086,7 +1117,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
if (folderItem.isShared()) {
|
if (folderItem.isShared()) {
|
||||||
if (folderItem instanceof SharedFolder) {
|
if (folderItem instanceof SharedFolder) {
|
||||||
logger.debug("Is a shared folder search ACL in it");
|
logger.debug("Is a shared folder search ACL in it");
|
||||||
List<WorkspaceACL> acls = retrieveACLsFromFolderContainer(folderContainer);
|
List<WorkspaceACL> acls = retrieveUserACLsFromFolderContainer(folderContainer);
|
||||||
List<ExtendedWorkspaceACL> listEACL = new ArrayList<ExtendedWorkspaceACL>(acls.size());
|
List<ExtendedWorkspaceACL> listEACL = new ArrayList<ExtendedWorkspaceACL>(acls.size());
|
||||||
for (WorkspaceACL workspaceACL : acls) {
|
for (WorkspaceACL workspaceACL : acls) {
|
||||||
boolean isBaseSharedFolder = true;
|
boolean isBaseSharedFolder = true;
|
||||||
|
@ -1103,7 +1134,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
|
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
|
||||||
FolderItem rootSharedFolder = rootSharedFolderContainer.get();
|
FolderItem rootSharedFolder = rootSharedFolderContainer.get();
|
||||||
if (rootSharedFolder instanceof SharedFolder) {
|
if (rootSharedFolder instanceof SharedFolder) {
|
||||||
List<WorkspaceACL> acls = retrieveACLsFromFolderContainer(rootSharedFolderContainer);
|
List<WorkspaceACL> acls = retrieveUserACLsFromFolderContainer(rootSharedFolderContainer);
|
||||||
List<ExtendedWorkspaceACL> listEACL = new ArrayList<ExtendedWorkspaceACL>(acls.size());
|
List<ExtendedWorkspaceACL> listEACL = new ArrayList<ExtendedWorkspaceACL>(acls.size());
|
||||||
for (WorkspaceACL workspaceACL : acls) {
|
for (WorkspaceACL workspaceACL : acls) {
|
||||||
boolean isBaseSharedFolder = true;
|
boolean isBaseSharedFolder = true;
|
||||||
|
@ -1133,18 +1164,87 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<WorkspaceACL> retrieveACLsFromFolderContainer(FolderContainer folderContainer) throws Exception {
|
// TODO
|
||||||
|
private List<WorkspaceACL> retrieveUserACLsFromFolderContainer(FolderContainer folderContainer) throws Exception {
|
||||||
|
String currentUser = getMyLogin();
|
||||||
|
logger.debug("Current User: " + currentUser);
|
||||||
List<ACL> acls = folderContainer.getAcls();
|
List<ACL> acls = folderContainer.getAcls();
|
||||||
logger.debug("Retrieved acls: " + acls);
|
logger.debug("Retrieved acls: " + acls);
|
||||||
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
ACL currentUserACL = null;
|
||||||
List<WorkspaceACL> wsAcls = builder.getWorkspaceACLFromACLs(acls);
|
for (ACL acl : acls) {
|
||||||
if (wsAcls == null || wsAcls.isEmpty()) {
|
if (acl.getPricipal().compareTo(currentUser) == 0) {
|
||||||
logger.info("Converted ACLBySharedFolderId is null or empty, returning null");
|
currentUserACL = acl;
|
||||||
return null;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info("Returning first acl with id: " + wsAcls.get(0).getId());
|
List<WorkspaceACL> wsAcls = null;
|
||||||
return wsAcls;
|
if (currentUserACL == null) {
|
||||||
|
List<GCubeGroup> listVRE = retrieveCurrentUserACLFromGroup(currentUser);
|
||||||
|
int i = 0;
|
||||||
|
while (currentUserACL == null && i < listVRE.size()) {
|
||||||
|
GCubeGroup vre = listVRE.get(i);
|
||||||
|
String vreName = vre.getGroupName();
|
||||||
|
for (ACL acl : acls) {
|
||||||
|
String principal = acl.getPricipal();
|
||||||
|
String rootVO = PortalContext.getConfiguration().getInfrastructureName();
|
||||||
|
if (principal.startsWith(rootVO)) {
|
||||||
|
int voIndex = principal.indexOf("-");
|
||||||
|
if (voIndex != -1) {
|
||||||
|
String tempScope = principal.substring(voIndex + 1);
|
||||||
|
int vreIndex = tempScope.indexOf("-");
|
||||||
|
if (vreIndex != -1) {
|
||||||
|
tempScope = tempScope.substring(vreIndex + 1);
|
||||||
|
if (tempScope.compareTo(vreName) == 0) {
|
||||||
|
currentUserACL = acl;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
if (currentUserACL != null) {
|
||||||
|
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
||||||
|
wsAcls = builder.getWorkspaceACLForUser(currentUserACL);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
||||||
|
wsAcls = builder.getWorkspaceACLForUser(currentUserACL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wsAcls == null || wsAcls.isEmpty()) {
|
||||||
|
logger.info("List of ACL is null or empty, returning null");
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
logger.info("List of ACL is retrieved. Use first acl with id: " + wsAcls.get(0).getId());
|
||||||
|
return wsAcls;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<GCubeGroup> retrieveCurrentUserACLFromGroup(String userName) throws Exception {
|
||||||
|
try {
|
||||||
|
// Instanciate the manager
|
||||||
|
GroupManager groupManager = new LiferayGroupManager();
|
||||||
|
// retrieve the groups to whom a given user belongs (given the user
|
||||||
|
// identifier)
|
||||||
|
long userId;
|
||||||
|
|
||||||
|
userId = new LiferayUserManager().getUserId(userName);
|
||||||
|
|
||||||
|
List<GCubeGroup> listOfGroups = groupManager.listGroupsByUser(userId);
|
||||||
|
List<GCubeGroup> vres = new ArrayList<GCubeGroup>();
|
||||||
|
for (GCubeGroup g : listOfGroups) {
|
||||||
|
if (groupManager.isVRE(g.getGroupId()))
|
||||||
|
vres.add(g);
|
||||||
|
}
|
||||||
|
logger.debug("Current User VREs: " + vres);
|
||||||
|
return vres;
|
||||||
|
} catch (Throwable e) {
|
||||||
|
logger.error("Error retrieving User group: " + e.getLocalizedMessage(), e);
|
||||||
|
throw new Exception("Error retrieving User group: " + e.getLocalizedMessage(), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -10,6 +10,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.shared;
|
||||||
*/
|
*/
|
||||||
public enum ACL_TYPE {
|
public enum ACL_TYPE {
|
||||||
|
|
||||||
|
ADMINISTRATOR, // "Users are administrators"
|
||||||
READ_ONLY, // "Users can read any file but cannot update/delete"
|
READ_ONLY, // "Users can read any file but cannot update/delete"
|
||||||
WRITE_OWNER, //"Users can update/delete only their files"
|
WRITE_OWNER, //"Users can update/delete only their files"
|
||||||
WRITE_ANY; //"Any user can update/delete any file"
|
WRITE_ANY; //"Any user can update/delete any file"
|
||||||
|
|
Loading…
Reference in New Issue