argos/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java

91 lines
5.5 KiB
Java
Raw Normal View History

2018-06-27 12:29:21 +02:00
package eu.eudat.logic.managers;
2018-01-05 08:47:52 +01:00
2018-03-21 11:57:56 +01:00
import eu.eudat.data.entities.DMP;
import eu.eudat.data.entities.UserAssociation;
import eu.eudat.data.entities.UserDMP;
2018-03-21 11:57:56 +01:00
import eu.eudat.data.entities.UserInfo;
2018-02-07 10:56:30 +01:00
import eu.eudat.exceptions.security.UnauthorisedException;
2018-06-27 12:29:21 +02:00
import eu.eudat.models.data.invitation.Invitation;
import eu.eudat.models.data.security.Principal;
import eu.eudat.models.data.userinfo.UserInfoInvitationModel;
2018-03-21 13:11:02 +01:00
import eu.eudat.data.query.items.item.userinfo.UserInfoRequestItem;
2018-01-05 08:47:52 +01:00
import eu.eudat.queryable.QueryableList;
2018-06-27 12:29:21 +02:00
import eu.eudat.logic.services.ApiContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
2018-01-05 08:47:52 +01:00
import java.util.LinkedList;
2018-01-05 08:47:52 +01:00
import java.util.List;
2018-01-08 12:44:48 +01:00
import java.util.UUID;
2018-01-05 08:47:52 +01:00
import java.util.stream.Collectors;
@Component
2018-01-05 08:47:52 +01:00
public class InvitationsManager {
private ApiContext apiContext;
@Autowired
public InvitationsManager(ApiContext apiContext) {
this.apiContext = apiContext;
}
public void inviteUsers(Invitation invitation, Principal principal) throws Exception {
2018-01-05 16:40:19 +01:00
UserInfo principalUser = new UserInfo();
principalUser.setId(principal.getId());
2018-01-05 08:47:52 +01:00
List<UserInfoInvitationModel> alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList());
2018-02-16 08:45:18 +01:00
List<UserInfo> alreadySignedInUsersEntities = alreadySignedInUsers.stream().map(item -> item.toDataModel()).collect(Collectors.toList());
List<UserDMP> userInfoToUserDmp = new LinkedList<>();
for (UserInfo userInfo : alreadySignedInUsersEntities) {
UserDMP userDMP = new UserDMP();
userDMP.setUser(userInfo);
userInfoToUserDmp.add(userDMP);
if (!apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().areAssociated(principalUser, userInfo)) {
UserAssociation userAssociation = new UserAssociation();
userAssociation.setFirstUser(principalUser);
userAssociation.setSecondUser(userInfo);
2020-05-04 15:00:23 +02:00
apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().createOrUpdate(userAssociation);
}
}
2018-03-05 17:18:45 +01:00
DMP dataManagementPlan = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(invitation.getDataManagementPlan());
apiContext.getUtilitiesService().getInvitationService().createInvitations(apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao(), apiContext.getUtilitiesService().getMailService(), invitation.getUsers().stream().map(item -> item.toDataModel()).collect(Collectors.toList()), dataManagementPlan, principalUser);
apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userInfoToUserDmp, dataManagementPlan);
2018-01-05 08:47:52 +01:00
}
public List<UserInfoInvitationModel> getUsers(Principal principal) throws InstantiationException, IllegalAccessException {
UserInfo principalUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());
List<UserInfo> users = apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().getAssociated(principalUser).stream().map(userAssociation -> {
if (userAssociation.getFirstUser().getId().equals(principal.getId())) {
return userAssociation.getSecondUser();
} else {
return userAssociation.getFirstUser();
}
}).collect(Collectors.toList());
List<UserInfoInvitationModel> userModels = users.stream().map(userInfo -> new UserInfoInvitationModel().fromDataModel(userInfo)).collect(Collectors.toList());
2018-01-05 08:47:52 +01:00
return userModels;
}
2018-01-08 12:44:48 +01:00
public UUID assignUserAcceptedInvitation(UUID invitationID, Principal principal) throws UnauthorisedException {
2018-03-21 11:57:56 +01:00
eu.eudat.data.entities.Invitation invitation = apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().find(invitationID);
2018-02-16 08:45:18 +01:00
if (invitation == null)
throw new UnauthorisedException("There is no Data Management Plan assigned to this Link");
2018-01-08 15:57:21 +01:00
if (invitation.getAcceptedInvitation()) throw new UnauthorisedException("This Url Has Expired");
2018-03-05 17:18:45 +01:00
UserInfo invitedUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId());
UserDMP userDMP = new UserDMP();
userDMP.setUser(invitedUser);
userDMP.setDmp(invitation.getDmp());
userDMP.setRole(UserDMP.UserDMPRoles.USER.getValue());
if (!apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().areAssociated(invitedUser, invitation.getUser())) {
UserAssociation userAssociation = new UserAssociation();
userAssociation.setFirstUser(invitedUser);
userAssociation.setSecondUser(invitation.getUser());
apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().createOrUpdate(userAssociation);
}
2018-01-08 12:44:48 +01:00
DMP datamanagementPlan = invitation.getDmp();
apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(userDMP);
apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userDMP, datamanagementPlan);
2018-01-08 12:44:48 +01:00
invitation.setAcceptedInvitation(true);
2018-03-05 17:18:45 +01:00
apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().createOrUpdate(invitation);
2018-01-08 12:44:48 +01:00
return datamanagementPlan.getId();
}
2018-01-05 08:47:52 +01:00
}