Update of 
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/publisher
In directory 
james.mmbase.org:/tmp/cvs-serv11899/portlets-newsletter/src/java/com/finalist/newsletter/publisher

Modified Files:
        NewsletterPublisher.java 
Added Files:
        MIMEType.java 
Log Message:
CMSC-725 service classes,some class refactory.


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/publisher
See also: http://www.mmbase.org/jira/browse/CMSC-725


MIMEType.java is new



Index: NewsletterPublisher.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Portlets/portlets-newsletter/src/java/com/finalist/newsletter/publisher/NewsletterPublisher.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -b -r1.10 -r1.11
--- NewsletterPublisher.java    11 Apr 2008 07:11:25 -0000      1.10
+++ NewsletterPublisher.java    15 Apr 2008 06:18:33 -0000      1.11
@@ -1,211 +1,98 @@
 package com.finalist.newsletter.publisher;
 
-import com.finalist.cmsc.services.community.person.Person;
-import com.finalist.newsletter.generator.NewsletterGenerator;
-import com.finalist.newsletter.generator.NewsletterGeneratorFactory;
-import com.finalist.newsletter.util.NewsletterSubscriptionUtil;
-import com.finalist.newsletter.util.NewsletterUtil;
 import com.finalist.newsletter.domain.Subscription;
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-import org.mmbase.bridge.Cloud;
-import org.mmbase.bridge.Node;
-import org.mmbase.bridge.NodeList;
-import org.mmbase.bridge.util.SearchUtil;
+import com.finalist.newsletter.domain.Publication;
+import com.finalist.newsletter.generator.NewsletterGenerator;
+import org.mmbase.module.Module;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
 
 import javax.mail.Message;
 import javax.mail.MessagingException;
+import javax.mail.Session;
 import javax.mail.Transport;
 import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
 import java.io.UnsupportedEncodingException;
-import java.text.DateFormat;
-import java.util.Date;
 import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-public class NewsletterPublisher extends Thread {
-
-   private static final String UNSENT_NEWSLETTER = "unsent_newsletter";
-
-   private static Logger log = Logging
-         .getLoggerInstance(NewsletterPublisher.class.getName());
-
-   private int publicationNumber;
-   private Cloud cloud;
-
-   public NewsletterPublisher(int publicationNumber) {
-      this.publicationNumber = publicationNumber;
-      this.cloud = CloudProviderFactory.getCloudProvider().getCloud();
-   }
-
-   public NewsletterPublisher() {
 
-   }
+public class NewsletterPublisher {
 
-   private void createConfirmationList(List<String> subscribers) {
-      for (int s = 0; s < subscribers.size(); s++) {
-         String userName = subscribers.get(s);
-//         NewsletterCommunication.setUserPreference(userName, 
UNSENT_NEWSLETTER,                  String.valueOf(publicationNumber));
-      }
-   }
-
-   private Message generateNewsletter(String userName, int publicationNumber, 
String mimeType) {
-      NewsletterGeneratorFactory factory = NewsletterGeneratorFactory
-            .getInstance();
-      NewsletterGenerator generator = 
factory.getNewsletterGenerator(publicationNumber, mimeType);
-      if (generator != null) {
-         Message message = generator.generateNewsletterMessage(userName);
-         return (message);
-      }
-      return (null);
-   }
-
-   private void removeFromConfirmationList(String userName) {
-//      NewsletterCommunication.removeUserPreference(userName, 
UNSENT_NEWSLETTER,
-//            String.valueOf(publicationNumber));
-   }
-
-   @Override
-   public void run() {
-      startMassPublishing();
-   }
-
-   private void sendNewsletter(Node publicationNode, String userName) {
-      String mimeType = NewsletterSubscriptionUtil
-            .getPreferredMimeType(userName);
-      Message message = generateNewsletter(userName, publicationNumber, 
mimeType);
+   private static Logger log = 
Logging.getLoggerInstance(NewsletterPublisher.class.getName());
 
+   public void deliver(Publication publication,List<Subscription> 
subscriptions) {
+      for (Subscription subscription : subscriptions) {
       try {
-         message = setMailHeaders(publicationNode, userName, message);
+            Message message = new MimeMessage(getMailSession());
+            setBody(message, publication);
+            setHeader(message, subscription);
          Transport.send(message);
-         removeFromConfirmationList(userName);
       } catch (MessagingException e) {
-         log
-               .debug("An error occurred while trying to send a newsletter 
e-mail");
-         log.debug(e.getMessage());
+            log.error(e);
       } catch (UnsupportedEncodingException e) {
-         // TODO Auto-generated catch block
-         e.printStackTrace();
+            log.error(e);
+         }
       }
    }
 
-   private Message setMailHeaders(Node publicationNode, String userName, 
Message message) throws MessagingException, UnsupportedEncodingException {
+   private void setBody(Message message, Publication publication,Subscription 
subscription) throws MessagingException {
+      NewsletterGenerator.generate(message,publication,subscription);
+   }
+
+   private void setHeader(Message message, Subscription subscription) throws 
MessagingException, UnsupportedEncodingException {
 
-      String emailFrom = null;
-      String nameFrom = null;
-      String emailReplyTo = null;
-      String nameReplyTo = null;
-
-      Node newsletterNode = SearchUtil.findRelatedNode(publicationNode, 
"newsletter", "related");
-      if (newsletterNode != null) {
-         emailFrom = newsletterNode.getStringValue("from_mail");
-         nameFrom = newsletterNode.getStringValue("from_name");
-         emailReplyTo = newsletterNode.getStringValue("replyto_mail");
-         nameReplyTo = newsletterNode.getStringValue("replyto_name");
-      }
-
-//      if (emailFrom == null || emailFrom.length() == 0) {
-//         emailFrom = PropertiesUtil.getProperty("newsletter.from.mail");
-//         if (emailFrom == null || emailFrom.length() == 0) {
-//            emailFrom = PropertiesUtil.getProperty("mail.system.email");
-//         }
-//      }
-//
-//      if (nameFrom == null || nameFrom.length() == 0) {
-//         nameFrom = PropertiesUtil.getProperty("newsletter.from.name");
-//      }
-//
-//      if (emailReplyTo == null || emailReplyTo.length() == 0) {
-//         emailReplyTo = 
PropertiesUtil.getProperty("newsletter.replyto.mail");
-//      }
-//
-//      if (nameReplyTo == null || nameReplyTo.length() == 0) {
-//         nameReplyTo = PropertiesUtil.getProperty("newsletter.replyto.name");
-//      }
+      String emailFrom = subscription.getFromAddress();
+      String nameFrom = subscription.getFromName();
+      String emailReplyTo = subscription.getReplyAddress();
+      String nameReplyTo = subscription.getReplyname();
 
-      if (emailFrom != null && emailFrom.length() > 0) {
          InternetAddress fromAddress = new InternetAddress(emailFrom);
-         if (nameFrom != null && nameFrom.length() > 0) {
             fromAddress.setPersonal(nameFrom);
-         }
          message.setFrom(fromAddress);
-      }
-      else {
-         return (null);
-      }
 
-      if (emailReplyTo != null && emailReplyTo.length() > 0) {
          InternetAddress replyToAddress = new InternetAddress(emailReplyTo);
-         if (nameReplyTo != null && nameReplyTo.length() > 0) {
             replyToAddress.setPersonal(nameReplyTo);
-         }
-         InternetAddress[] addresses = new InternetAddress[1];
-         addresses[0] = replyToAddress;
-         message.setReplyTo(addresses);
-      }
-      else {
-         return (null);
-      }
+      message.setReplyTo(new InternetAddress[]{replyToAddress});
 
-//      String userEmail = NewsletterCommunication.getUserPreference(userName,
-//            "email");
-//      if (userEmail != null && userEmail.length() > 0) {
-//         InternetAddress toAddress = new InternetAddress(userEmail);
-//         message.setRecipient(RecipientType.TO, toAddress);
-//      } else {
-//         return (null);
-//      }
+      InternetAddress toAddress = new 
InternetAddress(subscription.getSubscriber().getEmail());
+      message.setRecipient(MimeMessage.RecipientType.TO, toAddress);
 
-      String subject = "" + publicationNode.getStringValue("subject");
-      message.setSubject(subject);
-
-      return (message);
+      message.setSubject(subscription.getTitle());
+      message.setHeader("Content-type",subscription.getMimeType());
    }
 
-   private void startMassPublishing() {
-      Node publicationNode = cloud.getNode(publicationNumber);
-      NodeList newsletterNodeList = publicationNode
-            .getRelatedNodes(NewsletterUtil.NEWSLETTER);
-      Node newsletterNode = newsletterNodeList.getNode(0);
+   private static Session getMailSession() {
 
-      renamePublication(publicationNode);
+      Session session = null;
 
-      int newsletterNumber = newsletterNode.getNumber();
-      List<String> subscribers = NewsletterSubscriptionUtil
-            .getSubscribersForNewsletter(newsletterNumber);
+      try {
+         String datasource = getParameter("datasource");
+         String context = getParameter("context");
 
-      if (subscribers != null) {
-         createConfirmationList(subscribers);
-         for (int subscribersIterator = 0; subscribersIterator < subscribers
-               .size(); subscribersIterator++) {
-            String userName = subscribers.get(subscribersIterator);
-            sendNewsletter(publicationNode, userName);
+         Context initCtx = new InitialContext();
+         Context envCtx = (Context) initCtx.lookup(context);
+         session = (javax.mail.Session) envCtx.lookup(datasource);
+      } catch (NamingException e) {
+         log.fatal("Configured dataSource '" + getParameter("datasource") + "' 
of context '" + getParameter("context") + "' is not a Session ");
          }
+      return session;
       }
 
+   private static String getParameter(String name) {
+      Module sendmailModule = Module.getModule("sendmail");
+      if (sendmailModule == null) {
+         log.fatal("Sendmail module not installed which is required for 
newsletter generation");
+         return null;
    }
 
-   private void renamePublication(Node publicationNode) {
-      Date date = publicationNode.getDateValue("publishdate");
-      String zoneId = TimeZone.getDefault().getDisplayName();
-      TimeZone tz = TimeZone.getTimeZone(zoneId);
-
-      String locale = Locale.getDefault().getDisplayCountry();
-      Locale loc = new Locale(locale);
-
-      DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, 
DateFormat.SHORT, loc);
-      formatter.setTimeZone(tz);
-      String currentDate = formatter.format(date);
-
-      String currentTitle = publicationNode.getStringValue("title");
-      String newTitle = currentTitle.concat(" - ").concat(currentDate);
-      publicationNode.setStringValue("title", newTitle);
-      publicationNode.commit();
+      String parameter = sendmailModule.getInitParameter(name);
+      if (parameter == null) {
+         parameter = "java:comp/env";
+         log.warn("The property " + parameter + " is missing, taking default " 
+ parameter);
    }
-
-   public void deliver(int id, List<Subscription> subscriptions) {
-      //To change body of created methods use File | Settings | File Templates.
+      return parameter;
    }
 }
\ No newline at end of file
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to