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