Author: bago
Date: Thu Apr 27 02:49:37 2006
New Revision: 397496

URL: http://svn.apache.org/viewcvs?rev=397496&view=rev
Log:
Moved messagesize calculator to MimeMessageUtil, fixed message size in 
MimeMessageWrapper (maybe fix JAMES-466)

Modified:
    james/server/trunk/src/java/org/apache/james/core/MailImpl.java
    
james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java
    james/server/trunk/src/java/org/apache/james/core/MimeMessageUtil.java
    james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java

Modified: james/server/trunk/src/java/org/apache/james/core/MailImpl.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MailImpl.java?rev=397496&r1=397495&r2=397496&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/MailImpl.java (original)
+++ james/server/trunk/src/java/org/apache/james/core/MailImpl.java Thu Apr 27 
02:49:37 2006
@@ -41,7 +41,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
-import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
 
@@ -60,30 +59,6 @@
 public class MailImpl implements Disposable, Mail {
     
     /**
-     * Slow method to calculate the exact size of a message!
-     */
-    private static final class SizeCalculatorOutputStream extends OutputStream 
{
-        long size = 0;
-
-        public void write(int arg0) throws IOException {
-            size++;
-        }
-
-        public long getSize() {
-            return size;
-        }
-
-        public void write(byte[] arg0, int arg1, int arg2) throws IOException {
-            size += arg2;
-        }
-
-        public void write(byte[] arg0) throws IOException {
-            size += arg0.length;
-        }
-    }
-
-
-    /**
      * We hardcode the serialVersionUID so that from James 1.2 on,
      * MailImpl will be deserializable (so your mail doesn't get lost)
      */
@@ -392,53 +367,7 @@
      * @throws MessagingException if a problem occurs while computing the 
message size
      */
     public long getMessageSize() throws MessagingException {
-        return getMessageSize(message);
-    }
-    
-    /**
-     * @return size of full message including headers
-     * 
-     * @throws MessagingException if a problem occours while computing the 
message size
-     */
-    public static long getMessageSize(MimeMessage message) throws 
MessagingException {
-        //If we have a MimeMessageWrapper, then we can ask it for just the
-        //  message size and skip calculating it
-        long size = -1;
-        
-        if (message instanceof MimeMessageWrapper) {
-            MimeMessageWrapper wrapper = (MimeMessageWrapper) message;
-            size = wrapper.getMessageSize();
-        } else if (message instanceof MimeMessageCopyOnWriteProxy) {
-            MimeMessageCopyOnWriteProxy wrapper = 
(MimeMessageCopyOnWriteProxy) message;
-            size = wrapper.getMessageSize();
-        } else {
-            //SK: Should probably eventually store this as a locally
-            //  maintained value (so we don't have to load and reparse
-            //  messages each time).
-            size = message.getSize();
-            if (size != -1) {
-                Enumeration e = message.getAllHeaderLines();
-                if (e.hasMoreElements()) {
-                    size += 2;
-                }
-                while (e.hasMoreElements()) {
-                    // add 2 bytes for the CRLF
-                    size += ((String) e.nextElement()).length()+2;
-                }
-            }
-        }
-        
-        if (size == -1) {
-            SizeCalculatorOutputStream out = new SizeCalculatorOutputStream();
-            try {
-                message.writeTo(out);
-            } catch (IOException e) {
-                // should never happen as SizeCalculator does not actually 
throw IOExceptions.
-                throw new MessagingException("IOException wrapped by 
getMessageSize",e);
-            }
-            size = out.getSize();
-        }
-        return size;
+        return MimeMessageUtil.getMessageSize(message);
     }
     
     /**

Modified: 
james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java?rev=397496&r1=397495&r2=397496&view=diff
==============================================================================
--- 
james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java
 (original)
+++ 
james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java
 Thu Apr 27 02:49:37 2006
@@ -778,8 +778,7 @@
         if (wrapped instanceof MimeMessageWrapper) {
             return ((MimeMessageWrapper) wrapped).getMessageSize();
         } else {
-            // this is already handled by MailImpl.
-            return -1;
+            return MimeMessageUtil.getMessageSize(this);
         }
     }
 

Modified: james/server/trunk/src/java/org/apache/james/core/MimeMessageUtil.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MimeMessageUtil.java?rev=397496&r1=397495&r2=397496&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/MimeMessageUtil.java 
(original)
+++ james/server/trunk/src/java/org/apache/james/core/MimeMessageUtil.java Thu 
Apr 27 02:49:37 2006
@@ -189,4 +189,74 @@
     }
 
 
+    /**
+     * Slow method to calculate the exact size of a message!
+     */
+    private static final class SizeCalculatorOutputStream extends OutputStream 
{
+        long size = 0;
+
+        public void write(int arg0) throws IOException {
+            size++;
+        }
+
+        public long getSize() {
+            return size;
+        }
+
+        public void write(byte[] arg0, int arg1, int arg2) throws IOException {
+            size += arg2;
+        }
+
+        public void write(byte[] arg0) throws IOException {
+            size += arg0.length;
+        }
+    }
+
+    /**
+     * @return size of full message including headers
+     * 
+     * @throws MessagingException if a problem occours while computing the 
message size
+     */
+    public static long getMessageSize(MimeMessage message) throws 
MessagingException {
+        //If we have a MimeMessageWrapper, then we can ask it for just the
+        //  message size and skip calculating it
+        long size = -1;
+        
+        if (message instanceof MimeMessageWrapper) {
+            MimeMessageWrapper wrapper = (MimeMessageWrapper) message;
+            size = wrapper.getMessageSize();
+        } else if (message instanceof MimeMessageCopyOnWriteProxy) {
+            MimeMessageCopyOnWriteProxy wrapper = 
(MimeMessageCopyOnWriteProxy) message;
+            size = wrapper.getMessageSize();
+        } else {
+            //SK: Should probably eventually store this as a locally
+            //  maintained value (so we don't have to load and reparse
+            //  messages each time).
+            size = message.getSize();
+            if (size != -1) {
+                Enumeration e = message.getAllHeaderLines();
+                if (e.hasMoreElements()) {
+                    size += 2;
+                }
+                while (e.hasMoreElements()) {
+                    // add 2 bytes for the CRLF
+                    size += ((String) e.nextElement()).length()+2;
+                }
+            }
+        }
+        
+        if (size == -1) {
+            SizeCalculatorOutputStream out = new SizeCalculatorOutputStream();
+            try {
+                message.writeTo(out);
+            } catch (IOException e) {
+                // should never happen as SizeCalculator does not actually 
throw IOExceptions.
+                throw new MessagingException("IOException wrapped by 
getMessageSize",e);
+            }
+            size = out.getSize();
+        }
+        return size;
+    }
+    
+
 }

Modified: 
james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java?rev=397496&r1=397495&r2=397496&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java 
(original)
+++ james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java 
Thu Apr 27 02:49:37 2006
@@ -319,18 +319,19 @@
     }
 
     /**
-     * Returns size of message, ie headers and content. Current implementation
-     * actually returns number of characters in headers plus number of bytes
-     * in the internal content byte array.
+     * Returns size of message, ie headers and content
      */
     public long getMessageSize() throws MessagingException {
-        try {
-            return source.getMessageSize();
-        } catch (IOException ioe) {
-            throw new MessagingException("Error retrieving message size", ioe);
+        if (!isModified()) {
+            try {
+                return source.getMessageSize();
+            } catch (IOException ioe) {
+                throw new MessagingException("Error retrieving message size", 
ioe);
+            }
+        } else {
+            return MimeMessageUtil.getMessageSize(this);
         }
     }
-    
     
     /**
      * We override all the "headers" access methods to be sure that we



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to