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 se...@apache.org on 2001/08/01 04:24:57 UTC
cvs commit: jakarta-james/proposals/noparse-mimemessage/java/org/apache/james/core MimeMessageWrapper.java
serge 01/07/31 19:24:57
Modified: proposals/noparse-mimemessage/java/org/apache/james/core
MimeMessageWrapper.java
Log:
Added methods to support writing the header and body to 2 different output streams. Also added saveMessage() call to make sure content changes take effect. Also used isModified() method instead of modified field.
Revision Changes Path
1.4 +64 -13 jakarta-james/proposals/noparse-mimemessage/java/org/apache/james/core/MimeMessageWrapper.java
Index: MimeMessageWrapper.java
===================================================================
RCS file: /home/cvs/jakarta-james/proposals/noparse-mimemessage/java/org/apache/james/core/MimeMessageWrapper.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MimeMessageWrapper.java 2001/06/28 05:14:43 1.3
+++ MimeMessageWrapper.java 2001/08/01 02:24:57 1.4
@@ -49,8 +49,7 @@
//Another thread has already loaded these headers
return;
}
- System.err.println("parsing headers of " + this);
- //new Throwable().printStackTrace();
+ //System.err.println("parsing headers of " + this);
try {
InputStream in = source.getInputStream();
headers = new MailHeaders(in);
@@ -69,8 +68,7 @@
//Another thread has already loaded this message
return;
}
- System.err.println("parsing headers and message of " + this);
- //new Throwable().printStackTrace();
+ //System.err.println("parsing headers and message of " + this);
try {
InputStream in = source.getInputStream();
headers = new MailHeaders(in);
@@ -131,7 +129,7 @@
* Rewritten for optimization purposes
*/
public void writeTo(OutputStream os) throws IOException, MessagingException {
- if (message == null || !modified) {
+ if (message == null || !isModified()) {
//We do not want to instantiate the message... just read from source
// and write to this outputstream
byte[] block = new byte[1024];
@@ -142,40 +140,93 @@
}
in.close();
} else {
+ message.saveChanges();
message.writeTo(os);
}
}
/**
- * Could be rewritten for optimization purposes at some point
+ * Rewritten for optimization purposes
*/
public void writeTo(OutputStream os, String[] ignoreList) throws IOException, MessagingException {
- if (message == null || !modified) {
+ writeTo(os, os, ignoreList);
+ }
+
+ /**
+ * Write
+ */
+ public void writeTo(OutputStream headerOs, OutputStream bodyOs) throws IOException, MessagingException {
+ writeTo(headerOs, bodyOs, new String[0]);
+ }
+
+ public void writeTo(OutputStream headerOs, OutputStream bodyOs, String[] ignoreList) throws IOException, MessagingException {
+ if (message == null || !isModified()) {
//We do not want to instantiate the message... just read from source
// and write to this outputstream
//First handle the headers
InputStream in = source.getInputStream();
InternetHeaders headers = new InternetHeaders(in);
- PrintStream pos = new PrintStream(os);
+ PrintStream pos = new PrintStream(headerOs);
for (Enumeration e = headers.getNonMatchingHeaderLines(ignoreList); e.hasMoreElements(); ) {
String header = (String)e.nextElement();
pos.print(header);
pos.print("\r\n");
- //System.err.println(header);
}
pos.print("\r\n");
- //System.err.println();
pos.flush();
byte[] block = new byte[1024];
int read = 0;
while ((read = in.read(block)) > 0) {
- os.write(block, 0, read);
- //System.err.write(block, 0, read);
+ bodyOs.write(block, 0, read);
}
in.close();
+ } else {
+ writeTo(message, headerOs, bodyOs, ignoreList);
+ }
+ }
+
+ /**
+ * Convenience method to take any MimeMessage and write the headers and body to two
+ * different output streams
+ */
+ public static void writeTo(MimeMessage message, OutputStream headerOs, OutputStream bodyOs) throws IOException, MessagingException {
+ writeTo(message, headerOs, bodyOs, null);
+ }
+
+ /**
+ * Convenience method to take any MimeMessage and write the headers and body to two
+ * different output streams, with an ignore list
+ */
+ public static void writeTo(MimeMessage message, OutputStream headerOs, OutputStream bodyOs, String[] ignoreList) throws IOException, MessagingException {
+ if (message instanceof MimeMessageWrapper) {
+ MimeMessageWrapper wrapper = (MimeMessageWrapper)message;
+ wrapper.writeTo(headerOs, bodyOs, ignoreList);
} else {
- message.writeTo(os, ignoreList);
+ message.saveChanges();
+
+ //Write the headers (minus ignored ones)
+ Enumeration headers = message.getNonMatchingHeaderLines(ignoreList);
+ PrintStream pos = new PrintStream(headerOs);
+ while (headers.hasMoreElements()) {
+ pos.print((String)headers.nextElement());
+ pos.print("\r\n");
+ }
+ pos.flush();
+
+ //Write the message without any headers
+
+ //Get a list of all headers
+ Vector headerNames = new Vector();
+ Enumeration allHeaders = message.getAllHeaders();
+ while (allHeaders.hasMoreElements()) {
+ Header header = (Header)allHeaders.nextElement();
+ headerNames.add(header.getName());
+ }
+ String headerNamesArray[] = (String[])headerNames.toArray(new String[0]);
+
+ //Write message to bodyOs, ignoring all headers (without writing any headers)
+ message.writeTo(bodyOs, headerNamesArray);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org