From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001
From: Paul Martin <paul@paulsputer.com>
Date: Sat, 30 Apr 2016 04:19:14 -0400
Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates

---
 src/main/java/com/gitblit/manager/NotificationManager.java |  118 +++++++++++++++++++++--------------------------------------
 1 files changed, 42 insertions(+), 76 deletions(-)

diff --git a/src/main/java/com/gitblit/manager/NotificationManager.java b/src/main/java/com/gitblit/manager/NotificationManager.java
index eae563f..4bbc2ab 100644
--- a/src/main/java/com/gitblit/manager/NotificationManager.java
+++ b/src/main/java/com/gitblit/manager/NotificationManager.java
@@ -15,24 +15,22 @@
  */
 package com.gitblit.manager;
 
-import java.text.MessageFormat;
 import java.util.Collection;
-import java.util.List;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMultipart;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.gitblit.IStoredSettings;
 import com.gitblit.Keys;
-import com.gitblit.MailExecutor;
+import com.gitblit.models.Mailing;
+import com.gitblit.service.MailService;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
 
 /**
  * The notification manager dispatches notifications.  Currently, email is the
@@ -42,6 +40,7 @@
  * @author James Moger
  *
  */
+@Singleton
 public class NotificationManager implements INotificationManager {
 
 	private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -50,28 +49,35 @@
 
 	private final IStoredSettings settings;
 
-	private final MailExecutor mailExecutor;
+	private final MailService mailService;
 
+	@Inject
 	public NotificationManager(IStoredSettings settings) {
 		this.settings = settings;
-		this.mailExecutor = new MailExecutor(settings);
+		this.mailService = new MailService(settings);
 	}
 
 	@Override
-	public IManager setup() {
-		if (mailExecutor.isReady()) {
-			logger.info("Mail executor is scheduled to process the message queue every 2 minutes.");
-			scheduledExecutor.scheduleAtFixedRate(mailExecutor, 1, 2, TimeUnit.MINUTES);
+	public NotificationManager start() {
+		if (mailService.isReady()) {
+			int period = 2;
+			logger.info("Mail service will process the queue every {} minutes.", period);
+			scheduledExecutor.scheduleAtFixedRate(mailService, 1, period, TimeUnit.MINUTES);
 		} else {
-			logger.warn("Mail server is not properly configured.  Mail services disabled.");
+			logger.warn("Mail service disabled.");
 		}
 		return this;
 	}
 
 	@Override
-	public IManager stop() {
+	public NotificationManager stop() {
 		scheduledExecutor.shutdownNow();
 		return this;
+	}
+
+	@Override
+	public boolean isSendingMail() {
+		return mailService.isReady();
 	}
 
 	/**
@@ -82,8 +88,11 @@
 	 */
 	@Override
 	public void sendMailToAdministrators(String subject, String message) {
-		List<String> toAddresses = settings.getStrings(Keys.mail.adminAddresses);
-		sendMail(subject, message, toAddresses);
+		Mailing mail = Mailing.newPlain();
+		mail.subject = subject;
+		mail.content = message;
+		mail.setRecipients(settings.getStrings(Keys.mail.adminAddresses));
+		send(mail);
 	}
 
 	/**
@@ -95,41 +104,11 @@
 	 */
 	@Override
 	public void sendMail(String subject, String message, Collection<String> toAddresses) {
-		this.sendMail(subject, message, toAddresses.toArray(new String[0]));
-	}
-
-	/**
-	 * Notify users by email of something.
-	 *
-	 * @param subject
-	 * @param message
-	 * @param toAddresses
-	 */
-	@Override
-	public void sendMail(String subject, String message, String... toAddresses) {
-		if (toAddresses == null || toAddresses.length == 0) {
-			logger.debug(MessageFormat.format("Dropping message {0} because there are no recipients", subject));
-			return;
-		}
-		try {
-			Message mail = mailExecutor.createMessage(toAddresses);
-			if (mail != null) {
-				mail.setSubject(subject);
-
-				MimeBodyPart messagePart = new MimeBodyPart();
-				messagePart.setText(message, "utf-8");
-				messagePart.setHeader("Content-Type", "text/plain; charset=\"utf-8\"");
-				messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
-
-				MimeMultipart multiPart = new MimeMultipart();
-				multiPart.addBodyPart(messagePart);
-				mail.setContent(multiPart);
-
-				mailExecutor.queue(mail);
-			}
-		} catch (MessagingException e) {
-			logger.error("Messaging error", e);
-		}
+		Mailing mail = Mailing.newPlain();
+		mail.subject = subject;
+		mail.content = message;
+		mail.setRecipients(toAddresses);
+		send(mail);
 	}
 
 	/**
@@ -141,40 +120,27 @@
 	 */
 	@Override
 	public void sendHtmlMail(String subject, String message, Collection<String> toAddresses) {
-		this.sendHtmlMail(subject, message, toAddresses.toArray(new String[0]));
+		Mailing mail = Mailing.newHtml();
+		mail.subject = subject;
+		mail.content = message;
+		mail.setRecipients(toAddresses);
+		send(mail);
 	}
 
 	/**
 	 * Notify users by email of something.
 	 *
-	 * @param subject
-	 * @param message
-	 * @param toAddresses
+	 * @param mailing
 	 */
 	@Override
-	public void sendHtmlMail(String subject, String message, String... toAddresses) {
-		if (toAddresses == null || toAddresses.length == 0) {
-			logger.debug(MessageFormat.format("Dropping message {0} because there are no recipients", subject));
+	public void send(Mailing mailing) {
+		if (!mailing.hasRecipients()) {
+			logger.debug("Dropping message {} because there are no recipients", mailing.subject);
 			return;
 		}
-		try {
-			Message mail = mailExecutor.createMessage(toAddresses);
-			if (mail != null) {
-				mail.setSubject(subject);
-
-				MimeBodyPart messagePart = new MimeBodyPart();
-				messagePart.setText(message, "utf-8");
-				messagePart.setHeader("Content-Type", "text/html; charset=\"utf-8\"");
-				messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");
-
-				MimeMultipart multiPart = new MimeMultipart();
-				multiPart.addBodyPart(messagePart);
-				mail.setContent(multiPart);
-
-				mailExecutor.queue(mail);
-			}
-		} catch (MessagingException e) {
-			logger.error("Messaging error", e);
+		Message msg = mailService.createMessage(mailing);
+		if (msg != null) {
+			mailService.queue(msg);
 		}
 	}
 

--
Gitblit v1.9.1