You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ri...@apache.org on 2006/05/01 11:51:29 UTC

svn commit: r398564 - in /geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet: InternetHeaders.java MimeMessage.java

Author: rickmcguire
Date: Mon May  1 02:51:26 2006
New Revision: 398564

URL: http://svn.apache.org/viewcvs?rev=398564&view=rev
Log:
GERONIMO-1952 Fix setting/updating of the modified and saved flags in MimeMessage. 



Modified:
    geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java
    geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java

Modified: geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java
URL: http://svn.apache.org/viewcvs/geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java?rev=398564&r1=398563&r2=398564&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java (original)
+++ geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/InternetHeaders.java Mon May  1 02:51:26 2006
@@ -37,7 +37,7 @@
 
 /**
  * Class that represents the RFC822 headers associated with a message.
- * 
+ *
  * @version $Rev$ $Date$
  */
 public class InternetHeaders {
@@ -88,7 +88,7 @@
     /**
      * Create a new InternetHeaders initialized by reading headers from the
      * stream.
-     * 
+     *
      * @param in
      *            the RFC822 input stream to load from
      * @throws MessagingException
@@ -101,7 +101,7 @@
     /**
      * Read and parse the supplied stream and add all headers to the current
      * set.
-     * 
+     *
      * @param in
      *            the RFC822 input stream to load from
      * @throws MessagingException
@@ -160,7 +160,10 @@
                     }
                 }
                 // skip LF
-                in.read();
+                c = in.read();
+                if (c == -1) {
+                    break;
+                }
             }
             if (name.length() > 0) {
                 addHeader(name.toString().trim(), value.toString().trim());
@@ -172,7 +175,7 @@
 
     /**
      * Return all the values for the specified header.
-     * 
+     *
      * @param name
      *            the header to return
      * @return the values for that header, or null if the header is not present
@@ -195,7 +198,7 @@
      * Return the values for the specified header as a single String. If the
      * header has more than one value then all values are concatenated together
      * separated by the supplied delimiter.
-     * 
+     *
      * @param name
      *            the header to return
      * @param delimiter
@@ -224,7 +227,7 @@
     /**
      * Set the value of the header to the supplied value; any existing headers
      * are removed.
-     * 
+     *
      * @param name
      *            the name of the header
      * @param value
@@ -238,7 +241,7 @@
 
     /**
      * Add a new value to the header with the supplied name.
-     * 
+     *
      * @param name
      *            the name of the header to add a new value for
      * @param value
@@ -255,7 +258,7 @@
 
     /**
      * Remove all header entries with the supplied name
-     * 
+     *
      * @param name
      *            the header to remove
      */
@@ -266,7 +269,7 @@
 
     /**
      * Return all headers.
-     * 
+     *
      * @return an Enumeration<Header> containing all headers
      */
     public Enumeration getAllHeaders() {
@@ -323,9 +326,9 @@
      * Add an RFC822 header line to the header store. If the line starts with a
      * space or tab (a continuation line), add it to the last header line in the
      * list. Otherwise, append the new header line to the list.
-     * 
+     *
      * Note that RFC822 headers can only contain US-ASCII characters
-     * 
+     *
      * @param line
      *            raw RFC822 header line
      */

Modified: geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java
URL: http://svn.apache.org/viewcvs/geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java?rev=398564&r1=398563&r2=398564&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java (original)
+++ geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/internet/MimeMessage.java Mon May  1 02:51:26 2006
@@ -131,7 +131,9 @@
         super(session);
         headers = new InternetHeaders();
         flags = new Flags();
+        // empty messages are modified, because the content is not there, and require saving before use.
         modified = true;
+        saved = false;
     }
 
     /**
@@ -144,6 +146,10 @@
     public MimeMessage(Session session, InputStream in) throws MessagingException {
         this(session);
         parse(in);
+        // this message is complete, so marked as unmodified.
+        modified = false;
+        // and no saving required
+        saved = true;
     }
 
     /**
@@ -176,6 +182,8 @@
             parse (inData);
             // writing out the source data requires saving it, so we should consider this one saved also.
             saved = true;
+            // this message is complete, so marked as unmodified.
+            modified = false;
         } catch (IOException e) {
             // I'm not sure ByteArrayInput/OutputStream actually throws IOExceptions or not, but the method
             // signatures declare it, so we need to deal with it.  Turning it into a messaging exception
@@ -194,7 +202,11 @@
         super(folder, number);
         headers = new InternetHeaders();
         flags = new Flags();
+        // saving primarly involves updates to the message header.  Since we're taking the header info
+        // from a message store in this context, we mark the message as saved.
         saved = true;
+        // we've not filled in the content yet, so this needs to be marked as modified
+        modified = true;
     }
 
     /**
@@ -208,8 +220,13 @@
     protected MimeMessage(Folder folder, InputStream in, int number) throws MessagingException {
         this(folder, number);
         parse(in);
+        // this message is complete, so marked as unmodified.
+        modified = false;
+        // and no saving required
+        saved = true;
     }
 
+
     /**
      * Create a MimeMessage with the supplied headers and content.
      *
@@ -223,6 +240,8 @@
         this(folder, number);
         this.headers = headers;
         this.content = content;
+        // this message is complete, so marked as unmodified.
+        modified = false;
     }
 
     /**
@@ -1086,14 +1105,19 @@
      * @exception IOException
      */
     public void writeTo(OutputStream out, String[] ignoreHeaders) throws MessagingException, IOException {
+        // make sure everything is saved before we write
         if (!saved) {
             saveChanges();
         }
+
         // write out the headers first
         headers.writeTo(out, ignoreHeaders);
         // add the separater between the headers and the data portion.
         out.write('\r');
         out.write('\n');
+
+        // if the modfied flag, we don't have current content, so the data handler needs to
+        // take care of writing this data out.
         if (modified) {
             dh.writeTo(MimeUtility.encode(out, getEncoding()));
         } else {
@@ -1116,6 +1140,7 @@
                 in.close();
             }
         }
+
         // flush any data we wrote out, but do not close the stream.  That's the caller's duty.
         out.flush();
     }
@@ -1273,6 +1298,7 @@
      * @exception MessagingException
      */
     public void saveChanges() throws MessagingException {
+        // setting modified invalidates the current content.
         modified = true;
         saved = true;
         // update message headers from the content.