]> source.dussan.org Git - gitblit.git/commitdiff
Extract NotificationManager from GitBlit singleton
authorJames Moger <james.moger@gitblit.com>
Wed, 20 Nov 2013 20:26:48 +0000 (15:26 -0500)
committerJames Moger <james.moger@gitblit.com>
Fri, 29 Nov 2013 16:05:51 +0000 (11:05 -0500)
Change-Id: I40335a1a3966d6c7c55bcdcca5a6dbf2a91a65d7

src/main/java/com/gitblit/DaggerModule.java
src/main/java/com/gitblit/GitBlit.java
src/main/java/com/gitblit/manager/INotificationManager.java
src/main/java/com/gitblit/manager/NotificationManager.java [new file with mode: 0644]

index 840ba609076b9e35ca11aca73c1ef0f480d4b7a6..2f060c0ba645a17c2ecdc960ecb504686e8b77a7 100644 (file)
@@ -28,6 +28,7 @@ import com.gitblit.manager.IRepositoryManager;
 import com.gitblit.manager.IRuntimeManager;
 import com.gitblit.manager.ISessionManager;
 import com.gitblit.manager.IUserManager;
+import com.gitblit.manager.NotificationManager;
 import com.gitblit.manager.RuntimeManager;
 import com.gitblit.wicket.GitBlitWebApp;
 import com.gitblit.wicket.GitblitWicketFilter;
@@ -95,8 +96,8 @@ public class DaggerModule {
                return new RuntimeManager(settings);
        }
 
-       @Provides @Singleton INotificationManager provideNotificationManager() {
-               return gitblit;
+       @Provides @Singleton INotificationManager provideNotificationManager(IStoredSettings settings) {
+               return new NotificationManager(settings);
        }
 
        @Provides @Singleton IUserManager provideUserManager() {
index 91a44b7e5110a85c54769af1799415d8f799cd30..4e77974844f46d35f972c9194f33f1e5860318dc 100644 (file)
@@ -56,10 +56,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMultipart;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
@@ -166,8 +162,7 @@ import dagger.ObjectGraph;
  */
 @WebListener
 public class GitBlit extends DaggerContextListener
-                                        implements INotificationManager,
-                                                               IUserManager,
+                                        implements IUserManager,
                                                                ISessionManager,
                                                                IRepositoryManager,
                                                                IProjectManager,
@@ -211,8 +206,6 @@ public class GitBlit extends DaggerContextListener
 
        private IStoredSettings settings;
 
-       private MailExecutor mailExecutor;
-
        private LuceneExecutor luceneExecutor;
 
        private GCExecutor gcExecutor;
@@ -2860,7 +2853,7 @@ public class GitBlit extends DaggerContextListener
                }
 
                // send an email, if possible
-               sendMailToAdministrators("Federation proposal from " + proposal.url,
+               getManager(INotificationManager.class).sendMailToAdministrators("Federation proposal from " + proposal.url,
                                "Please review the proposal @ " + gitblitUrl + "/proposal/" + proposal.token);
                return true;
        }
@@ -3155,110 +3148,6 @@ public class GitBlit extends DaggerContextListener
                return srs;
        }
 
-       /**
-        * Notify the administrators by email.
-        *
-        * @param subject
-        * @param message
-        */
-       @Override
-       public void sendMailToAdministrators(String subject, String message) {
-               List<String> toAddresses = settings.getStrings(Keys.mail.adminAddresses);
-               sendMail(subject, message, toAddresses);
-       }
-
-       /**
-        * Notify users by email of something.
-        *
-        * @param subject
-        * @param message
-        * @param toAddresses
-        */
-       @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);
-               }
-       }
-
-       /**
-        * Notify users by email of something.
-        *
-        * @param subject
-        * @param message
-        * @param toAddresses
-        */
-       @Override
-       public void sendHtmlMail(String subject, String message, Collection<String> toAddresses) {
-               this.sendHtmlMail(subject, message, toAddresses.toArray(new String[0]));
-       }
-
-       /**
-        * Notify users by email of something.
-        *
-        * @param subject
-        * @param message
-        * @param toAddresses
-        */
-       @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));
-                       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);
-               }
-       }
-
        /**
         * Parse the properties file and aggregate all the comments by the setting
         * key. A setting model tracks the current value, the default value, the
@@ -3327,15 +3216,6 @@ public class GitBlit extends DaggerContextListener
                return settingsModel;
        }
 
-       protected void configureMailExecutor() {
-               if (mailExecutor.isReady()) {
-                       logger.info("Mail executor is scheduled to process the message queue every 2 minutes.");
-                       scheduledExecutor.scheduleAtFixedRate(mailExecutor, 1, 2, TimeUnit.MINUTES);
-               } else {
-                       logger.warn("Mail server is not properly configured.  Mail services disabled.");
-               }
-       }
-
        protected void configureLuceneIndexing() {
                scheduledExecutor.scheduleAtFixedRate(luceneExecutor, 1, 2,  TimeUnit.MINUTES);
                logger.info("Lucene executor is scheduled to process indexed branches every 2 minutes.");
@@ -3440,7 +3320,7 @@ public class GitBlit extends DaggerContextListener
                                // HACK temporary pending manager separation and injection
                                Gitblit gitblit = new Gitblit(
                                                getManager(IRuntimeManager.class),
-                                               this,
+                                               getManager(INotificationManager.class),
                                                this,
                                                this,
                                                this,
@@ -3549,13 +3429,14 @@ public class GitBlit extends DaggerContextListener
                runtime.getStatus().isGO = goSettings != null;
                runtime.getStatus().servletContainer = context.getServerInfo();
 
+               startManager(injector, INotificationManager.class);
+
                repositoriesFolder = getRepositoriesFolder();
 
                logger.info("Gitblit base folder     = " + baseFolder.getAbsolutePath());
                logger.info("Git repositories folder = " + repositoriesFolder.getAbsolutePath());
 
                // prepare service executors
-               mailExecutor = new MailExecutor(runtimeSettings);
                luceneExecutor = new LuceneExecutor(runtimeSettings, getManager(IRepositoryManager.class));
                gcExecutor = new GCExecutor(runtimeSettings, getManager(IRepositoryManager.class));
                mirrorExecutor = new MirrorExecutor(runtimeSettings, getManager(IRepositoryManager.class));
@@ -3592,7 +3473,6 @@ public class GitBlit extends DaggerContextListener
                projectConfigs = new FileBasedConfig(runtime.getFileOrFolder(Keys.web.projectsFile, "${baseFolder}/projects.conf"), FS.detect());
                getProjectConfigs();
 
-               configureMailExecutor();
                configureLuceneIndexing();
                configureGarbageCollector();
                configureMirrorExecutor();
index f53ae68da7afa942a5df7bb6245051692fff1242..29d8f5496add0c05c600f834099d20967f791c58 100644 (file)
@@ -17,7 +17,7 @@ package com.gitblit.manager;
 
 import java.util.Collection;
 
-public interface INotificationManager {
+public interface INotificationManager extends IManager {
 
        /**
         * Notify the administrators by email.
diff --git a/src/main/java/com/gitblit/manager/NotificationManager.java b/src/main/java/com/gitblit/manager/NotificationManager.java
new file mode 100644 (file)
index 0000000..eae563f
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2013 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+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;
+
+/**
+ * The notification manager dispatches notifications.  Currently, email is the
+ * only supported transport, however there is no reason why other transports
+ * could be supported (tweets, irc, sms, etc).
+ *
+ * @author James Moger
+ *
+ */
+public class NotificationManager implements INotificationManager {
+
+       private final Logger logger = LoggerFactory.getLogger(getClass());
+
+       private final ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(1);
+
+       private final IStoredSettings settings;
+
+       private final MailExecutor mailExecutor;
+
+       public NotificationManager(IStoredSettings settings) {
+               this.settings = settings;
+               this.mailExecutor = new MailExecutor(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);
+               } else {
+                       logger.warn("Mail server is not properly configured.  Mail services disabled.");
+               }
+               return this;
+       }
+
+       @Override
+       public IManager stop() {
+               scheduledExecutor.shutdownNow();
+               return this;
+       }
+
+       /**
+        * Notify the administrators by email.
+        *
+        * @param subject
+        * @param message
+        */
+       @Override
+       public void sendMailToAdministrators(String subject, String message) {
+               List<String> toAddresses = settings.getStrings(Keys.mail.adminAddresses);
+               sendMail(subject, message, toAddresses);
+       }
+
+       /**
+        * Notify users by email of something.
+        *
+        * @param subject
+        * @param message
+        * @param toAddresses
+        */
+       @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);
+               }
+       }
+
+       /**
+        * Notify users by email of something.
+        *
+        * @param subject
+        * @param message
+        * @param toAddresses
+        */
+       @Override
+       public void sendHtmlMail(String subject, String message, Collection<String> toAddresses) {
+               this.sendHtmlMail(subject, message, toAddresses.toArray(new String[0]));
+       }
+
+       /**
+        * Notify users by email of something.
+        *
+        * @param subject
+        * @param message
+        * @param toAddresses
+        */
+       @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));
+                       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);
+               }
+       }
+
+}