96 lines
6.3 KiB
Java
96 lines
6.3 KiB
Java
package eu.eudat.logic.managers;
|
|
|
|
import eu.eudat.data.entities.DMP;
|
|
import eu.eudat.data.entities.UserDMP;
|
|
import eu.eudat.data.entities.UserInfo;
|
|
import eu.eudat.exceptions.security.UnauthorisedException;
|
|
import eu.eudat.logic.services.ApiContext;
|
|
import eu.eudat.logic.utilities.helpers.StreamDistinctBy;
|
|
import eu.eudat.models.data.invitation.Invitation;
|
|
import eu.eudat.models.data.security.Principal;
|
|
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 java.util.stream.Collectors;
|
|
import java.util.stream.Stream;
|
|
|
|
@Component
|
|
public class InvitationsManager {
|
|
|
|
private ApiContext apiContext;
|
|
|
|
@Autowired
|
|
public InvitationsManager(ApiContext apiContext) {
|
|
this.apiContext = apiContext;
|
|
}
|
|
|
|
public void inviteUsers(Invitation invitation, Principal principal) throws Exception {
|
|
UserInfo principalUser = new UserInfo();
|
|
principalUser.setId(principal.getId());
|
|
List<UserInfoInvitationModel> alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList());
|
|
List<UserInfo> alreadySignedInUsersEntities = alreadySignedInUsers.stream().map(UserInfoInvitationModel::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);
|
|
apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().createOrUpdate(userAssociation);
|
|
}*/
|
|
}
|
|
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().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userInfoToUserDmp, dataManagementPlan);
|
|
}
|
|
|
|
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<UserInfo> users = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao()
|
|
.getAuthenticated(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable()
|
|
.where(((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue()))), principal.getId(), Stream.of(0, 1).collect(Collectors.toList()))
|
|
.toList().stream().map(DMP::getUsers).flatMap(Collection::stream).map(UserDMP::getUser)
|
|
.filter(userInfo -> !userInfo.getId().equals(principal.getId())).filter(StreamDistinctBy.distinctByKey(UserInfo::getId)).collect(Collectors.toList());
|
|
List<UserInfoInvitationModel> userModels = users.stream().map(userInfo -> new UserInfoInvitationModel().fromDataModel(userInfo)).collect(Collectors.toList());
|
|
return userModels;
|
|
}
|
|
|
|
public UUID assignUserAcceptedInvitation(UUID invitationID, Principal principal) throws UnauthorisedException {
|
|
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");
|
|
if (invitation.getAcceptedInvitation()) throw new UnauthorisedException("This Url Has Expired");
|
|
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);
|
|
}*/
|
|
DMP datamanagementPlan = invitation.getDmp();
|
|
apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(userDMP);
|
|
apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userDMP, datamanagementPlan);
|
|
invitation.setAcceptedInvitation(true);
|
|
apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().createOrUpdate(invitation);
|
|
return datamanagementPlan.getId();
|
|
}
|
|
}
|