ref 13226:StorageHub - Update workspace-sharing-widget to SH

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

Fixed share folder with multiple users

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@179201 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2019-04-30 13:06:06 +00:00
parent 9904999212
commit a869b7aa14
1 changed files with 22 additions and 16 deletions

View File

@ -447,37 +447,43 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
if (folderItem instanceof SharedFolder) {
logger.debug("Folder type: SharedFolder");
SharedFolder sharedFolder = (SharedFolder) folderItem;
Set<String> logins = new HashSet<>(listLogin);
String currentUser = getMyLogin();
logger.debug("Current User: " + currentUser);
if (logins.contains(currentUser)) {
logins.remove(currentUser);
}
Set<String> alreadySharedUsers = null;
Metadata usersMetadata = sharedFolder.getUsers();
if (usersMetadata != null) {
Map<String, Object> usersMap = usersMetadata.getMap();
if (usersMap != null) {
Set<String> alreadySharedUsers = usersMap.keySet();
alreadySharedUsers = usersMap.keySet();
logger.debug("Already shared logins: " + alreadySharedUsers);
if (alreadySharedUsers.contains(currentUser)) {
alreadySharedUsers.remove(currentUser);
}
logger.debug("Unshare the logins: " + alreadySharedUsers);
if (!alreadySharedUsers.isEmpty()) {
folderContainer.unshare(alreadySharedUsers);
logger.debug("Unshare done");
}
}
}
Set<String> logins = new HashSet<>(listLogin);
if (logins.contains(currentUser)) {
logins.remove(currentUser);
}
logger.debug("Share logins: " + logins);
folderContainer.share(logins, getAccessType(acl));
folderContainer = folderContainer.share(logins, getAccessType(acl));
logger.debug("Shared done");
if (alreadySharedUsers != null && !alreadySharedUsers.isEmpty()) {
alreadySharedUsers.removeAll(logins);
if (!alreadySharedUsers.isEmpty()) {
logger.debug("Unshare the logins: " + alreadySharedUsers);
folderContainer = folderContainer.unshare(alreadySharedUsers);
logger.debug("Unshare done");
}
}
created = true;
NotificationsProducer np = getNotificationProducer(this.getThreadLocalRequest());
np.notifyFolderSharing(listContacts, folderItem);
np.notifyFolderSharing(listContacts, folderContainer.get());
} else {
logger.debug("The folder is already shared");
throw new Exception("The folder selected is already shared!");
@ -486,11 +492,11 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
logger.debug("Folder is not shared");
Set<String> logins = new HashSet<>(listLogin);
logger.debug("Share logins: " + logins);
folderContainer.share(logins, getAccessType(acl));
folderContainer=folderContainer.share(logins, getAccessType(acl));
logger.debug("Shared done");
created = true;
NotificationsProducer np = getNotificationProducer(this.getThreadLocalRequest());
np.notifyFolderSharing(listContacts, folderItem);
np.notifyFolderSharing(listContacts, folderContainer.get());
}
} else {