From a7c98130e4d6a4d11140e65f9901bf80b999e1b2 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Thu, 12 Sep 2019 09:31:51 +0000 Subject: [PATCH] ref 17169: Selection of users in the Sharing panel https://support.d4science.org/issues/17169 Updated the administrator support git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@181653 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../server/WorkspaceSharingServiceImpl.java | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 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 e8d1fb3..0901d3e 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 @@ -833,15 +833,46 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements } } } - - logger.debug("Update ACL for add Administrators"); + + logger.debug("Share with new Administrators"); + HashSet shareUsers = new HashSet<>(); + boolean alreadyShared; for (String user : listContactLogins) { if (currentUser.compareTo(user) != 0) { - folderContainer = folderContainer.changeAcls(user, AccessType.ADMINISTRATOR); + alreadyShared = false; + for (ACL acl : acls) { + if (user.compareTo(acl.getPricipal()) == 0) { + alreadyShared = true; + break; + } + } + if (!alreadyShared) { + shareUsers.add(user); + } + } + } + + logger.debug("Update ACL for add Administrators"); + if (shareUsers.isEmpty()) { + for (String user : listContactLogins) { + if (currentUser.compareTo(user) != 0) { + folderContainer = folderContainer.changeAcls(user, AccessType.ADMINISTRATOR); + } + } + } else { + folderContainer = folderContainer.share(shareUsers, AccessType.ADMINISTRATOR); + HashSet aclUpdateUsers = new HashSet<>(listContactLogins); + aclUpdateUsers.removeAll(shareUsers); + for (String user : aclUpdateUsers) { + if (currentUser.compareTo(user) != 0) { + folderContainer = folderContainer.changeAcls(user, AccessType.ADMINISTRATOR); + } } } - logger.debug("Update Administrators done"); + + + logger.debug("Update Administrators done"); if (!alreadyAdministrators.isEmpty()) { alreadyAdministrators.removeAll(listContactLogins); if (!alreadyAdministrators.isEmpty()) {