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