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]