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 2011/06/19 11:41:23 UTC

svn commit: r1137319 - in /james/mailbox/trunk: jcr/src/main/java/org/apache/james/mailbox/jcr/ jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/ jpa/src/main/java/org/apache/james/mailbox/jpa/ jpa/src/main/java/org/apache/james/mailbox/jpa/ma...

Author: norman
Date: Sun Jun 19 09:41:23 2011
New Revision: 1137319

URL: http://svn.apache.org/viewvc?rev=1137319&view=rev
Log:
Use a SharedInputStream when create Message instances for append, so getBodyContent() and getHeaderContent() can get called multiple times if needed. See MAILBOX-97

Modified:
    james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
    james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java
    james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
    james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java
    james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
    james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java
    james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java

Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java (original)
+++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java Sun Jun 19 09:41:23 2011
@@ -18,10 +18,10 @@
  ****************************************************************/
 package org.apache.james.mailbox.jcr;
 
-import java.io.InputStream;
 import java.util.Date;
 
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
 
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxSession;
@@ -51,10 +51,13 @@ public class JCRMessageManager extends S
 
 
     @Override
-    protected Message<String> createMessage(Date internalDate, int size, int bodyStartOctet, InputStream header, InputStream body, Flags flags, PropertyBuilder propertyBuilder) throws MailboxException{
-      
+    protected Message<String> createMessage(Date internalDate, int size, int bodyStartOctet, SharedInputStream content, Flags flags, PropertyBuilder propertyBuilder) throws MailboxException{
+        int headerEnd = bodyStartOctet -2;
+        if (headerEnd < 0) {
+            headerEnd = 0;
+        }
         final Message<String> message = new JCRMessage(getMailboxEntity().getMailboxId(), internalDate, 
-                size, flags, header, body, bodyStartOctet, propertyBuilder, log);
+                size, flags, content, bodyStartOctet, propertyBuilder, log);
         return message;
     }
 

Modified: james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java (original)
+++ james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java Sun Jun 19 09:41:23 2011
@@ -18,7 +18,6 @@
  ****************************************************************/
 package org.apache.james.mailbox.jcr.mail.model;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -31,6 +30,8 @@ import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
+import javax.mail.util.SharedByteArrayInputStream;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.BoundedInputStream;
@@ -55,7 +56,7 @@ public class JCRMessage extends Abstract
 
     private Node node;
     private final Logger logger;
-    private InputStream content;
+    private SharedInputStream content;
     private String mediaType;
     private Long textualLineCount;
     private String subType;
@@ -103,7 +104,7 @@ public class JCRMessage extends Abstract
         this.node = node;
     }
     
-    public JCRMessage(String mailboxUUID, Date internalDate, int size, Flags flags, InputStream header, InputStream body,
+    public JCRMessage(String mailboxUUID, Date internalDate, int size, Flags flags, SharedInputStream content,
             int bodyStartOctet,  final PropertyBuilder propertyBuilder, Logger logger) {
         super();
         this.mailboxUUID = mailboxUUID;
@@ -111,7 +112,7 @@ public class JCRMessage extends Abstract
         this.size = size;
         this.logger = logger;
         setFlags(flags);
-        this.content = ResultUtils.toInput(header, body);
+        this.content = content;
        
         this.bodyStartOctet = bodyStartOctet;
         this.textualLineCount = propertyBuilder.getTextualLineCount();
@@ -142,7 +143,7 @@ public class JCRMessage extends Abstract
         this.modSeq = modSeq;
         this.logger = logger;
         try {
-            this.content = new ByteArrayInputStream(IOUtils.toByteArray(ResultUtils.toInput(message)));
+            this.content = new SharedByteArrayInputStream(IOUtils.toByteArray(ResultUtils.toInput(message)));
         } catch (IOException e) {
             throw new MailboxException("Unable to parse message",e);
         }
@@ -690,7 +691,7 @@ public class JCRMessage extends Abstract
                 throw new IOException("Unable to retrieve property " + JcrConstants.JCR_CONTENT, e);
             }
         }
-        return content;
+        return content.newStream(0, -1);
     }
 
     /*

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java Sun Jun 19 09:41:23 2011
@@ -18,10 +18,10 @@
  ****************************************************************/
 package org.apache.james.mailbox.jpa;
 
-import java.io.InputStream;
 import java.util.Date;
 
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
 
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxSession;
@@ -45,10 +45,10 @@ public class JPAMessageManager extends S
     }
     
     @Override
-    protected Message<Long> createMessage(Date internalDate, final int size, int bodyStartOctet, final InputStream header, final InputStream body, 
+    protected Message<Long> createMessage(Date internalDate, final int size, int bodyStartOctet, final SharedInputStream content, 
             final Flags flags, PropertyBuilder propertyBuilder) throws MailboxException{
-       
-        final Message<Long> message = new JPAMessage((JPAMailbox) getMailboxEntity(), internalDate, size, flags, header, body,  bodyStartOctet,  propertyBuilder);
+
+        final Message<Long> message = new JPAMessage((JPAMailbox) getMailboxEntity(), internalDate, size, flags, content,  bodyStartOctet,  propertyBuilder);
         return message;
     }
 

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java Sun Jun 19 09:41:23 2011
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.util.Date;
 
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
 import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -57,12 +58,15 @@ public class JPAMessage extends Abstract
     @Deprecated
     public JPAMessage() {}
 
-    public JPAMessage(JPAMailbox mailbox,Date internalDate, int size, Flags flags, InputStream header,
-            InputStream body, int bodyStartOctet, final PropertyBuilder propertyBuilder) throws MailboxException {
+    public JPAMessage(JPAMailbox mailbox,Date internalDate, int size, Flags flags, SharedInputStream content, int bodyStartOctet, final PropertyBuilder propertyBuilder) throws MailboxException {
         super(mailbox, internalDate, flags, size ,bodyStartOctet, propertyBuilder);
         try {
-            this.body = IOUtils.toByteArray(body);
-            this.header = IOUtils.toByteArray(header);
+            int headerEnd = bodyStartOctet -2;
+            if (headerEnd < 0) {
+                headerEnd = 0;
+            }
+            this.header = IOUtils.toByteArray(content.newStream(0, headerEnd));
+            this.body = IOUtils.toByteArray(content.newStream(getBodyStartOctet(), -1));
 
         } catch (IOException e) {
             throw new MailboxException("Unable to parse message",e);

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java Sun Jun 19 09:41:23 2011
@@ -18,12 +18,13 @@
  ****************************************************************/
 package org.apache.james.mailbox.jpa.mail.model.openjpa;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Date;
 
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
+import javax.mail.util.SharedByteArrayInputStream;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
@@ -32,6 +33,7 @@ import javax.persistence.Table;
 import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
+import org.apache.james.mailbox.store.ResultUtils;
 import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
 import org.apache.openjpa.persistence.Persistent;
@@ -50,22 +52,32 @@ import org.apache.openjpa.persistence.Pe
 @Table(name="JAMES_MAIL")
 public class JPAStreamingMessage extends AbstractJPAMessage {
 
+    @SuppressWarnings("unused")
     @Persistent(optional = false, fetch = FetchType.LAZY)
     @Column(name = "MAIL_BYTES", length = 1048576000, nullable = false)
     private InputStream body;
 
+    @SuppressWarnings("unused")
     @Persistent(optional = false, fetch = FetchType.LAZY)
     @Column(name = "HEADER_BYTES", length = 10485760, nullable = false)
     private InputStream header;
 
+    private SharedInputStream content;
+
     @Deprecated
     public JPAStreamingMessage() {}
 
-    public JPAStreamingMessage(JPAMailbox mailbox, Date internalDate, int size, Flags flags, InputStream header, 
-            InputStream body, int bodyStartOctet,final PropertyBuilder propertyBuilder) throws MailboxException {
+    public JPAStreamingMessage(JPAMailbox mailbox, Date internalDate, int size, Flags flags, SharedInputStream content, int bodyStartOctet,final PropertyBuilder propertyBuilder) throws MailboxException {
         super(mailbox, internalDate, flags, size ,bodyStartOctet, propertyBuilder);
-        this.header = header;
-        this.body = body;
+        this.content = content;
+
+        try {
+            this.header = getHeaderContent();
+            this.body = getBodyContent();
+
+        } catch (IOException e) {
+            throw new MailboxException("Unable to parse message",e);
+        }
     }
 
     /**
@@ -77,8 +89,9 @@ public class JPAStreamingMessage extends
     public JPAStreamingMessage(JPAMailbox mailbox, long uid, long modSeq, Message<?> message) throws MailboxException {
         super(mailbox, uid, modSeq, message);
         try {
-            this.header = new ByteArrayInputStream(IOUtils.toByteArray(message.getHeaderContent()));
-            this.body = new ByteArrayInputStream(IOUtils.toByteArray(message.getBodyContent()));
+            this.content = new SharedByteArrayInputStream(IOUtils.toByteArray(ResultUtils.toInput(message)));
+            this.header = getHeaderContent();
+            this.body = getBodyContent();
         } catch (IOException e) {
             throw new MailboxException("Unable to parse message",e);
         }
@@ -90,7 +103,7 @@ public class JPAStreamingMessage extends
      * @see org.apache.james.mailbox.store.mail.model.Message#getBodyContent()
      */
     public InputStream getBodyContent() throws IOException {
-        return body;
+        return content.newStream(getBodyStartOctet(), -1);
     }
 
     /*
@@ -98,7 +111,11 @@ public class JPAStreamingMessage extends
      * @see org.apache.james.mailbox.store.mail.model.Message#getHeaderContent()
      */
     public InputStream getHeaderContent() throws IOException {
-        return header;
+        int headerEnd = getBodyStartOctet() -2;
+        if (headerEnd < 0) {
+            headerEnd = 0;
+        }
+        return content.newStream(0, headerEnd);
     }
 
 }

Modified: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java (original)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java Sun Jun 19 09:41:23 2011
@@ -19,10 +19,10 @@
 
 package org.apache.james.mailbox.jpa.openjpa;
 
-import java.io.InputStream;
 import java.util.Date;
 
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
 
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.jpa.JPAMessageManager;
@@ -54,11 +54,15 @@ public class OpenJPAMessageManager exten
     }
 
     @Override
-    protected Message<Long> createMessage(Date internalDate, int size, int bodyStartOctet, InputStream header, InputStream body, Flags flags, PropertyBuilder propertyBuilder) throws MailboxException {
+    protected Message<Long> createMessage(Date internalDate, int size, int bodyStartOctet, SharedInputStream content, Flags flags, PropertyBuilder propertyBuilder) throws MailboxException {
         if (useStreaming) {
-            return new JPAStreamingMessage((JPAMailbox) getMailboxEntity(), internalDate, size, flags, header, body, bodyStartOctet,  propertyBuilder);
+            int headerEnd = bodyStartOctet -2;
+            if (headerEnd < 0) {
+                headerEnd = 0;
+            }
+            return new JPAStreamingMessage((JPAMailbox) getMailboxEntity(), internalDate, size, flags, content, bodyStartOctet, propertyBuilder);
         } else {
-            return super.createMessage(internalDate, size, bodyStartOctet, header, body, flags,  propertyBuilder);
+            return super.createMessage(internalDate, size, bodyStartOctet, content, flags,  propertyBuilder);
         }
     }
 

Modified: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java (original)
+++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMessageManager.java Sun Jun 19 09:41:23 2011
@@ -18,10 +18,10 @@
  ****************************************************************/
 package org.apache.james.mailbox.maildir;
 
-import java.io.InputStream;
 import java.util.Date;
 
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
 
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.maildir.mail.model.MaildirMessage;
@@ -43,10 +43,14 @@ public class MaildirMessageManager exten
     
     @Override
     protected Message<Integer> createMessage(Date internalDate,
-            int size, int bodyStartOctet, InputStream header, InputStream body, Flags flags, PropertyBuilder propertyBuilder)
+            int size, int bodyStartOctet, SharedInputStream content, Flags flags, PropertyBuilder propertyBuilder)
             throws MailboxException {
+        int headerEnd = bodyStartOctet -2;
+        if (headerEnd < 0) {
+            headerEnd = 0;
+        }
         final Message<Integer> message = new MaildirMessage(getMailboxEntity(), internalDate, 
-                size, flags, header, body, bodyStartOctet, propertyBuilder);
+                size, flags, content, bodyStartOctet, propertyBuilder);
         return message;
     }
 

Modified: james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java (original)
+++ james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java Sun Jun 19 09:41:23 2011
@@ -18,7 +18,6 @@
  ****************************************************************/
 package org.apache.james.mailbox.maildir.mail.model;
 
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
@@ -26,9 +25,12 @@ import java.util.Date;
 import java.util.List;
 
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
+import javax.mail.util.SharedByteArrayInputStream;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.store.ResultUtils;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.Property;
 import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
@@ -47,8 +49,7 @@ public class MaildirMessage extends Abst
     private long size;
     
     private boolean modified = false;
-    private InputStream header;
-    private InputStream body;
+    private SharedInputStream content;
     
     /**
      * This constructor is called when appending a new message.
@@ -62,11 +63,10 @@ public class MaildirMessage extends Abst
      * @param propertyBuilder
      */
     public MaildirMessage(Mailbox<Integer> mailbox, Date internalDate,
-            int size, Flags flags, InputStream header, InputStream body, int bodyStartOctet, PropertyBuilder propertyBuilder) {
+            int size, Flags flags, SharedInputStream content, int bodyStartOctet, PropertyBuilder propertyBuilder) {
         super(mailbox);
         // Document
-        this.body = body;
-        this.header = header;
+        this.content = content;
         this.bodyStartOctet = bodyStartOctet;
         this.textualLineCount = propertyBuilder.getTextualLineCount();
         this.mediaType = propertyBuilder.getMediaType();
@@ -106,8 +106,7 @@ public class MaildirMessage extends Abst
         this.seen = message.isSeen();
         
         try {
-            this.body = new ByteArrayInputStream(IOUtils.toByteArray(message.getBodyContent()));
-            this.header = new ByteArrayInputStream(IOUtils.toByteArray(message.getHeaderContent()));
+            this.content = new SharedByteArrayInputStream(IOUtils.toByteArray(ResultUtils.toInput(message)));
 
         } catch (IOException e) {
             throw new MailboxException("Parsing of message failed",e);
@@ -148,7 +147,11 @@ public class MaildirMessage extends Abst
      * @see org.apache.james.mailbox.store.mail.model.Message#getHeaderContent()
      */
     public InputStream  getHeaderContent() {
-        return header;
+        int headerEnd = bodyStartOctet -2;
+        if (headerEnd < 0) {
+            headerEnd = 0;
+        }
+        return content.newStream(0, headerEnd);
     }
 
     /* 
@@ -242,7 +245,7 @@ public class MaildirMessage extends Abst
      * @see org.apache.james.mailbox.store.mail.model.Message#getBodyContent()
      */
     public InputStream getBodyContent() throws IOException {
-        return body;
+        return content.newStream(getBodyStartOctet(), -1);
     }
 
     /*

Modified: james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java (original)
+++ james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryStoreMessageManager.java Sun Jun 19 09:41:23 2011
@@ -20,10 +20,10 @@
 package org.apache.james.mailbox.inmemory;
 
 import java.io.IOException;
-import java.io.InputStream;
 import java.util.Date;
 
 import javax.mail.Flags;
+import javax.mail.internet.SharedInputStream;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.MailboxException;
@@ -44,10 +44,14 @@ public class InMemoryStoreMessageManager
 
     @Override
     protected Message<Long> createMessage(Date internalDate, int size, int bodyStartOctet, 
-            InputStream header, InputStream  body, Flags flags,  PropertyBuilder propertyBuilder) throws MailboxException {
+            SharedInputStream content, Flags flags,  PropertyBuilder propertyBuilder) throws MailboxException {
 
+        int headerEnd = bodyStartOctet -2;
+        if (headerEnd < 0) {
+            headerEnd = 0;
+        }
         try {
-            return new SimpleMailboxMembership(internalDate, size, bodyStartOctet,  IOUtils.toByteArray(header), IOUtils.toByteArray(body), flags, propertyBuilder, ((InMemoryMailbox) getMailboxEntity()).getMailboxId());
+            return new SimpleMailboxMembership(internalDate, size, bodyStartOctet,  IOUtils.toByteArray(content.newStream(0, headerEnd)), IOUtils.toByteArray(content.newStream(bodyStartOctet, -1)), flags, propertyBuilder, ((InMemoryMailbox) getMailboxEntity()).getMailboxId());
         } catch (IOException e) {
             throw new MailboxException("Unable to create message", e);
         }

Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1137319&r1=1137318&r2=1137319&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java Sun Jun 19 09:41:23 2011
@@ -19,9 +19,7 @@
 
 package org.apache.james.mailbox.store;
 
-import java.io.ByteArrayInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -36,6 +34,8 @@ import java.util.TreeMap;
 
 import javax.mail.Flags;
 import javax.mail.Flags.Flag;
+import javax.mail.internet.SharedInputStream;
+import javax.mail.util.SharedFileInputStream;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.TeeInputStream;
@@ -177,7 +177,7 @@ public abstract class StoreMessageManage
         TeeInputStream tmpMsgIn = null;
         BodyOffsetInputStream bIn = null;
         FileOutputStream out = null;
-        FileInputStream contentIn = null;
+        SharedFileInputStream contentIn = null;
         
         try {
             // Create a temporary file and copy the message to it. We will work with the file as
@@ -286,11 +286,10 @@ public abstract class StoreMessageManage
             if (bodyStartOctet == -1) {
                 bodyStartOctet = 0;
             }
-            contentIn = new FileInputStream(file);
-            contentIn.skip(bodyStartOctet);
+            contentIn = new SharedFileInputStream(file);
             final int size = (int) file.length();
 
-            final Message<Id> message = createMessage(internalDate, size, bodyStartOctet, new ByteArrayInputStream(header.toString().getBytes("US-ASCII")), contentIn, flags, propertyBuilder);
+            final Message<Id> message = createMessage(internalDate, size, bodyStartOctet, contentIn, flags, propertyBuilder);
             MessageMetaData data = appendMessageToStore(message, mailboxSession);
                        
             Map<Long, MessageMetaData> uids = new HashMap<Long, MessageMetaData>();
@@ -324,14 +323,13 @@ public abstract class StoreMessageManage
      * @param internalDate
      * @param size
      * @param bodyStartOctet
-     * @param headersContent
-     * @param bodyContent
+     * @param content
      * @param flags
      * @return membership
      * @throws MailboxException 
      */
     protected abstract Message<Id> createMessage(Date internalDate, final int size, int bodyStartOctet, 
-            final InputStream headersContent, final InputStream bodyContent, final Flags flags, final PropertyBuilder propertyBuilder) throws MailboxException;
+            final SharedInputStream content, final Flags flags, final PropertyBuilder propertyBuilder) throws MailboxException;
     
     
     public void addListener(MailboxListener listener) throws MailboxException {



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org