From 451ed453f9078b4e770c8c7176263098266e950d Mon Sep 17 00:00:00 2001 From: George Kalampokis Date: Fri, 10 Jul 2020 10:11:41 +0300 Subject: [PATCH] Add role to the invitation model --- .../controllers/UserInvitationController.java | 3 ++- .../logic/managers/InvitationsManager.java | 23 +++++++++++++------ .../services/utilities/InvitationService.java | 4 ++-- .../utilities/InvitationServiceImpl.java | 13 +++++++---- .../models/data/invitation/Invitation.java | 9 ++++++++ .../main/resources/templates/email/email.html | 2 +- .../model/dmp/invitation/dmp-invitation.ts | 4 +++- 7 files changed, 41 insertions(+), 17 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 b6d045a67..ecb46650e 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 @@ -14,6 +14,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; +import javax.xml.bind.JAXBException; import java.util.List; import java.util.UUID; @@ -41,7 +42,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) { + ResponseEntity> exchange(@PathVariable UUID invitationID, Principal principal) throws JAXBException { 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/InvitationsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java index b01ca6c94..d5fb2a705 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 @@ -12,10 +12,11 @@ import eu.eudat.models.data.userinfo.UserInfoInvitationModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.Collection; -import java.util.LinkedList; -import java.util.List; -import java.util.UUID; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import java.io.StringReader; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -38,6 +39,7 @@ public class InvitationsManager { for (UserInfo userInfo : alreadySignedInUsersEntities) { UserDMP userDMP = new UserDMP(); userDMP.setUser(userInfo); + userDMP.setRole(invitation.getRole()); userInfoToUserDmp.add(userDMP); /*if (!apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().areAssociated(principalUser, userInfo)) { UserAssociation userAssociation = new UserAssociation(); @@ -47,7 +49,7 @@ public class InvitationsManager { }*/ } DMP dataManagementPlan = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(invitation.getDataManagementPlan()); - apiContext.getUtilitiesService().getInvitationService().createInvitations(apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao(), apiContext.getUtilitiesService().getMailService(), invitation.getUsers().stream().map(UserInfoInvitationModel::toDataModel).collect(Collectors.toList()), dataManagementPlan, principalUser); + apiContext.getUtilitiesService().getInvitationService().createInvitations(apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao(), apiContext.getUtilitiesService().getMailService(), invitation.getUsers().stream().map(UserInfoInvitationModel::toDataModel).collect(Collectors.toList()), dataManagementPlan, invitation.getRole(), principalUser); apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userInfoToUserDmp, dataManagementPlan); } @@ -69,7 +71,7 @@ public class InvitationsManager { return userModels; } - public UUID assignUserAcceptedInvitation(UUID invitationID, Principal principal) throws UnauthorisedException { + public UUID assignUserAcceptedInvitation(UUID invitationID, Principal principal) throws UnauthorisedException, JAXBException { 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"); @@ -78,7 +80,14 @@ public class InvitationsManager { UserDMP userDMP = new UserDMP(); userDMP.setUser(invitedUser); userDMP.setDmp(invitation.getDmp()); - userDMP.setRole(UserDMP.UserDMPRoles.USER.getValue()); + JAXBContext context = JAXBContext.newInstance(HashMap.class); + Unmarshaller unmarshaller = context.createUnmarshaller(); + Map properties = (Map) unmarshaller.unmarshal(new StringReader(invitation.getProperties())); + if (properties.get("role") != null) { + userDMP.setRole((Integer) properties.get("role")); + } else { + userDMP.setRole(UserDMP.UserDMPRoles.USER.getValue()); + } /*if (!apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().areAssociated(invitedUser, invitation.getUser())) { UserAssociation userAssociation = new UserAssociation(); userAssociation.setFirstUser(invitedUser); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java index a580afc0f..ee4ac3137 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java @@ -16,7 +16,7 @@ public interface InvitationService { void assignToDmp(DMPDao dmpDao, eu.eudat.data.entities.UserDMP user, DMP dmp); - void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DMP dmp, eu.eudat.data.entities.UserInfo creator) throws MessagingException; + void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DMP dmp, Integer role, eu.eudat.data.entities.UserInfo creator) throws MessagingException; - CompletableFuture sendInvitationAsync(DMP dmp, Invitation invitation, String recipient, MailService mailService) throws MessagingException; + CompletableFuture sendInvitationAsync(DMP dmp, Invitation invitation, String recipient, MailService mailService, Integer role) throws MessagingException; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java index 49027b588..97217b2a2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java @@ -5,6 +5,7 @@ import eu.eudat.data.dao.entities.DMPDao; import eu.eudat.data.dao.entities.InvitationDao; import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.Invitation; +import eu.eudat.data.entities.UserDMP; import eu.eudat.models.data.mail.SimpleMail; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,7 +47,7 @@ public class InvitationServiceImpl implements InvitationService { } @Override - public void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DMP dmp, eu.eudat.data.entities.UserInfo creator) throws MessagingException { + public void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DMP dmp, Integer role, eu.eudat.data.entities.UserInfo creator) throws MessagingException { for (eu.eudat.data.entities.UserInfo userInfo : users) { Invitation invitation = new Invitation(); invitation.setDmp(dmp); @@ -54,16 +55,17 @@ public class InvitationServiceImpl implements InvitationService { invitation.setUser(creator); invitation.setToken(UUID.randomUUID()); invitation.setAcceptedInvitation(false); + invitation.setProperties("" + role + ""); invitationDao.createOrUpdate(invitation); - sendInvitationAsync(dmp, invitation, userInfo.getName(), mailService); + sendInvitationAsync(dmp, invitation, userInfo.getName(), mailService, role); } } @Override - public CompletableFuture sendInvitationAsync(DMP dmp, Invitation invitation, String recipient, MailService mailService) { + public CompletableFuture sendInvitationAsync(DMP dmp, Invitation invitation, String recipient, MailService mailService, Integer role) { return CompletableFuture.runAsync(() -> { SimpleMail mail = new SimpleMail(); - mail.setSubject(createSubject(dmp, mailService.getMailTemplateSubject())); + mail.setSubject(createSubject(dmp, mailService.getMailTemplateSubject(), role)); mail.setContent(createContent(invitation.getId(), dmp, recipient, mailService.getMailTemplateContent("classpath:templates/email/email.html"))); mail.setTo(invitation.getInvitationEmail()); try { @@ -74,8 +76,9 @@ public class InvitationServiceImpl implements InvitationService { }); } - private String createSubject(DMP dmp, String templateSubject) { + private String createSubject(DMP dmp, String templateSubject, Integer role) { String subject = templateSubject.replace("{dmpname}", dmp.getLabel()); + subject = subject.replace("{dmprole}", UserDMP.UserDMPRoles.fromInteger(role).name()); return subject; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/invitation/Invitation.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/invitation/Invitation.java index a5737826e..1e3746cee 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/invitation/Invitation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/invitation/Invitation.java @@ -9,6 +9,7 @@ import java.util.UUID; public class Invitation { private UUID dataManagementPlan; private List users; + private Integer role; public UUID getDataManagementPlan() { return dataManagementPlan; @@ -25,4 +26,12 @@ public class Invitation { public void setUsers(List users) { this.users = users; } + + public Integer getRole() { + return role; + } + + public void setRole(Integer role) { + this.role = role; + } } diff --git a/dmp-backend/web/src/main/resources/templates/email/email.html b/dmp-backend/web/src/main/resources/templates/email/email.html index 7d3fdd929..e85ecdd4c 100644 --- a/dmp-backend/web/src/main/resources/templates/email/email.html +++ b/dmp-backend/web/src/main/resources/templates/email/email.html @@ -261,7 +261,7 @@

Dear {recipient},

-

You have been invited to collaborate to Data Management plan {dmpname}.

+

You have been invited to collaborate to Data Management plan {dmpname} with role {dmprole}.

Click the button to redirect to {dmpname}.

diff --git a/dmp-frontend/src/app/core/model/dmp/invitation/dmp-invitation.ts b/dmp-frontend/src/app/core/model/dmp/invitation/dmp-invitation.ts index 51ff6afe8..3e0854a30 100644 --- a/dmp-frontend/src/app/core/model/dmp/invitation/dmp-invitation.ts +++ b/dmp-frontend/src/app/core/model/dmp/invitation/dmp-invitation.ts @@ -5,11 +5,13 @@ export class DmpInvitation { public dataManagementPlan: string; public users = new Array(); + public role: number; buildForm(): FormGroup { const formGroup = new FormBuilder().group({ dataManagementPlan: [this.dataManagementPlan], - users: [this.users] + users: [this.users], + role: [this.role] }); return formGroup;