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:
parent
bb814fc3ea
commit
02e83870c3
|
@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc;
|
|||
|
||||
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.CredentialModel;
|
||||
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 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;
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc;
|
|||
|
||||
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.CredentialModel;
|
||||
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 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,
|
||||
AsyncCallback<ReportAssignmentACL> callback);
|
||||
|
|
|
@ -12,15 +12,7 @@ import java.util.Set;
|
|||
|
||||
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.scope.api.ScopeProvider;
|
||||
import org.gcube.common.storagehub.client.dsl.FileContainer;
|
||||
import org.gcube.common.storagehub.client.dsl.FolderContainer;
|
||||
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.UserUtil;
|
||||
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.CredentialModel;
|
||||
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
|
||||
}
|
||||
|
||||
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");
|
||||
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
|
||||
logger.trace("PortalContextInfo: " + info);
|
||||
|
||||
ScopeProvider.instance.set(info.getCurrentScope());
|
||||
logger.trace("Scope provider instancied");
|
||||
|
||||
Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
|
||||
return workspace;
|
||||
}
|
||||
/*
|
||||
* 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"); PortalContextInfo info =
|
||||
* WsUtil.getPortalContext(this.getThreadLocalRequest());
|
||||
* logger.trace("PortalContextInfo: " + info);
|
||||
*
|
||||
* ScopeProvider.instance.set(info.getCurrentScope());
|
||||
* logger.trace("Scope provider instancied");
|
||||
*
|
||||
* Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername());
|
||||
* return workspace; }
|
||||
*/
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
|
@ -185,13 +181,13 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
@Override
|
||||
public List<UserVRE> getUserVREList() throws Exception {
|
||||
try {
|
||||
|
||||
|
||||
if (isTestMode()) {
|
||||
logger.debug("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST VREs");
|
||||
|
||||
|
||||
return GWTWorkspaceSharingBuilder.getUserVREsListTest();
|
||||
}
|
||||
|
||||
|
||||
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
|
||||
|
||||
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
|
||||
|
@ -249,24 +245,24 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
@Override
|
||||
public List<InfoContactModel> getListUserSharedByFolderSharedId(String itemId) throws Exception {
|
||||
LocalDateTime startTime = LocalDateTime.now();
|
||||
logger.info("Call getListUserSharedByFolderSharedId() Start Time: "+startTime.format(formatter));
|
||||
|
||||
logger.info("Call getListUserSharedByFolderSharedId() Start Time: " + startTime.format(formatter));
|
||||
|
||||
try {
|
||||
logger.info("Call getListUserSharedByFolderSharedId(): [folderId=" + itemId + "]");
|
||||
if (itemId == null || itemId.isEmpty()) {
|
||||
logger.error("Error in getListUserSharedByFolderSharedId(), invalid folder id: [id=" + itemId + "]");
|
||||
throw new Exception("Invalid item id requested: " + itemId);
|
||||
}
|
||||
|
||||
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
OpenResolver openResolver = shc.open(itemId);
|
||||
FolderContainer folderContainer = openResolver.asFolder();
|
||||
FolderItem folder = folderContainer.get();
|
||||
|
||||
FolderItem folder = folderContainer.get();
|
||||
|
||||
if (folder.isShared()) {
|
||||
if (folder instanceof SharedFolder) {
|
||||
SharedFolder sharedFolder = (SharedFolder) folder;
|
||||
|
||||
|
||||
return retrieveUsersListFromSharedFolder(sharedFolder);
|
||||
} else {
|
||||
FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder();
|
||||
|
@ -291,11 +287,11 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
throw new Exception(e.getLocalizedMessage(), e);
|
||||
} finally {
|
||||
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);
|
||||
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()) {
|
||||
List<InfoContactModel> listShared = new ArrayList<>();
|
||||
List<String> keys = new ArrayList<String>(map.keySet());
|
||||
|
||||
|
||||
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();
|
||||
GCubeUser curr;
|
||||
for (String username : keys) {
|
||||
|
@ -338,10 +334,10 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
}
|
||||
}
|
||||
LocalDateTime endTime = LocalDateTime.now();
|
||||
logger.info("Liferay retrieve users End Time: "+endTime.format(formatter));
|
||||
|
||||
long diff = ChronoUnit.MILLIS.between(startTime, endTime);
|
||||
logger.info("Liferay Delay: MILLIS="+diff);
|
||||
logger.info("Liferay retrieve users End Time: " + endTime.format(formatter));
|
||||
|
||||
long diff = ChronoUnit.MILLIS.between(startTime, endTime);
|
||||
logger.info("Liferay Delay: MILLIS=" + diff);
|
||||
return listShared;
|
||||
} else {
|
||||
logger.info("The folder with id: " + sharedFolder.getId() + " has a invalid map!");
|
||||
|
@ -361,17 +357,17 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
*/
|
||||
@Override
|
||||
public InfoContactModel getOwnerByItemId(String itemId) throws Exception {
|
||||
//TODO
|
||||
|
||||
LocalDateTime startTime = LocalDateTime.now();
|
||||
logger.info("Call getOwnerByItemId() Start Time: "+startTime.format(formatter));
|
||||
|
||||
logger.info("Call getOwnerByItemId() Start Time: " + startTime.format(formatter));
|
||||
|
||||
try {
|
||||
logger.info("Call getOwnerByItemId(): [itemId=" + itemId + "]");
|
||||
if (itemId == null || itemId.isEmpty()) {
|
||||
logger.error("Error in getOwnerByItemId(), invalid item id: " + itemId);
|
||||
throw new Exception("Invalid request, item id: " + itemId);
|
||||
}
|
||||
|
||||
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
OpenResolver openResolverForFile = shc.open(itemId);
|
||||
ItemContainer<Item> itemContainer = openResolverForFile.asItem();
|
||||
|
@ -382,16 +378,17 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
if (item.getOwner() != null && !item.getOwner().isEmpty()) {
|
||||
try {
|
||||
UserManager um = GWTWorkspaceSharingBuilder.getLiferayUserManager();
|
||||
GCubeUser curr=um.getUserByUsername(item.getOwner());
|
||||
|
||||
GCubeUser curr = um.getUserByUsername(item.getOwner());
|
||||
|
||||
if (curr != null) {
|
||||
InfoContactModel infoContactModel = new InfoContactModel(String.valueOf(curr.getUserId()), curr.getUsername(), curr.getFullname(),
|
||||
extractDomainFromEmail(curr.getEmail()), false);
|
||||
logger.debug("Owner found: "+infoContactModel);
|
||||
InfoContactModel infoContactModel = new InfoContactModel(String.valueOf(curr.getUserId()),
|
||||
curr.getUsername(), curr.getFullname(), extractDomainFromEmail(curr.getEmail()),
|
||||
false);
|
||||
logger.debug("Owner found: " + infoContactModel);
|
||||
return infoContactModel;
|
||||
}
|
||||
} catch(Throwable e){
|
||||
|
||||
} catch (Throwable e) {
|
||||
|
||||
}
|
||||
logger.debug("Owner not found from user model!");
|
||||
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());
|
||||
} finally {
|
||||
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);
|
||||
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 {
|
||||
logger.info("Call addAdministratorsByFolderId(): [itemId=" + itemId + ", listContactLogins"
|
||||
+ listContactLogins + "]");
|
||||
// logger.info("This function is not available in StorageHub!");
|
||||
if (itemId == null || listContactLogins == null || listContactLogins.size() == 0)
|
||||
return false;
|
||||
|
||||
|
@ -818,9 +814,47 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
OpenResolver openResolverForItem = shc.open(itemId);
|
||||
FolderContainer folderContainer = openResolverForItem.asFolder();
|
||||
FolderItem folderItem = folderContainer.get();
|
||||
|
||||
if (folderItem.isShared()) {
|
||||
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 {
|
||||
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 {
|
||||
if (folderContainer == 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
|
||||
* the folder id
|
||||
|
@ -1740,37 +1713,86 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
|
|||
* the exception
|
||||
*/
|
||||
@Override
|
||||
public void updateACLForVREbyGroupName(String folderId, String aclType) throws Exception {
|
||||
public void updateACLForVREbyGroupName(String folderId, ACL_TYPE aclType) throws Exception {
|
||||
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");
|
||||
}
|
||||
|
||||
logger.trace("Updating ACL to VRE FOLDER id: " + folderId);
|
||||
logger.trace("ACL type is: " + aclType);
|
||||
logger.trace("Get Workspace");
|
||||
PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest());
|
||||
if (aclType == null) {
|
||||
throw new Exception("ACLType parameter is invalid");
|
||||
}
|
||||
|
||||
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());
|
||||
logger.trace("Scope provider set: " + info.getCurrentScope());
|
||||
if (folderItem.isShared()) {
|
||||
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());
|
||||
WorkspaceItem wsItem = workspace.getItem(folderId);
|
||||
String currentUser = getMyLogin();
|
||||
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
|
||||
throw new Exception("Source item is not shared or shared folder");
|
||||
} else {
|
||||
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) {
|
||||
logger.error("Error in set ACLs", e);
|
||||
String error = "Error updating the permissions. " + e.getMessage();
|
||||
|
|
Loading…
Reference in New Issue