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/13 08:09:36 UTC

svn commit: r413813 - in /james/server/branches/v2.3/src/java/org/apache/james/transport/mailets: AbstractAddFooter.java AddFooter.java CommandListservFooter.java

Author: norman
Date: Mon Jun 12 23:09:36 2006
New Revision: 413813

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

Added:
    james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/AbstractAddFooter.java
      - copied unchanged from r413624, james/server/trunk/src/java/org/apache/james/transport/mailets/AbstractAddFooter.java
Modified:
    james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/AddFooter.java
    james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/CommandListservFooter.java

Modified: james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/AddFooter.java
URL: http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/AddFooter.java?rev=413813&r1=413812&r2=413813&view=diff
==============================================================================
--- james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/AddFooter.java (original)
+++ james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/AddFooter.java Mon Jun 12 23:09:36 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/branches/v2.3/src/java/org/apache/james/transport/mailets/CommandListservFooter.java
URL: http://svn.apache.org/viewvc/james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/CommandListservFooter.java?rev=413813&r1=413812&r2=413813&view=diff
==============================================================================
--- james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/CommandListservFooter.java (original)
+++ james/server/branches/v2.3/src/java/org/apache/james/transport/mailets/CommandListservFooter.java Mon Jun 12 23:09:36 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