ref 17169: Selection of users in the Sharing panel

https://support.d4science.org/issues/17169

Updated Set Adminastrators to support StorageHub calls

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@181502 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2019-09-04 15:57:34 +00:00
parent bb814fc3ea
commit 02e83870c3
3 changed files with 168 additions and 144 deletions

View File

@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc;
import java.util.List; import java.util.List;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess; import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
@ -62,7 +63,7 @@ public interface WorkspaceSharingService extends RemoteService {
void setACLs(String folderId, List<String> listLogins, String aclType) throws Exception; void setACLs(String folderId, List<String> listLogins, String aclType) throws Exception;
void updateACLForVREbyGroupName(String folderId, String aclType) throws Exception; void updateACLForVREbyGroupName(String folderId, ACL_TYPE aclType) throws Exception;
ReportAssignmentACL validateACLToUser(String folderId, List<String> listLogins, String aclType) throws Exception; ReportAssignmentACL validateACLToUser(String folderId, List<String> listLogins, String aclType) throws Exception;

View File

@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc;
import java.util.List; import java.util.List;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess; import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
@ -61,7 +62,7 @@ public interface WorkspaceSharingServiceAsync {
void setACLs(String folderId, List<String> listLogins, String aclType, AsyncCallback<Void> callback); void setACLs(String folderId, List<String> listLogins, String aclType, AsyncCallback<Void> callback);
void updateACLForVREbyGroupName(String folderId, String aclType, AsyncCallback<Void> callback); void updateACLForVREbyGroupName(String folderId, ACL_TYPE aclType, AsyncCallback<Void> callback);
void validateACLToUser(String folderId, List<String> listLogins, String aclType, void validateACLToUser(String folderId, List<String> listLogins, String aclType,
AsyncCallback<ReportAssignmentACL> callback); AsyncCallback<ReportAssignmentACL> callback);

View File

@ -12,15 +12,7 @@ import java.util.Set;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.gcube.common.homelibary.model.items.type.WorkspaceItemType;
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.WorkspaceItem;
import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder;
import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType;
import org.gcube.common.portal.PortalContext; import org.gcube.common.portal.PortalContext;
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;
import org.gcube.common.storagehub.client.dsl.ItemContainer; import org.gcube.common.storagehub.client.dsl.ItemContainer;
@ -44,6 +36,7 @@ import org.gcube.portlets.widgets.workspacesharingwidget.server.util.PortalConte
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtility; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtility;
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.UserUtil; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.UserUtil;
import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess; import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel;
import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL;
@ -106,20 +99,23 @@ 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, * private Workspace getWorkspace(HttpServletRequest httpServletRequest)
org.gcube.common.homelibrary.home.exceptions.InternalErrorException, HomeNotFoundException { * throws org.gcube.common.homelibrary.home.workspace.exceptions.
* WorkspaceFolderNotFoundException,
logger.trace("Get Workspace"); * org.gcube.common.homelibrary.home.exceptions.InternalErrorException,
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); * HomeNotFoundException {
logger.trace("PortalContextInfo: " + info); *
* logger.trace("Get Workspace"); PortalContextInfo info =
ScopeProvider.instance.set(info.getCurrentScope()); * WsUtil.getPortalContext(this.getThreadLocalRequest());
logger.trace("Scope provider instancied"); * logger.trace("PortalContextInfo: " + info);
*
Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername()); * ScopeProvider.instance.set(info.getCurrentScope());
return workspace; * logger.trace("Scope provider instancied");
} *
* Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
* return workspace; }
*/
/* /*
* (non-Javadoc) * (non-Javadoc)
@ -185,13 +181,13 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
@Override @Override
public List<UserVRE> getUserVREList() throws Exception { public List<UserVRE> getUserVREList() throws Exception {
try { try {
if (isTestMode()) { if (isTestMode()) {
logger.debug("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST VREs"); logger.debug("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST VREs");
return GWTWorkspaceSharingBuilder.getUserVREsListTest(); return GWTWorkspaceSharingBuilder.getUserVREsListTest();
} }
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
@ -249,24 +245,24 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
@Override @Override
public List<InfoContactModel> getListUserSharedByFolderSharedId(String itemId) throws Exception { public List<InfoContactModel> getListUserSharedByFolderSharedId(String itemId) throws Exception {
LocalDateTime startTime = LocalDateTime.now(); LocalDateTime startTime = LocalDateTime.now();
logger.info("Call getListUserSharedByFolderSharedId() Start Time: "+startTime.format(formatter)); logger.info("Call getListUserSharedByFolderSharedId() Start Time: " + startTime.format(formatter));
try { try {
logger.info("Call getListUserSharedByFolderSharedId(): [folderId=" + itemId + "]"); logger.info("Call getListUserSharedByFolderSharedId(): [folderId=" + itemId + "]");
if (itemId == null || itemId.isEmpty()) { if (itemId == null || itemId.isEmpty()) {
logger.error("Error in getListUserSharedByFolderSharedId(), invalid folder id: [id=" + itemId + "]"); logger.error("Error in getListUserSharedByFolderSharedId(), invalid folder id: [id=" + itemId + "]");
throw new Exception("Invalid item id requested: " + itemId); throw new Exception("Invalid item id requested: " + itemId);
} }
StorageHubClient shc = new StorageHubClient(); StorageHubClient shc = new StorageHubClient();
OpenResolver openResolver = shc.open(itemId); OpenResolver openResolver = shc.open(itemId);
FolderContainer folderContainer = openResolver.asFolder(); FolderContainer folderContainer = openResolver.asFolder();
FolderItem folder = folderContainer.get(); FolderItem folder = folderContainer.get();
if (folder.isShared()) { if (folder.isShared()) {
if (folder instanceof SharedFolder) { if (folder instanceof SharedFolder) {
SharedFolder sharedFolder = (SharedFolder) folder; SharedFolder sharedFolder = (SharedFolder) folder;
return retrieveUsersListFromSharedFolder(sharedFolder); return retrieveUsersListFromSharedFolder(sharedFolder);
} else { } else {
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder(); FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
@ -291,11 +287,11 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
throw new Exception(e.getLocalizedMessage(), e); throw new Exception(e.getLocalizedMessage(), e);
} finally { } finally {
LocalDateTime endTime = LocalDateTime.now(); LocalDateTime endTime = LocalDateTime.now();
logger.info("Call getListUserSharedByFolderSharedId() End Time: "+endTime.format(formatter)); logger.info("Call getListUserSharedByFolderSharedId() End Time: " + endTime.format(formatter));
long diff = ChronoUnit.MILLIS.between(startTime, endTime); long diff = ChronoUnit.MILLIS.between(startTime, endTime);
logger.info("Call getListUserSharedByFolderSharedId() Delay: MILLIS="+diff); logger.info("Call getListUserSharedByFolderSharedId() Delay: MILLIS=" + diff);
} }
} }
@ -318,10 +314,10 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
if (map != null && !map.isEmpty()) { if (map != null && !map.isEmpty()) {
List<InfoContactModel> listShared = new ArrayList<>(); List<InfoContactModel> listShared = new ArrayList<>();
List<String> keys = new ArrayList<String>(map.keySet()); List<String> keys = new ArrayList<String>(map.keySet());
LocalDateTime startTime = LocalDateTime.now(); LocalDateTime startTime = LocalDateTime.now();
logger.info("Liferay retrieve users Start Time: "+startTime.format(formatter)); logger.info("Liferay retrieve users Start Time: " + startTime.format(formatter));
UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager(); UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager();
GCubeUser curr; GCubeUser curr;
for (String username : keys) { for (String username : keys) {
@ -338,10 +334,10 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
} }
} }
LocalDateTime endTime = LocalDateTime.now(); LocalDateTime endTime = LocalDateTime.now();
logger.info("Liferay retrieve users End Time: "+endTime.format(formatter)); logger.info("Liferay retrieve users End Time: " + endTime.format(formatter));
long diff = ChronoUnit.MILLIS.between(startTime, endTime); long diff = ChronoUnit.MILLIS.between(startTime, endTime);
logger.info("Liferay Delay: MILLIS="+diff); logger.info("Liferay Delay: MILLIS=" + diff);
return listShared; return listShared;
} else { } else {
logger.info("The folder with id: " + sharedFolder.getId() + " has a invalid map!"); logger.info("The folder with id: " + sharedFolder.getId() + " has a invalid map!");
@ -361,17 +357,17 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
*/ */
@Override @Override
public InfoContactModel getOwnerByItemId(String itemId) throws Exception { public InfoContactModel getOwnerByItemId(String itemId) throws Exception {
//TODO
LocalDateTime startTime = LocalDateTime.now(); LocalDateTime startTime = LocalDateTime.now();
logger.info("Call getOwnerByItemId() Start Time: "+startTime.format(formatter)); logger.info("Call getOwnerByItemId() Start Time: " + startTime.format(formatter));
try { try {
logger.info("Call getOwnerByItemId(): [itemId=" + itemId + "]"); logger.info("Call getOwnerByItemId(): [itemId=" + itemId + "]");
if (itemId == null || itemId.isEmpty()) { if (itemId == null || itemId.isEmpty()) {
logger.error("Error in getOwnerByItemId(), invalid item id: " + itemId); logger.error("Error in getOwnerByItemId(), invalid item id: " + itemId);
throw new Exception("Invalid request, item id: " + itemId); throw new Exception("Invalid request, item id: " + itemId);
} }
StorageHubClient shc = new StorageHubClient(); StorageHubClient shc = new StorageHubClient();
OpenResolver openResolverForFile = shc.open(itemId); OpenResolver openResolverForFile = shc.open(itemId);
ItemContainer<Item> itemContainer = openResolverForFile.asItem(); ItemContainer<Item> itemContainer = openResolverForFile.asItem();
@ -382,16 +378,17 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
if (item.getOwner() != null && !item.getOwner().isEmpty()) { if (item.getOwner() != null && !item.getOwner().isEmpty()) {
try { try {
UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager(); UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager();
GCubeUser curr=um.getUserByUsername(item.getOwner()); GCubeUser curr = um.getUserByUsername(item.getOwner());
if (curr != null) { if (curr != null) {
InfoContactModel infoContactModel = new InfoContactModel(String.valueOf(curr.getUserId()), curr.getUsername(), curr.getFullname(), InfoContactModel infoContactModel = new InfoContactModel(String.valueOf(curr.getUserId()),
extractDomainFromEmail(curr.getEmail()), false); curr.getUsername(), curr.getFullname(), extractDomainFromEmail(curr.getEmail()),
logger.debug("Owner found: "+infoContactModel); false);
logger.debug("Owner found: " + infoContactModel);
return infoContactModel; return infoContactModel;
} }
} catch(Throwable e){ } catch (Throwable e) {
} }
logger.debug("Owner not found from user model!"); logger.debug("Owner not found from user model!");
return new InfoContactModel(item.getOwner(), item.getOwner(), item.getOwner(), "", false); return new InfoContactModel(item.getOwner(), item.getOwner(), item.getOwner(), "", false);
@ -409,11 +406,11 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
throw new Exception(e.getMessage()); throw new Exception(e.getMessage());
} finally { } finally {
LocalDateTime endTime = LocalDateTime.now(); LocalDateTime endTime = LocalDateTime.now();
logger.info("Call getOwnerByItemId() End Time: "+endTime.format(formatter)); logger.info("Call getOwnerByItemId() End Time: " + endTime.format(formatter));
long diff = ChronoUnit.MILLIS.between(startTime, endTime); long diff = ChronoUnit.MILLIS.between(startTime, endTime);
logger.info("Call getOwnerByItemId() Delay: MILLIS="+diff); logger.info("Call getOwnerByItemId() Delay: MILLIS=" + diff);
} }
} }
@ -810,7 +807,6 @@ 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!");
if (itemId == null || listContactLogins == null || listContactLogins.size() == 0) if (itemId == null || listContactLogins == null || listContactLogins.size() == 0)
return false; return false;
@ -818,9 +814,47 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
OpenResolver openResolverForItem = shc.open(itemId); OpenResolver openResolverForItem = shc.open(itemId);
FolderContainer folderContainer = openResolverForItem.asFolder(); FolderContainer folderContainer = openResolverForItem.asFolder();
FolderItem folderItem = folderContainer.get(); FolderItem folderItem = folderContainer.get();
if (folderItem.isShared()) { if (folderItem.isShared()) {
if (folderItem instanceof SharedFolder) { if (folderItem instanceof SharedFolder) {
return addAdminstratorByWorkspace(folderItem.getId(), listContactLogins); logger.debug("Folder type: SharedFolder");
String currentUser = getMyLogin();
logger.debug("Current User: " + currentUser);
Set<String> alreadyAdministrators = new HashSet<>();
List<ACL> acls = folderContainer.getAcls();
for (ACL acl : acls) {
if (acl.getPricipal().compareTo(currentUser) != 0) {
for (AccessType accessType : acl.getAccessTypes()) {
if (AccessType.ADMINISTRATOR.compareTo(accessType) == 0) {
alreadyAdministrators.add(acl.getPricipal());
}
}
}
}
logger.debug("Update ACL for add Administrators");
for (String user : listContactLogins) {
if (currentUser.compareTo(user) != 0) {
folderContainer = folderContainer.changeAcls(user, AccessType.ADMINISTRATOR);
}
}
logger.debug("Update Administrators done");
if (!alreadyAdministrators.isEmpty()) {
alreadyAdministrators.removeAll(listContactLogins);
if (!alreadyAdministrators.isEmpty()) {
logger.debug("Update to WriteOwner the users: " + alreadyAdministrators);
for (String user : alreadyAdministrators) {
folderContainer = folderContainer.changeAcls(user, AccessType.WRITE_OWNER);
}
logger.debug("Update to WriteOwner done");
}
}
logger.debug("Administrators Updated");
return true;
} else { } else {
String error = "Attention, the set administrators operation can only be done on the root shared folder. " String error = "Attention, the set administrators operation can only be done on the root shared folder. "
@ -842,67 +876,6 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
} }
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: " + listContactLogins);
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.");
}
}
private List<InfoContactModel> retrieveAdminContactsFromACLs(FolderContainer folderContainer) throws Exception { private List<InfoContactModel> retrieveAdminContactsFromACLs(FolderContainer folderContainer) throws Exception {
if (folderContainer == null) { if (folderContainer == null) {
logger.debug("FolderContainer is null"); logger.debug("FolderContainer is null");
@ -1730,7 +1703,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
} }
/** /**
* Update acl for vr eby group name. * Update acl for vre by group name.
* *
* @param folderId * @param folderId
* the folder id * the folder id
@ -1740,37 +1713,86 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
* the exception * the exception
*/ */
@Override @Override
public void updateACLForVREbyGroupName(String folderId, String aclType) throws Exception { public void updateACLForVREbyGroupName(String folderId, ACL_TYPE aclType) throws Exception {
try { try {
// TODO
logger.debug("UpdateACLForVREbyGroupName()");
logger.debug("folderId: " + folderId);
logger.debug("ACL type is: " + aclType);
if (folderId == null) if (folderId == null || folderId.isEmpty()) {
throw new Exception("Folder id is null"); throw new Exception("Folder id is null");
}
logger.trace("Updating ACL to VRE FOLDER id: " + folderId); if (aclType == null) {
logger.trace("ACL type is: " + aclType); throw new Exception("ACLType parameter is invalid");
logger.trace("Get Workspace"); }
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
logger.trace("PortalContextInfo: " + info); StorageHubClient shc = new StorageHubClient();
OpenResolver openResolverForItem = shc.open(folderId);
FolderContainer folderContainer = openResolverForItem.asFolder();
FolderItem folderItem = folderContainer.get();
ScopeProvider.instance.set(info.getCurrentScope()); if (folderItem.isShared()) {
logger.trace("Scope provider set: " + info.getCurrentScope()); if (folderItem instanceof SharedFolder) {
logger.debug("Folder type: SharedFolder");
SharedFolder sharedFolder = (SharedFolder) folderItem;
if (sharedFolder.isVreFolder()) {
logger.debug("The folder is a VreFolder");
Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername()); String currentUser = getMyLogin();
WorkspaceItem wsItem = workspace.getItem(folderId); logger.debug("Current User: " + currentUser);
AccessType selectedAccessType = null;
switch (aclType) {
case ADMINISTRATOR:
selectedAccessType = AccessType.ADMINISTRATOR;
break;
case READ_ONLY:
selectedAccessType = AccessType.READ_ONLY;
break;
case WRITE_ALL:
selectedAccessType = AccessType.WRITE_ALL;
break;
case WRITE_OWNER:
selectedAccessType = AccessType.WRITE_OWNER;
break;
default:
break;
}
if (selectedAccessType == null) {
throw new Exception("ACLType parameter is invalid");
}
List<ACL> acls = folderContainer.getAcls();
for (ACL acl : acls) {
if (acl.getPricipal().compareTo(currentUser) != 0) {
folderContainer = folderContainer.changeAcls(acl.getPricipal(), selectedAccessType);
}
}
} else {
String error = "Attention, the operation can only be done on the VRE folder. "
+ "Please, select the VRE folder if you want to set the ACL.";
logger.error(error);
throw new Exception(error);
}
} else {
String error = "Attention, the operation can only be done on the root VRE folder. "
+ "Please, select the root VRE folder if you want to set the ACL.";
logger.error(error);
throw new Exception(error);
if (wsItem.isShared() && wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)) {
WorkspaceSharedFolder ite = (WorkspaceSharedFolder) wsItem;
// PATCH TODO TEMPORARY SOLUTION
if (ite.isVreFolder()) {
List<String> groupName = new ArrayList<String>();
groupName.add(wsItem.getName());
ite.setACL(groupName, ACLType.valueOf(aclType));
} }
} else } else {
throw new Exception("Source item is not shared or shared folder"); logger.error("The item requested is not a valid shared folder : [itemId=" + folderId + "]");
throw new Exception("The item requested is not a valid shared folder. Impossible set the ACL.");
}
logger.trace("Updating ACL completed, retuning"); logger.debug("ACL updated");
} catch (Exception e) { } catch (Exception e) {
logger.error("Error in set ACLs", e); logger.error("Error in set ACLs", e);
String error = "Error updating the permissions. " + e.getMessage(); String error = "Error updating the permissions. " + e.getMessage();