I whould like to put it in 2.3 branch also cause we have fixed some bugs in the AddFooter mailet (which i used as template for the abstract class) before which never was fixed ( as i know) in CommandListservFooter. Anyone see problems with this code ?
bye Norman Am Montag, den 12.06.2006, 10:20 +0000 schrieb [EMAIL PROTECTED]: > 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 <br> 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: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > !EXCUBATOR:1,448d41f137021481112643!
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil