Skip to content
Snippets Groups Projects

feat: create notifications for depositors when a publication is rejected

Merged Alicia.DeDiosFuente requested to merge adf-424-notifications-with-deposit-refused into master
Files
9
@@ -2,10 +2,12 @@ package ch.unige.aou.service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Optional;
import javax.mail.MessagingException;
import org.slf4j.Logger;
@@ -17,10 +19,12 @@ import org.springframework.stereotype.Service;
import ch.unige.solidify.exception.SolidifyRuntimeException;
import ch.unige.solidify.service.EmailService;
import ch.unige.aou.business.CommentService;
import ch.unige.aou.business.PublicationService;
import ch.unige.aou.config.AouProperties;
import ch.unige.aou.controller.AdminController;
import ch.unige.aou.message.EmailMessage;
import ch.unige.aou.model.publication.Comment;
import ch.unige.aou.model.publication.Publication;
@Service
@@ -31,13 +35,16 @@ public class EmailJmsListener extends MessageProcessor<EmailMessage> {
private final EmailService emailService;
private final PublicationService publicationService;
private final CommentService commentService;
private final String submissionPortalHomepage;
public EmailJmsListener(AouProperties aouProperties, EmailService emailService, PublicationService publicationService) {
public EmailJmsListener(AouProperties aouProperties, EmailService emailService, PublicationService publicationService,
CommentService commentService) {
super(aouProperties);
this.emailService = emailService;
this.publicationService = publicationService;
this.commentService = commentService;
this.submissionPortalHomepage = aouProperties.getParameters().getSubmissionPortalHomepage();
}
@@ -62,7 +69,9 @@ public class EmailJmsListener extends MessageProcessor<EmailMessage> {
case MY_PUBLICATIONS_VALIDATED:
this.sendEmailToValidatedDepositsDepositor(emailMessage);
break;
case MY_PUBLICATIONS_REJECTED:
this.sendEmailToRejectedDepositsDepositor(emailMessage);
break;
case NEW_SUBSCRIPTION:
case REMOVE_SUBSCRIPTION:
parameterList.put("notificationTypes", emailMessage.getParameters());
@@ -79,6 +88,10 @@ public class EmailJmsListener extends MessageProcessor<EmailMessage> {
}
}
private void sendEmailToRejectedDepositsDepositor(EmailMessage emailMessage) throws MessagingException {
this.sendEmailWithPublicationsListWithLastComment(emailMessage);
}
private void sendEmailWithPublicationsList(EmailMessage emailMessage) throws MessagingException {
List<Publication> publications = new ArrayList<>();
for (String publicationId : emailMessage.getParameters()) {
@@ -92,6 +105,36 @@ public class EmailJmsListener extends MessageProcessor<EmailMessage> {
emailMessage.getTemplate().getSubject(), parameters);
}
private void sendEmailWithPublicationsListWithLastComment(EmailMessage emailMessage) throws MessagingException {
List<Publication> publications = new ArrayList<>();
List<Comment> lastCommentsByPublication = new ArrayList<>();
for (String publicationId : emailMessage.getParameters()) {
Publication p = this.publicationService.findOne(publicationId);
publications.add(p);
//add last comment of each publication
List<Comment> comments = this.commentService.findByPublication(publicationId);
if (comments.isEmpty()) {
lastCommentsByPublication.add(null);
} else {
Comparator<Comment> creationTimeComparator = Comparator.comparing(Comment::getCreationTime);
Optional<Comment> commentOpt = comments.stream().filter(c -> !c.isOnlyForValidators()).max(creationTimeComparator);
if (!commentOpt.get().getPerson().equals(p.getCreator())) {
lastCommentsByPublication.add(commentOpt.get());
} else {
lastCommentsByPublication.add(null);
}
}
}
Map<String, Object> parameters = this.getEmailDefaultParameters();
parameters.put("publications", publications);
parameters.put("lastComments", lastCommentsByPublication);
this.emailService.sendEmailWithTemplate(emailMessage.getTemplate().toString().toLowerCase(), Arrays.asList(emailMessage.getTo()),
emailMessage.getTemplate().getSubject(), parameters);
}
private void sendEmailWithNewDepositsToValidate(EmailMessage emailMessage) throws MessagingException {
this.sendEmailWithPublicationsList(emailMessage);
}
Loading