You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2006/06/12 12:20:00 UTC

svn commit: r413624 - in /james/server/trunk/src/java/org/apache/james/transport/mailets: AbstractAddFooter.java AddFooter.java CommandListservFooter.java

Author: norman
Date: Mon Jun 12 03:19:59 2006
New Revision: 413624

URL: http://svn.apache.org/viewvc?rev=413624&view=rev
Log:
Add an abstract class for adding a Footer. Change AddFooter and CommandListservFooter to extend this class

Added:
    james/server/trunk/src/java/org/apache/james/transport/mailets/AbstractAddFooter.java
Modified:
    james/server/trunk/src/java/org/apache/james/transport/mailets/AddFooter.java
    james/server/trunk/src/java/org/apache/james/transport/mailets/CommandListservFooter.java

Added: james/server/trunk/src/java/org/apache/james/transport/mailets/AbstractAddFooter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/transport/mailets/AbstractAddFooter.java?rev=413624&view=auto
==============================================================================
--- james/server/trunk/src/java/org/apache/james/transport/mailets/AbstractAddFooter.java (added)
+++ james/server/trunk/src/java/org/apache/james/transport/mailets/AbstractAddFooter.java Mon Jun 12 03:19:59 2006
@@ -0,0 +1,189 @@
+/***********************************************************************
+ * Copyright (c) 2006 The Apache Software Foundation.                  *
+ * All rights reserved.                                                *
+ * ------------------------------------------------------------------- *
+ * 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 org.apache.james.transport.mailets;
+
+import org.apache.mailet.GenericMailet;
+import org.apache.mailet.Mail;
+import org.apache.mailet.RFC2822Headers;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.internet.MimePart;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * An abstract implementation of a mailet that add a Footer to an email
+ */
+public abstract class AbstractAddFooter extends GenericMailet {
+
+    /**
+     * Takes the message and attaches a footer message to it.  Right now, it only
+     * supports simple messages.  Needs to have additions to make it support
+     * messages with alternate content types or with attachments.
+     *
+     * @param mail the mail being processed
+     *
+     * @throws MessagingException if an error arises during message processing
+     */
+    public void service(Mail mail) throws MessagingException {
+        try {
+            MimeMessage message = mail.getMessage();
+
+            if (attachFooter(message)) {
+                message.saveChanges();
+            } else {
+                log("Unable to add footer to mail " + mail.getName());
+            }
+        } catch (UnsupportedEncodingException e) {
+            log("UnsupportedEncoding Unable to add footer to mail "
+                    + mail.getName());
+        } catch (IOException ioe) {
+            throw new MessagingException("Could not read message", ioe);
+        }
+    }
+
+    /**
+     * Prepends the content of the MimePart as text to the existing footer
+     *
+     * @param part the MimePart to attach
+     *
+     * @throws MessagingException
+     * @throws IOException
+     */
+    protected void addToText(MimePart part) throws MessagingException,
+            IOException {
+        //        log("Trying to add footer to " + part.getContent().toString());
+        String contentType = part.getContentType();
+        String content = (String) part.getContent();
+
+        if (!content.endsWith("\n")) {
+            content += "\r\n";
+        }
+        content += getFooterText();
+
+        part.setContent(content, contentType);
+        part.setHeader(RFC2822Headers.CONTENT_TYPE, contentType);
+        //        log("After adding footer: " + part.getContent().toString());
+    }
+
+    /**
+     * Prepends the content of the MimePart as HTML to the existing footer
+     *
+     * @param part the MimePart to attach
+     *
+     * @throws MessagingException
+     * @throws IOException
+     */
+    protected void addToHTML(MimePart part) throws MessagingException,
+            IOException {
+        //        log("Trying to add footer to " + part.getContent().toString());
+        String contentType = part.getContentType();
+        String content = (String) part.getContent();
+
+        /* This HTML part may have a closing <BODY> tag.  If so, we
+         * want to insert out footer immediately prior to that tag.
+         */
+        int index = content.lastIndexOf("</body>");
+        if (index == -1)
+            index = content.lastIndexOf("</BODY>");
+        String insert = "<br>" + getFooterHTML();
+        content = index == -1 ? content + insert : content.substring(0, index)
+                + insert + content.substring(index);
+
+        part.setContent(content, contentType);
+        part.setHeader(RFC2822Headers.CONTENT_TYPE, contentType);
+        //        log("After adding footer: " + part.getContent().toString());
+    }
+
+    /**
+     * Attach a footer a MimePart
+     *
+     * @param part the MimePart to which the footer is to be attached
+     *
+     * @return whether a footer was successfully attached
+     * @throws MessagingException
+     * @throws IOException
+     */
+    protected boolean attachFooter(MimePart part) throws MessagingException,
+            IOException {
+        //        log("Content type is " + part.getContentType());
+        if (part.isMimeType("text/plain")
+                && part.getContent() instanceof String) {
+            addToText(part);
+            return true;
+        } else if (part.isMimeType("text/html")
+                && part.getContent() instanceof String) {
+            addToHTML(part);
+            return true;
+        } else if (part.isMimeType("multipart/mixed")
+                || part.isMimeType("multipart/related")) {
+            //Find the first body part, and determine what to do then.
+            MimeMultipart multipart = (MimeMultipart) part.getContent();
+            MimeBodyPart firstPart = (MimeBodyPart) multipart.getBodyPart(0);
+            boolean isFooterAttached = attachFooter(firstPart);
+            if (isFooterAttached) {
+                //We have to do this because of a bug in JavaMail (ref id 4403733)
+                //http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4403733
+                part.setContent(multipart);
+            }
+            return isFooterAttached;
+        } else if (part.isMimeType("multipart/alternative")) {
+            MimeMultipart multipart = (MimeMultipart) part.getContent();
+            int count = multipart.getCount();
+            //            log("number of alternatives = " + count);
+            boolean isFooterAttached = false;
+            for (int index = 0; index < count; index++) {
+                //                log("processing alternative #" + index);
+                MimeBodyPart mimeBodyPart = (MimeBodyPart) multipart
+                        .getBodyPart(index);
+                isFooterAttached |= attachFooter(mimeBodyPart);
+            }
+            if (isFooterAttached) {
+                //We have to do this because of a bug in JavaMail (ref id 4403733)
+                //http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4403733
+                part.setContent(multipart);
+            }
+            return isFooterAttached;
+        } else {
+            //Give up... we won't attach the footer to this MimePart
+            return false;
+        }
+    }
+
+    /**
+     * This is exposed as a method for easy subclassing to provide alternate ways
+     * to get the footer text.
+     *
+     * @return the footer text
+     */
+    protected abstract String getFooterText();
+
+    /**
+     * This is exposed as a method for easy subclassing to provide alternate ways
+     * to get the footer text.  By default, this will take the footer text,
+     * converting the linefeeds to &lt;br&gt; tags.
+     *
+     * @return the HTML version of the footer text
+     */
+    protected abstract String getFooterHTML();
+
+}

Modified: james/server/trunk/src/java/org/apache/james/transport/mailets/AddFooter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/transport/mailets/AddFooter.java?rev=413624&r1=413623&r2=413624&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/transport/mailets/AddFooter.java (original)
+++ james/server/trunk/src/java/org/apache/james/transport/mailets/AddFooter.java Mon Jun 12 03:19:59 2006
@@ -17,25 +17,14 @@
 
 package org.apache.james.transport.mailets;
 
-import org.apache.mailet.GenericMailet;
-import org.apache.mailet.Mail;
-import org.apache.mailet.RFC2822Headers;
-
 import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.internet.MimePart;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.StringTokenizer;
 
 /**
  * This mailet will attach text to the end of the message (like a footer).  Right
  * now it only supports simple messages without multiple parts.
  */
-public class AddFooter extends GenericMailet {
+public class AddFooter extends AbstractAddFooter {
 
     /**
      * This is the plain text version of the footer we are going to add
@@ -50,59 +39,6 @@
     }
 
     /**
-     * Takes the message and attaches a footer message to it.  Right now, it only
-     * supports simple messages.  Needs to have additions to make it support
-     * messages with alternate content types or with attachments.
-     *
-     * @param mail the mail being processed
-     *
-     * @throws MessagingException if an error arises during message processing
-     */
-    public void service(Mail mail) throws MessagingException {
-        try {
-            MimeMessage message = mail.getMessage();
-//            log("Trying to add footer to mail " + mail.getName());
-            if (attachFooter(message)) {
-                message.saveChanges();
-//                log("Message after saving: " + message.getContent().toString());
-                /*
-                java.io.ByteArrayOutputStream bodyOs = new java.io.ByteArrayOutputStream(512);
-                java.io.OutputStream bos;
-                java.io.InputStream bis;
-                try {
-                    bis = message.getRawInputStream();
-                    bos = bodyOs;
-                    log("Using getRawInputStream()");
-                } catch(javax.mail.MessagingException me) {
-                    bos = javax.mail.internet.MimeUtility.encode(bodyOs, message.getEncoding());
-                    bis = message.getInputStream();
-                    log("Using getInputStream()");
-                }
-
-                try {
-                    byte[] block = new byte[1024];
-                    int read = 0;
-                    while ((read = bis.read(block)) > -1) {
-                        bos.write(block, 0, read);
-                    }
-                    bos.flush();
-                }
-                finally {
-                    org.apache.avalon.excalibur.io.IOUtil.shutdownStream(bis);             
-                }
-                log("Message from stream: " + bodyOs.toString());
-                */
-            } else {
-                log("Unable to add footer to mail " + mail.getName());
-            }
-        } catch (UnsupportedEncodingException e) {
-            log("UnsupportedEncoding Unable to add footer to mail " +  mail.getName());
-        } catch (IOException ioe) {
-            throw new MessagingException("Could not read message", ioe);
-        }
-    }
-
-    /**
      * This is exposed as a method for easy subclassing to provide alternate ways
      * to get the footer text.
      *
@@ -144,105 +80,5 @@
      */
     public String getMailetInfo() {
         return "AddFooter Mailet";
-    }
-
-    /**
-     * Prepends the content of the MimePart as text to the existing footer
-     *
-     * @param part the MimePart to attach
-     *
-     * @throws MessagingException
-     * @throws IOException
-     */
-    protected void addToText(MimePart part) throws MessagingException, IOException {
-//        log("Trying to add footer to " + part.getContent().toString());
-        String contentType = part.getContentType();
-        String content = (String) part.getContent();
-        
-        if (!content.endsWith("\n")) {
-            content += "\r\n";
-        }
-        content += getFooterText();
-
-        part.setContent(content,contentType);
-        part.setHeader(RFC2822Headers.CONTENT_TYPE,contentType);
-//        log("After adding footer: " + part.getContent().toString());
-    }
-
-    /**
-     * Prepends the content of the MimePart as HTML to the existing footer
-     *
-     * @param part the MimePart to attach
-     *
-     * @throws MessagingException
-     * @throws IOException
-     */
-    protected void addToHTML(MimePart part) throws MessagingException, IOException {
-//        log("Trying to add footer to " + part.getContent().toString());
-        String contentType = part.getContentType();
-        String content = (String) part.getContent(); 
-
-        /* This HTML part may have a closing <BODY> tag.  If so, we
-         * want to insert out footer immediately prior to that tag.
-         */
-        int index = content.lastIndexOf("</body>");
-        if (index == -1) index = content.lastIndexOf("</BODY>");
-        String insert = "<br>" + getFooterHTML();
-        content = index == -1 ? content + insert : content.substring(0, index) + insert + content.substring(index);
-
-        part.setContent(content,contentType);
-        part.setHeader(RFC2822Headers.CONTENT_TYPE,contentType);
-//        log("After adding footer: " + part.getContent().toString());
-    }
-
-    /**
-     * Attach a footer a MimePart
-     *
-     * @param part the MimePart to which the footer is to be attached
-     *
-     * @return whether a footer was successfully attached
-     * @throws MessagingException
-     * @throws IOException
-     */
-    protected boolean attachFooter(MimePart part) throws MessagingException, IOException {
-//        log("Content type is " + part.getContentType());
-        if (part.isMimeType("text/plain") && part.getContent() instanceof String) {
-            addToText(part);
-            return true;
-        } else if (part.isMimeType("text/html") && part.getContent() instanceof String) {
-            addToHTML(part);
-            return true;
-        } else if (part.isMimeType("multipart/mixed") || part.isMimeType("multipart/related")) {
-            //Find the first body part, and determine what to do then.
-            MimeMultipart multipart = (MimeMultipart)part.getContent();
-            MimeBodyPart firstPart = (MimeBodyPart)multipart.getBodyPart(0);
-            boolean isFooterAttached = attachFooter(firstPart);
-            if (isFooterAttached) {
-                //We have to do this because of a bug in JavaMail (ref id 4403733)
-                //http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4403733
-                part.setContent(multipart);
-            }
-            return isFooterAttached;
-        } else if (part.isMimeType("multipart/alternative")) {
-            MimeMultipart multipart = (MimeMultipart)part.getContent();
-            int count = multipart.getCount();
-//            log("number of alternatives = " + count);
-            boolean isFooterAttached = false;
-            for (int index = 0; index < count; index++) {
-//                log("processing alternative #" + index);
-                MimeBodyPart mimeBodyPart = (MimeBodyPart)multipart.getBodyPart(index);
-                isFooterAttached |= attachFooter(mimeBodyPart);
-            }
-            if (isFooterAttached) {
-                //We have to do this because of a bug in JavaMail (ref id 4403733)
-                //http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4403733
-                part.setContent(multipart);
-            }
-            return isFooterAttached;
-        } else {
-            //Give up... we won't attach the footer to this MimePart
-            return false;
-        }
-    }
-    
+    } 
 }

Modified: james/server/trunk/src/java/org/apache/james/transport/mailets/CommandListservFooter.java
URL: http://svn.apache.org/viewvc/james/server/trunk/src/java/org/apache/james/transport/mailets/CommandListservFooter.java?rev=413624&r1=413623&r2=413624&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/transport/mailets/CommandListservFooter.java (original)
+++ james/server/trunk/src/java/org/apache/james/transport/mailets/CommandListservFooter.java Mon Jun 12 03:19:59 2006
@@ -19,8 +19,6 @@
 
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.james.util.XMLResources;
-import org.apache.mailet.GenericMailet;
-import org.apache.mailet.Mail;
 import org.apache.oro.text.regex.MalformedPatternException;
 import org.apache.oro.text.regex.Pattern;
 import org.apache.oro.text.regex.Perl5Compiler;
@@ -29,12 +27,6 @@
 import org.apache.oro.text.regex.Util;
 
 import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMessage;
-import javax.mail.internet.MimeMultipart;
-import javax.mail.internet.MimePart;
-
-import java.io.IOException;
 
 
 /**
@@ -48,7 +40,7 @@
  * @since 2.2.0
  * @see XMLResources
  */
-public class CommandListservFooter extends GenericMailet {
+public class CommandListservFooter extends AbstractAddFooter {
 
     protected String footerText;
     protected String footerHtml;
@@ -103,53 +95,6 @@
 
 
     /**
-     * Identify what type of mimeMessage it is, and attach the footer
-     * @param mail
-     * @throws MessagingException
-     */
-    public void service(Mail mail) throws MessagingException {
-        try {
-            MimeMessage message = mail.getMessage();
-//            log("Trying to add footer to mail " + mail.getName());
-            if (attachFooter(message)) {
-                message.saveChanges();
-//                log("Message after saving: " + message.getContent().toString());
-                /*
-                java.io.ByteArrayOutputStream bodyOs = new java.io.ByteArrayOutputStream(512);
-                java.io.OutputStream bos;
-                java.io.InputStream bis;
-                try {
-                    bis = message.getRawInputStream();
-                    bos = bodyOs;
-                    log("Using getRawInputStream()");
-                } catch(javax.mail.MessagingException me) {
-                    bos = javax.mail.internet.MimeUtility.encode(bodyOs, message.getEncoding());
-                    bis = message.getInputStream();
-                    log("Using getInputStream()");
-                }
-
-                try {
-                    byte[] block = new byte[1024];
-                    int read = 0;
-                    while ((read = bis.read(block)) > -1) {
-                        bos.write(block, 0, read);
-                    }
-                    bos.flush();
-                }
-                finally {
-                    org.apache.avalon.excalibur.io.IOUtil.shutdownStream(bis);             
-                }
-                log("Message from stream: " + bodyOs.toString());
-                */
-            } else {
-                log("Unable to add footer to mail " + mail.getName());
-            }
-        } catch (IOException ioe) {
-            throw new MessagingException("Could not read message", ioe);
-        }
-    }
-
-    /**
      * Get and cache the footer text
      *
      * @return the footer text
@@ -178,89 +123,6 @@
                     Util.SUBSTITUTE_ALL);
         }
         return footerHtml;
-    }
-
-    /**
-     * Prepends the content of the MimePart as HTML to the existing footer.
-     * We use the regular expression to inject the footer inside of the body tag appropriately.
-     *
-     * @param part the MimePart to attach
-     *
-     * @throws MessagingException
-     * @throws java.io.IOException
-     */
-    protected void addToHTML(MimePart part) throws MessagingException, IOException {
-//        log("Trying to add footer to " + part.getContent().toString());
-        String content = part.getContent().toString();
-        /* This HTML part may have a closing <BODY> tag.  If so, we
-         * want to insert out footer immediately prior to that tag.
-         */
-        StringSubstitution stringSubstitution = new StringSubstitution("<br />" + getFooterHTML() + "</body></html>");
-        String result = Util.substitute(new Perl5Matcher(), insertPattern, stringSubstitution, content, 1);
-        part.setContent(result, part.getContentType());
-//        log("After adding footer: " + part.getContent().toString());
-    }
-
-    /**
-     * Prepends the content of the MimePart as text to the existing footer
-     *
-     * @param part the MimePart to attach
-     *
-     * @throws MessagingException
-     * @throws IOException
-     */
-    protected void addToText(MimePart part) throws MessagingException, IOException {
-//        log("Trying to add footer to " + part.getContent().toString());
-        String content = part.getContent().toString();
-        if (!content.endsWith("\n")) {
-            content += "\r\n";
-        }
-        content += getFooterText();
-        part.setText(content);
-//        log("After adding footer: " + part.getContent().toString());
-    }
-
-    /**
-     * Attaches a MimePart as an appropriate footer
-     *
-     * @param part the MimePart to attach
-     *
-     * @throws MessagingException
-     * @throws IOException
-     */
-    protected boolean attachFooter(MimePart part) throws MessagingException, IOException {
-//        log("Content type is " + part.getContentType());
-        if (part.isMimeType("text/plain")) {
-            addToText(part);
-            return true;
-        } else if (part.isMimeType("text/html")) {
-            addToHTML(part);
-            return true;
-        } else if (part.isMimeType("multipart/mixed")) {
-            //Find the first body part, and determine what to do then.
-            MimeMultipart multipart = (MimeMultipart)part.getContent();
-            MimeBodyPart firstPart = (MimeBodyPart)multipart.getBodyPart(0);
-            boolean isFooterAttached = attachFooter(firstPart);
-            //We have to do this because of a bug in JavaMail (ref id 4404733)
-            part.setContent(multipart);
-            return isFooterAttached;
-        } else if (part.isMimeType("multipart/alternative")) {
-            MimeMultipart multipart = (MimeMultipart)part.getContent();
-            int count = multipart.getCount();
-//            log("number of alternatives = " + count);
-            boolean isFooterAttached = false;
-            for (int index = 0; index < count; index++) {
-//                log("processing alternative #" + index);
-                MimeBodyPart mimeBodyPart = (MimeBodyPart)multipart.getBodyPart(index);
-                isFooterAttached |= attachFooter(mimeBodyPart);
-            }
-            //We have to do this because of a bug in JavaMail (ref id 4404733)
-            part.setContent(multipart);
-            return isFooterAttached;
-        } else {
-            //Give up... we won't attach the footer to this MimePart
-            return false;
-        }
     }
 
     /**



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org