131 lines
6.2 KiB
Java
131 lines
6.2 KiB
Java
package eu.eudat.logic.services.utilities;
|
|
|
|
|
|
import eu.eudat.commons.JsonHandlingService;
|
|
import eu.eudat.commons.enums.ContactInfoType;
|
|
import eu.eudat.commons.enums.DmpUserRole;
|
|
import eu.eudat.commons.enums.notification.NotificationContactType;
|
|
import eu.eudat.commons.scope.user.UserScope;
|
|
import eu.eudat.commons.types.notification.*;
|
|
import eu.eudat.configurations.notification.NotificationProperties;
|
|
import eu.eudat.data.DmpEntity;
|
|
import eu.eudat.data.DmpUserEntity;
|
|
import eu.eudat.data.dao.entities.DMPDao;
|
|
import eu.eudat.data.dao.entities.InvitationDao;
|
|
import eu.eudat.data.old.Invitation;
|
|
import eu.eudat.data.UserEntity;
|
|
import eu.eudat.integrationevent.outbox.notification.NotificationIntegrationEvent;
|
|
import eu.eudat.integrationevent.outbox.notification.NotificationIntegrationEventHandler;
|
|
import eu.eudat.model.UserContactInfo;
|
|
import eu.eudat.models.data.invitation.Properties;
|
|
import eu.eudat.query.UserContactInfoQuery;
|
|
import gr.cite.tools.data.query.Ordering;
|
|
import gr.cite.tools.data.query.QueryFactory;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.core.env.Environment;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import jakarta.mail.MessagingException;
|
|
import jakarta.xml.bind.JAXBContext;
|
|
import jakarta.xml.bind.Marshaller;
|
|
|
|
import javax.management.InvalidApplicationException;
|
|
import java.io.StringWriter;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
|
|
|
|
@Service("invitationService")
|
|
public class InvitationServiceImpl implements InvitationService {
|
|
private static final Logger logger = LoggerFactory.getLogger(InvitationServiceImpl.class);
|
|
private Environment environment;
|
|
private final UserScope userScope;
|
|
private final NotificationIntegrationEventHandler eventHandler;
|
|
private final JsonHandlingService jsonHandlingService;
|
|
private final NotificationProperties notificationProperties;
|
|
|
|
@Autowired
|
|
public InvitationServiceImpl(Environment environment, UserScope userScope, NotificationIntegrationEventHandler eventHandler, JsonHandlingService jsonHandlingService, NotificationProperties notificationProperties, QueryFactory queryFactory) {
|
|
this.environment = environment;
|
|
this.userScope = userScope;
|
|
this.eventHandler = eventHandler;
|
|
this.jsonHandlingService = jsonHandlingService;
|
|
this.notificationProperties = notificationProperties;
|
|
this.queryFactory = queryFactory;
|
|
}
|
|
private final QueryFactory queryFactory;
|
|
|
|
@Override
|
|
public void assignToDmp(DMPDao dmpDao, List<DmpUserEntity> users, DmpEntity dmp) {
|
|
// for (DmpUserEntity user : users) {
|
|
// dmp.getUsers().add(user);
|
|
// } //TODO
|
|
dmpDao.createOrUpdate(dmp);
|
|
}
|
|
|
|
@Override
|
|
public void assignToDmp(DMPDao dmpDao, DmpUserEntity user, DmpEntity dmp) {
|
|
// if (!dmp.getUsers().stream().map(x -> x.getUser().getId()).collect(Collectors.toList()).contains(user.getId())) {
|
|
// dmp.getUsers().add(user);
|
|
// dmpDao.createOrUpdate(dmp);
|
|
// } //TODO
|
|
}
|
|
|
|
@Override
|
|
public void createInvitations(InvitationDao invitationDao, List<UserEntity> users, DmpEntity dmp, Integer role, UserEntity creator) throws MessagingException, InvalidApplicationException {
|
|
for (UserEntity user : users) {
|
|
Invitation invitation = new Invitation();
|
|
// invitation.setDmp(dmp); //TODO
|
|
UserContactInfoQuery query = this.queryFactory.query(UserContactInfoQuery.class).userIds(user.getId());
|
|
query.setOrder(new Ordering().addAscending(UserContactInfo._ordinal));
|
|
invitation.setInvitationEmail(query.first().getValue());
|
|
invitation.setUser(creator);
|
|
invitation.setToken(UUID.randomUUID());
|
|
invitation.setAcceptedInvitation(false);
|
|
Properties properties = new Properties();
|
|
properties.setRole(role);
|
|
try {
|
|
JAXBContext context = JAXBContext.newInstance(Properties.class);
|
|
Marshaller marshaller = context.createMarshaller();
|
|
StringWriter propertyWriter = new StringWriter();
|
|
marshaller.marshal(properties, propertyWriter);
|
|
invitation.setProperties(propertyWriter.toString());
|
|
}catch (Exception e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
invitationDao.createOrUpdate(invitation);
|
|
this.sendInvitation(dmp, invitation, user, role);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void sendInvitation(DmpEntity dmp, Invitation invitation, UserEntity user, Integer role) throws InvalidApplicationException {
|
|
|
|
NotificationIntegrationEvent event = new NotificationIntegrationEvent();
|
|
event.setUserId(userScope.getUserIdSafe());
|
|
|
|
UserContactInfoQuery query = this.queryFactory.query(UserContactInfoQuery.class).userIds(user.getId());
|
|
query.setOrder(new Ordering().addAscending(UserContactInfo._ordinal));
|
|
|
|
List<ContactPair> contactPairs = new ArrayList<>();
|
|
contactPairs.add(new ContactPair(ContactInfoType.Email, query.first().getValue()));
|
|
NotificationContactData contactData = new NotificationContactData(contactPairs, null, null);
|
|
event.setContactHint(jsonHandlingService.toJsonSafe(contactData));
|
|
event.setContactTypeHint(NotificationContactType.EMAIL);
|
|
event.setNotificationType(UUID.fromString(notificationProperties.getDataManagementPlan()));
|
|
NotificationFieldData data = new NotificationFieldData();
|
|
List<FieldInfo> fieldInfoList = new ArrayList<>();
|
|
fieldInfoList.add(new FieldInfo("{recipient}", DataType.String, user.getName()));
|
|
fieldInfoList.add(new FieldInfo("{invitationID}", DataType.String, invitation.getId().toString()));
|
|
fieldInfoList.add(new FieldInfo("{host}", DataType.String, this.environment.getProperty("dmp.domain")));
|
|
fieldInfoList.add(new FieldInfo("{dmpname}", DataType.String, dmp.getLabel()));
|
|
fieldInfoList.add(new FieldInfo("{dmprole}", DataType.String, DmpUserRole.of(role.shortValue()).toString()));
|
|
data.setFields(fieldInfoList);
|
|
event.setData(jsonHandlingService.toJsonSafe(data));
|
|
eventHandler.handle(event);
|
|
}
|
|
}
|