From fd26e2a74289affd8cbaa0f7db8a07f72fefef28 Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Wed, 27 Oct 2021 18:16:44 +0300 Subject: [PATCH] Fix issue with DMP index not updating after a new user is invited --- .../eudat/controllers/UserInvitationController.java | 3 ++- .../logic/managers/DataManagementPlanManager.java | 2 +- .../eu/eudat/logic/managers/InvitationsManager.java | 11 +++++++++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java index ecb46650e..c751742f2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java @@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.xml.bind.JAXBException; +import java.io.IOException; import java.util.List; import java.util.UUID; @@ -42,7 +43,7 @@ public class UserInvitationController extends BaseController { @Transactional @RequestMapping(method = RequestMethod.GET, value = {"/exchange/{invitationID}"}, produces = "application/json") public @ResponseBody - ResponseEntity> exchange(@PathVariable UUID invitationID, Principal principal) throws JAXBException { + ResponseEntity> exchange(@PathVariable UUID invitationID, Principal principal) throws JAXBException, IOException { UUID dmpId = invitationsManager.assignUserAcceptedInvitation(invitationID, principal); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).payload(dmpId)); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index 4061e0e2c..10113c819 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -1843,7 +1843,7 @@ public class DataManagementPlanManager { }); } - private void updateIndex(DMP dmp) throws IOException { + public void updateIndex(DMP dmp) throws IOException { DmpMapper mapper = new DmpMapper(apiContext, datasetManager); Dmp elastic = mapper.toElastic(dmp); apiContext.getOperationsContext().getElasticRepository().getDmpRepository().createOrUpdate(elastic); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java index 25a660855..9c9e30537 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java @@ -17,6 +17,7 @@ import org.springframework.stereotype.Component; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; +import java.io.IOException; import java.io.StringReader; import java.util.*; import java.util.stream.Collectors; @@ -26,10 +27,12 @@ import java.util.stream.Stream; public class InvitationsManager { private ApiContext apiContext; + private DataManagementPlanManager dataManagementPlanManager; @Autowired - public InvitationsManager(ApiContext apiContext) { + public InvitationsManager(ApiContext apiContext, DataManagementPlanManager dataManagementPlanManager) { this.apiContext = apiContext; + this.dataManagementPlanManager = dataManagementPlanManager; } public void inviteUsers(Invitation invitation, Principal principal) throws Exception { @@ -79,7 +82,7 @@ public class InvitationsManager { return userModels; } - public UUID assignUserAcceptedInvitation(UUID invitationID, Principal principal) throws UnauthorisedException, JAXBException { + public UUID assignUserAcceptedInvitation(UUID invitationID, Principal principal) throws UnauthorisedException, JAXBException, IOException { eu.eudat.data.entities.Invitation invitation = apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().find(invitationID); if (invitation == null) throw new UnauthorisedException("There is no Data Management Plan assigned to this Link"); @@ -98,6 +101,8 @@ public class InvitationsManager { apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), existingUserDMP, datamanagementPlan); invitation.setAcceptedInvitation(true); apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().createOrUpdate(invitation); + datamanagementPlan.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), datamanagementPlan.getId())).toList())); + dataManagementPlanManager.updateIndex(datamanagementPlan); return datamanagementPlan.getId(); } } else { @@ -121,6 +126,8 @@ public class InvitationsManager { apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userDMP, datamanagementPlan); invitation.setAcceptedInvitation(true); apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().createOrUpdate(invitation); + datamanagementPlan.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), datamanagementPlan.getId())).toList())); + dataManagementPlanManager.updateIndex(datamanagementPlan); return datamanagementPlan.getId(); } return invitation.getDmp().getId();