From a869b7aa1471941f83cee6be428dec263f41432b Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Tue, 30 Apr 2019 13:06:06 +0000 Subject: [PATCH] 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 --- .../server/WorkspaceSharingServiceImpl.java | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java index ffd52e2..df826fb 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java @@ -447,37 +447,43 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements if (folderItem instanceof SharedFolder) { logger.debug("Folder type: SharedFolder"); SharedFolder sharedFolder = (SharedFolder) folderItem; - Set logins = new HashSet<>(listLogin); String currentUser = getMyLogin(); - logger.debug("Current User: " + currentUser); - if (logins.contains(currentUser)) { - logins.remove(currentUser); - } + + Set alreadySharedUsers = null; Metadata usersMetadata = sharedFolder.getUsers(); if (usersMetadata != null) { Map usersMap = usersMetadata.getMap(); if (usersMap != null) { - Set 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 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 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 {