ref 19952: Workspace - server error in update VRE Administrators

Updated the set administrator method for VRE folders
This commit is contained in:
Giancarlo Panichi 2020-10-13 14:33:52 +02:00
parent 4e3b4238ab
commit b8022f614a
6 changed files with 299 additions and 72 deletions

142
CHANGELOG.md Normal file
View File

@ -0,0 +1,142 @@
# Changelog
## [v1.11.0-SNAPSHOT] - 2020-10-13
### Features
- Updated the set administrator method for VRE folders [#19952]
## [v1.10.1] - 2019-12-19
### Features
- Updated to Git and Jenkins
## [v1.10.0] - 2019-07-30
### Features
- Added support for users in different Gateway [#17080]
- Updated the list of shared classes with the tree widget
## [v1.9.0] - 2019-06-05
### Features
- Updated to StorageHub [#13226]
## [v1.8.2] - 2017-02-24
### Features
- Stylesheet fix [#3236]
## [v1.8.1] - 2016-11-25
### Features
- Removed ASL Session dependency
## [v1.7.0] - 2016-05-31
### Features
- Migration to Liferay 6.2 [#4128]
## [v1.6.0] - 2016-04-14
### Features
- Enhancement in order to display short VREs name [#3277]
## [v1.5.1] - 2016-01-04
### Features
- Removed portal-framework dependecy from Etics
## [v1.5.0] - 2015-09-28
### Features
- Added code to retrieve (only) the users belonging to the organization read from (asl) session group [#401]
## [v1.4.0] - 2015-06-04
### Features
- Porting to HL 2.0 [#211]
## [v1.3.0] - 2015-04-15
### Features
- Added Edit Permission for Contacts
## [v1.2.0] - 2014-24-01
### Features
- Added method get administrator by folder id
- Added class SimpleMultiDragWorkspaceContact to realize "Edit Administrators"
## [v1.1.0] - 2014-06-27
### Features
- Integrated sharing to groups [#2897]
- Sharing Panel usability improved [#2798]
## [v1.0.2] - 2014-06-04
### Features
- Updated pom to support new portal configuration
## [v1.0.1] - 2014-04-03
### Features
- Commented the methods of Notification Producer
## [v1.0.0] - 2014-04-03
### Features
- First release
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

26
FUNDING.md Normal file
View File

@ -0,0 +1,26 @@
# Acknowledgments
The projects leading to this software have received funding from a series of European Union programmes including:
- the Sixth Framework Programme for Research and Technological Development
- [DILIGENT](https://cordis.europa.eu/project/id/004260) (grant no. 004260).
- the Seventh Framework Programme for research, technological development and demonstration
- [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488);
- [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019);
- [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465);
- [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644);
- [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754).
- the H2020 research and innovation programme
- [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024);
- [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119);
- [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142);
- [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182);
- [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680);
- [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610);
- [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001);
- [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194);
- [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914);
- [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091);
- [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650);
- [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409);
- [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042);

View File

@ -23,6 +23,7 @@ See [Releases](https://code-repo.d4science.org/gCubeSystem/workspace-sharing-wid
* **Francesco Managiacrapa** ([ORCID](https://orcid.org/0000-0002-6528-664X)) - [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience)
## License
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
@ -34,12 +35,4 @@ open-source software toolkit used for building and operating Hybrid Data
Infrastructures enabling the dynamic deployment of Virtual Research Environments
by favouring the realisation of reuse oriented policies.
The projects leading to this software have received funding from a series of European Union programmes including:
- the Sixth Framework Programme for Research and Technological Development
- DILIGENT (grant no. 004260);
- the Seventh Framework Programme for research, technological development and demonstration
- D4Science (grant no. 212488), D4Science-II (grant no.239019), ENVRI (grant no. 283465), EUBrazilOpenBio (grant no. 288754), iMarine(grant no. 283644);
- the H2020 research and innovation programme
- BlueBRIDGE (grant no. 675680), EGIEngage (grant no. 654142), ENVRIplus (grant no. 654182), Parthenos (grant no. 654119), SoBigData (grant no. 654024),DESIRA (grant no. 818194), ARIADNEplus (grant no. 823914), RISIS2 (grant no. 824091), PerformFish (grant no. 727610), AGINFRAplus (grant no. 731001);
The projects leading to this software have received funding from a series of European Union programmes see [FUNDING.md](FUNDING.md)

View File

@ -1,4 +1,8 @@
<ReleaseNotes>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-11-0"
date="2020-10-13">
<change>Updated the set administrator method for VRE folders [ticket: #19952]</change>
</Changeset>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-10-1"
date="2019-12-19">
<change>Updated to Git and Jenkins</change>

View File

@ -14,7 +14,7 @@
<groupId>org.gcube.portlets.widgets</groupId>
<artifactId>workspace-sharing-widget</artifactId>
<packaging>jar</packaging>
<version>1.10.1-SNAPSHOT</version>
<version>1.11.0-SNAPSHOT</version>
<name>gCube Workspace Sharing Widget</name>
<description>
Workspace Sharing Widget is a widget that allows the sharing of items present in the D4Science Workspace.

View File

@ -18,6 +18,7 @@ import org.gcube.common.storagehub.client.dsl.FolderContainer;
import org.gcube.common.storagehub.client.dsl.ItemContainer;
import org.gcube.common.storagehub.client.dsl.OpenResolver;
import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.common.storagehub.client.dsl.VREFolderManager;
import org.gcube.common.storagehub.model.Metadata;
import org.gcube.common.storagehub.model.acls.ACL;
import org.gcube.common.storagehub.model.acls.AccessType;
@ -821,6 +822,85 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
String currentUser = getMyLogin();
logger.debug("Current User: " + currentUser);
SharedFolder sharedFolder = ((SharedFolder) folderItem);
if (sharedFolder.isVreFolder()) {
VREFolderManager vreFolderManager = shc.getVreFolderManager(folderItem.getTitle());
addAministratorsToVREFolder(listContactLogins, vreFolderManager, folderContainer, currentUser);
} else {
addAministratorsToShareFolder(listContactLogins, folderContainer, currentUser);
}
logger.debug("Administrators Updated");
return true;
} else {
String error = "Attention, the set administrators operation can only be done on the root shared folder. "
+ "Please, select the root shared folder if you want to set the administrators.";
logger.error(error);
throw new Exception(error);
}
} else {
logger.error("The item requested is not a valid shared folder : [itemId=" + itemId + "]");
throw new Exception(
"The item requested is not a valid shared folder. Impossible set the administrators.");
}
} catch (Exception e) {
logger.error("Error in addAdministratorsByFolderId(): " + e.getLocalizedMessage(), e);
throw e;
}
}
private void addAministratorsToVREFolder(List<String> listContactLogins, VREFolderManager vreFolderManager,
FolderContainer folderContainer, String currentUser) throws Exception, StorageHubException {
// Already Aministrators
List<String> alreadyAdministrators = vreFolderManager.getAdmins();
logger.debug("VREfolder add new Administrators");
HashSet<String> novelAdministrators = new HashSet<>();
boolean senior;
for (String user : listContactLogins) {
if (currentUser.compareTo(user) != 0) {
senior = false;
for (String seniorAdmin : alreadyAdministrators) {
if (user.compareTo(seniorAdmin) == 0) {
senior = true;
break;
}
}
if (!senior) {
novelAdministrators.add(user);
}
}
}
if(!novelAdministrators.isEmpty()){
for(String novel:novelAdministrators){
vreFolderManager.addUser(novel);
}
}
logger.debug("VREfolder removes administrators that are no longer valid");
HashSet<String> toRemoveAdministrators = new HashSet<>();
alreadyAdministrators.removeAll(listContactLogins);
toRemoveAdministrators.addAll(alreadyAdministrators);
if(!toRemoveAdministrators.isEmpty()){
for(String toRemoveAdmin:toRemoveAdministrators){
if(currentUser.compareTo(toRemoveAdmin)!=0){
vreFolderManager.removeAdmin(toRemoveAdmin);
}
}
}
}
private void addAministratorsToShareFolder(List<String> listContactLogins, FolderContainer folderContainer,
String currentUser) throws Exception, StorageHubException {
Set<String> alreadyAdministrators = new HashSet<>();
List<ACL> acls = folderContainer.getAcls();
@ -870,8 +950,6 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
}
}
logger.debug("Update Administrators done");
if (!alreadyAdministrators.isEmpty()) {
alreadyAdministrators.removeAll(listContactLogins);
@ -883,28 +961,6 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
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. "
+ "Please, select the root shared folder if you want to set the administrators.";
logger.error(error);
throw new Exception(error);
}
} else {
logger.error("The item requested is not a valid shared folder : [itemId=" + itemId + "]");
throw new Exception(
"The item requested is not a valid shared folder. Impossible set the administrators.");
}
} catch (Exception e) {
logger.error("Error in addAdministratorsByFolderId(): " + e.getLocalizedMessage(), e);
throw e;
}
}
private List<InfoContactModel> retrieveAdminContactsFromACLs(FolderContainer folderContainer) throws Exception {
@ -1260,7 +1316,13 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements
List<WorkspaceACL> acls = retrieveUserACLsFromFolderContainer(rootSharedFolderContainer);
List<ExtendedWorkspaceACL> listEACL = new ArrayList<ExtendedWorkspaceACL>(acls.size());
for (WorkspaceACL workspaceACL : acls) {
boolean isBaseSharedFolder = false; //is false because the root shared folder is always instance of SharedFolder
boolean isBaseSharedFolder = false; // is false
// because the
// root shared
// folder is
// always
// instance of
// SharedFolder
ExtendedWorkspaceACL eac = new ExtendedWorkspaceACL(workspaceACL.getId(),
workspaceACL.getAclType(), workspaceACL.getLabel(), workspaceACL.getDefaultValue(),
workspaceACL.getUserType(), workspaceACL.getDescription(), folderItem.getOwner(),