package pl.piotrsukiennik.whowhen.backend.service.event;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.ui.velocity.VelocityEngineUtils;
import pl.piotrsukiennik.whowhen.shared.event.ProgressListener;
import pl.piotrsukiennik.whowhen.shared.form.RequestData;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.HashMap;
import java.util.Map;
/**
* @author Piotr Sukiennik
*/
public class MailSenderProgressListener implements ProgressListener {
private JavaMailSender mailSender;
private String subject;
private String from;
private VelocityEngine velocityEngine;
public void setMailSender( JavaMailSender mailSender ) {
this.mailSender = mailSender;
}
public void setVelocityEngine( VelocityEngine velocityEngine ) {
this.velocityEngine = velocityEngine;
}
@Override
public void notify( int progress, String requestIdentifier ) {
}
public void notify( int progress, final String requestIdentifier, final RequestData request ) {
try {
if ( progress == 100 && request != null && request.getEmail() != null && !request.getEmail().isEmpty() ) {
MimeMessage message = mailSender.createMimeMessage();
Map model = new HashMap();
model.put( "requestIdentifier", requestIdentifier );
message.setSubject( subject );
message.setFrom( new InternetAddress( from ) );
message.addRecipient( Message.RecipientType.TO, new InternetAddress( request.getEmail() ) );
String text = VelocityEngineUtils.mergeTemplateIntoString( velocityEngine, "velocity/mail_requestCompleted.vm", model );
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setContent( text, "text/html" );
MimeMultipart multipart = new MimeMultipart( "related" );
multipart.addBodyPart( messageBodyPart );
message.setContent( multipart );
this.mailSender.send( message );
}
}
catch ( MailException ex ) {
ex.printStackTrace();
}
catch ( MessagingException messagingException ) {
messagingException.printStackTrace();
}
}
public String getSubject() {
return subject;
}
public void setSubject( String subject ) {
this.subject = subject;
}
public String getFrom() {
return from;
}
public void setFrom( String from ) {
this.from = from;
}
}