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 2010/11/18 12:52:14 UTC
svn commit: r1036424 - in /james/imap/trunk:
jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/
jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/
maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/
memory/src/mai...
Author: norman
Date: Thu Nov 18 11:52:13 2010
New Revision: 1036424
URL: http://svn.apache.org/viewvc?rev=1036424&view=rev
Log:
Replace usage of RewindableInputStream with InputStream. See IMAP-230
Removed:
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/RewindableInputStream.java
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java
james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java
james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java
james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java
james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
james/imap/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/model/SimpleMailboxMembership.java
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/MessageSearches.java
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Message.java
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java
james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamFullContent.java
james/imap/trunk/store/src/test/java/org/apache/james/mailbox/store/SimpleMessage.java
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java Thu Nov 18 11:52:13 2010
@@ -44,6 +44,7 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
+import org.apache.james.mailbox.store.streaming.LazySkippingInputStream;
import org.apache.james.mailbox.store.streaming.StreamUtils;
/**
@@ -428,25 +429,6 @@ public class JCRMessage extends Abstract
/*
* (non-Javadoc)
- * @see org.apache.james.mailbox.store.mail.model.AbstractDocument#getRawFullContent()
- */
- protected InputStream getRawFullContent() {
- if (isPersistent()) {
- try {
- //TODO: Maybe we should cache this somehow...
- InputStream contentStream = node.getNode(JcrConstants.JCR_CONTENT).getProperty(JcrConstants.JCR_DATA).getBinary().getStream();
- return contentStream;
- } catch (RepositoryException e) {
- logger.error("Unable to retrieve property " + JcrConstants.JCR_CONTENT, e);
- }
- return null;
- }
- return content;
- }
-
-
- /*
- * (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.model.MailboxMembership#createFlags()
*/
public Flags createFlags() {
@@ -763,4 +745,32 @@ public class JCRMessage extends Abstract
return retValue;
}
+
+ public InputStream getFullContent() throws IOException {
+ if (isPersistent()) {
+ try {
+ //TODO: Maybe we should cache this somehow...
+ InputStream contentStream = node.getNode(JcrConstants.JCR_CONTENT).getProperty(JcrConstants.JCR_DATA).getBinary().getStream();
+ return contentStream;
+ } catch (RepositoryException e) {
+ logger.error("Unable to retrieve property " + JcrConstants.JCR_CONTENT, e);
+ }
+ return null;
+ }
+ return content;
+ }
+
+ public InputStream getBodyContent() throws IOException {
+ if (isPersistent()) {
+ try {
+ //TODO: Maybe we should cache this somehow...
+ InputStream contentStream = node.getNode(JcrConstants.JCR_CONTENT).getProperty(JcrConstants.JCR_DATA).getBinary().getStream();
+ return new LazySkippingInputStream(contentStream, getBodyStartOctet());
+ } catch (RepositoryException e) {
+ logger.error("Unable to retrieve property " + JcrConstants.JCR_CONTENT, e);
+ }
+ return null;
+ }
+ return content;
+ }
}
Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java Thu Nov 18 11:52:13 2010
@@ -32,6 +32,7 @@ import javax.persistence.Lob;
import org.apache.james.mailbox.jpa.mail.model.JPAHeader;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
+import org.apache.james.mailbox.store.streaming.LazySkippingInputStream;
import org.apache.james.mailbox.store.streaming.StreamUtils;
@Entity(name="Message")
@@ -63,11 +64,20 @@ public class JPAMessage extends Abstract
/*
* (non-Javadoc)
- * @see org.apache.james.mailbox.store.mail.model.AbstractDocument#getRawFullContent()
+ * @see org.apache.james.mailbox.store.mail.model.Message#getFullContent()
*/
- protected InputStream getRawFullContent() {
+ public InputStream getFullContent() throws IOException {
return new ByteArrayInputStream(content);
}
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.mailbox.store.mail.model.Message#getBodyContent()
+ */
+ public InputStream getBodyContent() throws IOException {
+ return new ByteArrayInputStream(content, getBodyStartOctet(), (int)getFullContentOctets());
+ }
+
+
}
Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java Thu Nov 18 11:52:13 2010
@@ -31,6 +31,7 @@ import javax.persistence.FetchType;
import org.apache.james.mailbox.jpa.mail.model.JPAHeader;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
+import org.apache.james.mailbox.store.streaming.LazySkippingInputStream;
import org.apache.james.mailbox.store.streaming.StreamUtils;
import org.apache.openjpa.persistence.Persistent;
@@ -42,6 +43,7 @@ import org.apache.openjpa.persistence.Pe
*
* If your DB is not supported by this, use {@link JPAMessage}
*
+ * TODO: Fix me!
*/
@Entity(name="Message")
public class JPAStreamingMessage extends AbstractJPAMessage{
@@ -69,9 +71,13 @@ public class JPAStreamingMessage extends
this.content = new ByteArrayInputStream(StreamUtils.toByteArray(message.getFullContent()));
}
- @Override
- protected InputStream getRawFullContent() {
+ public InputStream getFullContent() throws IOException {
return content;
}
+
+ public InputStream getBodyContent() throws IOException {
+ return new LazySkippingInputStream(content, getBodyStartOctet());
+ }
+
}
Modified: james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java (original)
+++ james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/LazyLoadingMaildirMessage.java Thu Nov 18 11:52:13 2010
@@ -18,6 +18,7 @@
****************************************************************/
package org.apache.james.mailbox.maildir.mail.model;
+import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PushbackInputStream;
@@ -34,7 +35,7 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
import org.apache.james.mailbox.store.streaming.ConfigurableMimeTokenStream;
import org.apache.james.mailbox.store.streaming.CountingInputStream;
-import org.apache.james.mailbox.store.streaming.RewindableInputStream;
+import org.apache.james.mailbox.store.streaming.LazySkippingInputStream;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.descriptor.MaximalBodyDescriptor;
import org.apache.james.mime4j.parser.MimeEntityConfig;
@@ -274,32 +275,17 @@ public class LazyLoadingMaildirMessage e
* (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.model.Message#getFullContent()
*/
- public RewindableInputStream getFullContent() throws IOException {
- return new MyRewindableInputStream(new SharedFileInputStream(messageName.getFile()));
+ public InputStream getFullContent() throws IOException {
+ return new FileInputStream(messageName.getFile());
}
/*
* (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.model.Message#getBodyContent()
*/
- public RewindableInputStream getBodyContent() throws IOException {
+ public InputStream getBodyContent() throws IOException {
parseMessage();
+ return new LazySkippingInputStream(getFullContent(), bodyStartOctet);
- SharedFileInputStream in = new SharedFileInputStream(messageName.getFile());
- return new MyRewindableInputStream(in.newStream(bodyStartOctet, -1));
- }
-
- private final class MyRewindableInputStream extends RewindableInputStream {
-
- protected MyRewindableInputStream(InputStream in) {
- super(in);
-
- }
-
- @Override
- protected void rewindIfNeeded() throws IOException {
- in.reset();
- }
-
}
}
Modified: james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java (original)
+++ james/imap/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java Thu Nov 18 11:52:13 2010
@@ -31,11 +31,9 @@ import org.apache.commons.lang.NotImplem
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
import org.apache.james.mailbox.store.streaming.LazySkippingInputStream;
-import org.apache.james.mailbox.store.streaming.RewindableInputStream;
import org.apache.james.mailbox.store.streaming.StreamUtils;
public class MaildirMessage extends AbstractMaildirMessage {
@@ -248,14 +246,6 @@ public class MaildirMessage extends Abst
/*
* (non-Javadoc)
- * @see org.apache.james.mailbox.store.mail.model.MailboxMembership#getMessage()
- */
- public Message getMessage() {
- return this;
- }
-
- /*
- * (non-Javadoc)
* @see org.apache.james.mailbox.store.mail.model.MailboxMembership#getInternalDate()
*/
public Date getInternalDate() {
@@ -319,30 +309,16 @@ public class MaildirMessage extends Abst
return modified;
}
- public RewindableInputStream getFullContent() throws IOException {
- // TODO Auto-generated method stub
- return new MyRewindableInputStream(rawFullContent);
+ public InputStream getFullContent() throws IOException {
+ return rawFullContent;
}
- public RewindableInputStream getBodyContent() throws IOException {
- return new MyRewindableInputStream(new LazySkippingInputStream(rawFullContent, bodyStartOctet));
+ public InputStream getBodyContent() throws IOException {
+ return new LazySkippingInputStream(rawFullContent, bodyStartOctet);
}
public long getBodyOctets() {
return getFullContentOctets() - bodyStartOctet;
}
-
- private class MyRewindableInputStream extends RewindableInputStream {
-
- protected MyRewindableInputStream(InputStream in) {
- super(in);
- }
-
- @Override
- protected void rewindIfNeeded() throws IOException {
- // do nothing..
- }
-
- }
-
+
}
Modified: james/imap/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/model/SimpleMailboxMembership.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/model/SimpleMailboxMembership.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/model/SimpleMailboxMembership.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/model/SimpleMailboxMembership.java Thu Nov 18 11:52:13 2010
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.inmemor
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.Date;
import java.util.List;
@@ -33,7 +34,6 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.Property;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
import org.apache.james.mailbox.store.streaming.LazySkippingInputStream;
-import org.apache.james.mailbox.store.streaming.RewindableInputStream;
public class SimpleMailboxMembership extends AbstractMailboxMembership<Long> implements Message, Comparable<MailboxMembership<Long>> {
@@ -149,29 +149,16 @@ public class SimpleMailboxMembership ext
recent = false;
}
- public RewindableInputStream getBodyContent() throws IOException {
- return new RewindableInputStream(new LazySkippingInputStream(new ByteArrayInputStream(document),bodyStartOctet)) {
-
- @Override
- protected void rewindIfNeeded() throws IOException {
- in = new LazySkippingInputStream(new ByteArrayInputStream(document),bodyStartOctet);
- }
- };
+ public InputStream getBodyContent() throws IOException {
+ return new ByteArrayInputStream(document,bodyStartOctet, (int) getFullContentOctets());
}
public long getBodyOctets() {
return getFullContentOctets() - bodyStartOctet;
}
- public RewindableInputStream getFullContent() throws IOException {
- return new RewindableInputStream(new ByteArrayInputStream(document)) {
-
- @Override
- protected void rewindIfNeeded() throws IOException {
- in = new ByteArrayInputStream(document);
- }
-
- };
+ public InputStream getFullContent() throws IOException {
+ return new ByteArrayInputStream(document);
}
public long getFullContentOctets() {
Modified: james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/MessageSearches.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/MessageSearches.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/MessageSearches.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/MessageSearches.java Thu Nov 18 11:52:13 2010
@@ -152,7 +152,7 @@ public class MessageSearches {
private boolean bodyContains(String value, MailboxMembership<?> message)
throws IOException, MimeException {
- final InputStream input = ResultUtils.toInput(message);
+ final InputStream input = ResultUtils.toInput(message.getMessage());
final boolean result = isInMessage(value, input, false);
return result;
}
@@ -170,7 +170,7 @@ public class MessageSearches {
private boolean messageContains(String value, MailboxMembership<?> message)
throws IOException, MimeException {
- final InputStream input = ResultUtils.toInput(message);
+ final InputStream input = ResultUtils.toInput(message.getMessage());
final boolean result = isInMessage(value, input, true);
return result;
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java Thu Nov 18 11:52:13 2010
@@ -34,14 +34,14 @@ import javax.swing.text.Document;
import org.apache.james.mailbox.Content;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageResult;
-import org.apache.james.mailbox.MimeDescriptor;
import org.apache.james.mailbox.MessageResult.FetchGroup;
import org.apache.james.mailbox.MessageResult.MimePath;
+import org.apache.james.mailbox.MimeDescriptor;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
import org.apache.james.mailbox.store.streaming.InputStreamContent;
+import org.apache.james.mailbox.store.streaming.InputStreamContent.Type;
import org.apache.james.mailbox.store.streaming.PartContentBuilder;
-import org.apache.james.mailbox.store.streaming.RewindableInputStream;
import org.apache.james.mailbox.util.MessageResultImpl;
import org.apache.james.mime4j.MimeException;
@@ -86,8 +86,7 @@ public class ResultUtils {
* @throws IOException
*/
public static Content createBodyContent(MailboxMembership<?> membership) throws IOException {
- final RewindableInputStream stream = membership.getMessage().getBodyContent();
- final InputStreamContent result = new InputStreamContent(stream);
+ final InputStreamContent result = new InputStreamContent(membership.getMessage(), Type.Body);
return result;
}
@@ -99,9 +98,8 @@ public class ResultUtils {
* @throws IOException
*/
public static Content createFullContent(final MailboxMembership<?> membership) throws IOException {
- final RewindableInputStream stream = membership.getMessage().getFullContent();
- final InputStreamContent results = new InputStreamContent(stream);
- return results;
+ final InputStreamContent result = new InputStreamContent(membership.getMessage(), Type.Full);
+ return result;
}
/**
@@ -215,7 +213,7 @@ public class ResultUtils {
private static PartContentBuilder build(int[] path, final MailboxMembership<?> message)
throws IOException, MimeException {
- final InputStream stream = toInput(message);
+ final InputStream stream = toInput(message.getMessage());
PartContentBuilder result = new PartContentBuilder();
result.parse(stream);
try {
@@ -230,19 +228,6 @@ public class ResultUtils {
}
return result;
}
-
- /**
- * Return an {@link InputStream} which holds the content of the {@link org.apache.james.mailbox.store.mail.model.Message} which is linked in the {@link MailboxMembership}
- *
- * @param membership
- * @return stream
- * @throws IOException
- */
-
- public static InputStream toInput(final MailboxMembership<?> membership) throws IOException {
- final org.apache.james.mailbox.store.mail.model.Message document = membership.getMessage();
- return toInput(document);
- }
/**
@@ -262,7 +247,7 @@ public class ResultUtils {
headersToString.append("\r\n");
}
headersToString.append("\r\n");
- final RewindableInputStream bodyContent = document.getBodyContent();
+ final InputStream bodyContent = document.getBodyContent();
final MessageInputStream stream = new MessageInputStream(headersToString, bodyContent);
return stream;
}
@@ -273,11 +258,10 @@ public class ResultUtils {
private int headerPosition = 0;
public MessageInputStream(final StringBuffer headers,
- final RewindableInputStream bodyContent) throws IOException{
+ final InputStream bodyContent) throws IOException{
super(bodyContent);
this.headers = headers;
- bodyContent.rewind();
}
public int read() throws IOException {
Modified: james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java Thu Nov 18 11:52:13 2010
@@ -18,11 +18,6 @@
****************************************************************/
package org.apache.james.mailbox.store.mail.model;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.james.mailbox.store.streaming.LazySkippingInputStream;
-import org.apache.james.mailbox.store.streaming.RewindableInputStream;
/**
@@ -47,41 +42,7 @@ public abstract class AbstractMessage im
* @return startOctet
*/
protected abstract int getBodyStartOctet();
-
- /*
- * (non-Javadoc)
- * @see org.apache.james.mailbox.store.mail.model.Document#getFullContent()
- */
- public RewindableInputStream getFullContent() throws IOException {
- return new RewindableInputStream(getRawFullContent()) {
-
- @Override
- protected void rewindIfNeeded() throws IOException {
- in = getFullContent();
- }
- };
- }
- /*
- * (non-Javadoc)
- * @see org.apache.james.mailbox.store.mail.model.Document#getBodyContent()
- */
- public RewindableInputStream getBodyContent() throws IOException {
- return new RewindableInputStream(new LazySkippingInputStream(getRawFullContent(), getBodyStartOctet())) {
-
- @Override
- protected void rewindIfNeeded() throws IOException {
- in = new LazySkippingInputStream(getRawFullContent(), getBodyStartOctet());
- }
- };
- }
-
- /**
- * Return the raw {@link InputStream} of the full content. The InputStream must not be read already. So it need to be on start position
- *
- * @return rawFullContent
- */
- protected abstract InputStream getRawFullContent();
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Message.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Message.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Message.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Message.java Thu Nov 18 11:52:13 2010
@@ -19,10 +19,9 @@
package org.apache.james.mailbox.store.mail.model;
import java.io.IOException;
+import java.io.InputStream;
import java.util.List;
-import org.apache.james.mailbox.store.streaming.RewindableInputStream;
-
/**
* A MIME message, consisting of meta-data (including MIME headers)
* plus body content. In the case of multipart documents, this body content
@@ -32,17 +31,23 @@ public interface Message {
/**
- * Gets the full content (including headers) of the document.
+ * Gets the full content (including headers) of the document.
+ *
+ * Be aware that this method need to return a new fresh {@link InputStream}
+ * on every call, which basicly means it need to start at position 0
+ *
* @return fullContent, not null
*/
- public abstract RewindableInputStream getFullContent() throws IOException;
+ public abstract InputStream getFullContent() throws IOException;
/**
- * Gets the body content of the document.
- * Headers are excluded.
+ * Gets the body content of the document. Headers are excluded.
+ *
+ * Be aware that this method need to return a new fresh {@link InputStream}
+ * on every call, which basicly means it need to start at position 0
* @return body, not null
*/
- public abstract RewindableInputStream getBodyContent() throws IOException;
+ public abstract InputStream getBodyContent() throws IOException;
/**
* Gets the top level MIME content media type.
@@ -81,6 +86,7 @@ public interface Message {
/**
* Gets a read-only list of headers.
+ *
* @return unmodifiable list of headers, not null
*/
public abstract List<Header> getHeaders();
@@ -89,6 +95,7 @@ public interface Message {
* Gets a read-only list of meta-data properties.
* For properties with multiple values, this list will contain
* several enteries with the same namespace and local name.
+ *
* @return unmodifiable list of meta-data, not null
*/
public abstract List<Property> getProperties();
Modified: james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java Thu Nov 18 11:52:13 2010
@@ -24,19 +24,23 @@ import java.nio.ByteBuffer;
import java.nio.channels.WritableByteChannel;
import org.apache.james.mailbox.Content;
+import org.apache.james.mailbox.store.mail.model.Message;
/**
* {@link Content} which is stored in a {@link InputStream}
*
*/
public final class InputStreamContent implements Content{
+ private Message m;
+ private Type type;
- private RewindableInputStream in;
- private long size;
-
- public InputStreamContent(RewindableInputStream in) throws IOException{
- this.in = in;
- this.size = in.available();
+ public enum Type {
+ Full,
+ Body
+ }
+ public InputStreamContent(Message m, Type type) throws IOException{
+ this.m = m;
+ this.type = type;
}
/*
@@ -44,7 +48,13 @@ public final class InputStreamContent im
* @see org.apache.james.mailbox.Content#size()
*/
public long size() {
- return size;
+ switch (type) {
+ case Full:
+ return m.getFullContentOctets();
+
+ default:
+ return m.getBodyOctets();
+ }
}
/*
@@ -52,11 +62,16 @@ public final class InputStreamContent im
* @see org.apache.james.mailbox.Content#writeTo(java.nio.channels.WritableByteChannel)
*/
public void writeTo(WritableByteChannel channel) throws IOException {
-
+ InputStream in = null;
try {
- // rewind the stream before write it to the channel
- in.rewind();
-
+ switch (type) {
+ case Full:
+ in = m.getFullContent();
+ break;
+ default:
+ in = m.getBodyContent();
+ break;
+ }
// read all the content of the underlying InputStream in 16384 byte chunks, wrap them
// in a ByteBuffer and finally write the Buffer to the channel
byte[] buf = new byte[16384];
@@ -68,8 +83,9 @@ public final class InputStreamContent im
channel.write(buffer);
}
} finally {
- // close the stream so temporary files could get delete
- in.close();
+ if(in != null) {
+ in.close();
+ }
}
}
Modified: james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamFullContent.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamFullContent.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamFullContent.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamFullContent.java Thu Nov 18 11:52:13 2010
@@ -34,11 +34,11 @@ import org.apache.james.mailbox.MessageR
*/
public class InputStreamFullContent extends AbstractFullContent{
- private final RewindableInputStream in;
+ private final InputStream in;
private long size;
- public InputStreamFullContent(final RewindableInputStream contents, final List<MessageResult.Header> headers) throws IOException{
+ public InputStreamFullContent(final InputStream contents, final List<MessageResult.Header> headers) throws IOException{
super(headers);
this.in = contents;
this.size = caculateSize();
@@ -56,22 +56,23 @@ public class InputStreamFullContent exte
}
@Override
- protected void bodyWriteTo(WritableByteChannel channel) throws IOException {
- // rewind the stream before write it to the channel
- in.rewind();
-
- // read all the content of the underlying InputStream in 16384 byte chunks, wrap them
- // in a ByteBuffer and finally write the Buffer to the channel
- byte[] buf = new byte[16384];
- int i = 0;
- while ((i = in.read(buf)) != -1) {
- ByteBuffer buffer = ByteBuffer.wrap(buf);
- // set the limit of the buffer to the returned bytes
- buffer.limit(i);
- channel.write(buffer);
- }
- }
-
+ protected void bodyWriteTo(WritableByteChannel channel) throws IOException {
+ try {
+ // read all the content of the underlying InputStream in 16384 byte
+ // chunks, wrap them
+ // in a ByteBuffer and finally write the Buffer to the channel
+ byte[] buf = new byte[16384];
+ int i = 0;
+ while ((i = in.read(buf)) != -1) {
+ ByteBuffer buffer = ByteBuffer.wrap(buf);
+ // set the limit of the buffer to the returned bytes
+ buffer.limit(i);
+ channel.write(buffer);
+ }
+ } finally {
+ in.close();
+ }
+ }
@Override
protected long getBodySize() throws IOException{
Modified: james/imap/trunk/store/src/test/java/org/apache/james/mailbox/store/SimpleMessage.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/test/java/org/apache/james/mailbox/store/SimpleMessage.java?rev=1036424&r1=1036423&r2=1036424&view=diff
==============================================================================
--- james/imap/trunk/store/src/test/java/org/apache/james/mailbox/store/SimpleMessage.java (original)
+++ james/imap/trunk/store/src/test/java/org/apache/james/mailbox/store/SimpleMessage.java Thu Nov 18 11:52:13 2010
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.store;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
@@ -29,7 +30,6 @@ import java.util.List;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.Property;
-import org.apache.james.mailbox.store.streaming.RewindableInputStream;
public class SimpleMessage implements Message {
@@ -91,8 +91,8 @@ public class SimpleMessage implements Me
* @throws IOException
* @see org.apache.james.imap.Message.mail.model.Document#getBodyContent()
*/
- public RewindableInputStream getBodyContent() throws IOException {
- return new ByteArrayRewindableInputStream(body);
+ public InputStream getBodyContent() throws IOException {
+ return new ByteArrayInputStream(body);
}
/**
@@ -100,8 +100,8 @@ public class SimpleMessage implements Me
* @return read only buffer, not null
* @throws IOException
*/
- public RewindableInputStream getFullContent() throws IOException {
- return new ByteArrayRewindableInputStream(fullContent);
+ public InputStream getFullContent() throws IOException {
+ return new ByteArrayInputStream(fullContent);
}
/**
@@ -134,18 +134,4 @@ public class SimpleMessage implements Me
public long getFullContentOctets() {
return size;
}
-
- private final class ByteArrayRewindableInputStream extends RewindableInputStream {
-
- private byte[] content;
- public ByteArrayRewindableInputStream(byte[] content) {
- super(new ByteArrayInputStream(content));
- this.content = content;
- }
- @Override
- protected void rewindIfNeeded() throws IOException {
- in = new ByteArrayInputStream(content);
- }
-
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org