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()) {