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.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;
|
2019-03-05 16:33:59 +01:00
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Component;
|
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;
|
|
|
|
|
2019-03-05 16:33:59 +01:00
|
|
|
@Component
|
2018-01-05 08:47:52 +01:00
|
|
|
public class InvitationsManager {
|
|
|
|
|
2019-03-05 16:33:59 +01:00
|
|
|
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());
|
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(), alreadySignedInUsersEntities, dataManagementPlan);
|
2018-01-05 08:47:52 +01:00
|
|
|
}
|
|
|
|
|
2019-03-05 16:33:59 +01:00
|
|
|
public List<UserInfoInvitationModel> getUsers(UserInfoRequestItem userInfoRequestItem) throws InstantiationException, IllegalAccessException {
|
2018-03-05 17:18:45 +01:00
|
|
|
QueryableList<UserInfo> users = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoRequestItem.getCriteria());
|
2018-02-21 11:07:31 +01:00
|
|
|
List<UserInfoInvitationModel> userModels = users.select(item -> new UserInfoInvitationModel().fromDataModel(item));
|
2018-01-05 08:47:52 +01:00
|
|
|
return userModels;
|
|
|
|
}
|
2018-01-08 12:44:48 +01:00
|
|
|
|
2019-03-05 16:33:59 +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());
|
2018-01-08 12:44:48 +01:00
|
|
|
DMP datamanagementPlan = invitation.getDmp();
|
2018-03-05 17:18:45 +01:00
|
|
|
apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), invitedUser, 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
|
|
|
}
|