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/08/22 08:22:55 UTC
svn commit: r1160119 - in
/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store:
MimeDescriptorImpl.java ResultHeader.java streaming/FullByteContent.java
streaming/PartContentBuilder.java
Author: norman
Date: Mon Aug 22 06:22:54 2011
New Revision: 1160119
URL: http://svn.apache.org/viewvc?rev=1160119&view=rev
Log:
Allow to access raw message header without parsing it. This will give us some possibilities to improve performance in imap and pop3. See MAILBOX-115
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultHeader.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/FullByteContent.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java?rev=1160119&r1=1160118&r2=1160119&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java Mon Aug 22 06:22:54 2011
@@ -19,8 +19,10 @@
package org.apache.james.mailbox.store;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -28,6 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.TreeMap;
+import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageResult;
import org.apache.james.mailbox.MimeDescriptor;
import org.apache.james.mailbox.store.mail.model.Message;
@@ -44,6 +47,8 @@ import org.apache.james.mime4j.stream.Re
public class MimeDescriptorImpl implements MimeDescriptor {
+ private final static Charset US_ASCII = Charset.forName("US-ASCII");
+
public static MimeDescriptorImpl build(final Message<?> document) throws IOException, MimeException {
final MimeDescriptorImpl result;
final String mediaType = document.getMediaType();
@@ -255,6 +260,7 @@ public class MimeDescriptorImpl implemen
private final String md5;
+
public MimeDescriptorImpl(final long bodyOctets,
final String contentDescription, final String contentId,
final long lines, final String subType, final String type,
@@ -349,4 +355,32 @@ public class MimeDescriptorImpl implemen
public String getContentMD5() {
return md5;
}
+
+ @Override
+ public InputStream getInputStream() throws IOException {
+ StringBuilder sb = new StringBuilder();
+ Iterator<MessageResult.Header> hIt = headers.iterator();
+ while(hIt.hasNext()) {
+ MessageResult.Header header = hIt.next();
+ try {
+ sb.append(header.getName()).append(": " ).append(header.getValue()).append("\r\n");
+ } catch (MailboxException e) {
+ throw new IOException("Unable to read headers", e);
+ }
+ }
+ return new ByteArrayInputStream(sb.toString().getBytes(US_ASCII));
+ }
+
+ @Override
+ public long size() throws MailboxException {
+ long result = 0;
+ for (final Iterator<MessageResult.Header> it = headers.iterator(); it.hasNext();) {
+ final MessageResult.Header header = it.next();
+ if (header != null) {
+ result += header.size();
+ result += 2;
+ }
+ }
+ return result;
+ }
}
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultHeader.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultHeader.java?rev=1160119&r1=1160118&r2=1160119&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultHeader.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultHeader.java Mon Aug 22 06:22:54 2011
@@ -23,24 +23,20 @@
package org.apache.james.mailbox.store;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.channels.Channels;
-import java.nio.channels.WritableByteChannel;
+import java.nio.charset.Charset;
-import org.apache.james.mailbox.InputStreamContent;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageResult;
-public final class ResultHeader implements MessageResult.Header, InputStreamContent {
+public final class ResultHeader implements MessageResult.Header {
private final String name;
private final String value;
private final long size;
-
+ private final static Charset US_ASCII = Charset.forName("US-ASCII");
public ResultHeader(String name, String value) {
this.name = name;
@@ -72,25 +68,6 @@ public final class ResultHeader implemen
return size;
}
- /*
- * (non-Javadoc)
- * @see org.apache.james.mailbox.Content#writeTo(java.nio.channels.WritableByteChannel)
- */
- public void writeTo(WritableByteChannel channel) throws IOException {
- writeAll(channel, ResultUtils.US_ASCII.encode(name));
- ByteBuffer buffer = ByteBuffer
- .wrap(ResultUtils.BYTES_HEADER_FIELD_VALUE_SEP);
- writeAll(channel, buffer);
- writeAll(channel, ResultUtils.US_ASCII.encode(value));
- }
-
- private void writeAll(WritableByteChannel channel, ByteBuffer buffer)
- throws IOException {
- while (channel.write(buffer) > 0) {
- // write more
- }
- }
-
public String toString() {
return "[HEADER " + name + ": " + value + "]";
}
@@ -100,8 +77,6 @@ public final class ResultHeader implemen
* @see org.apache.james.mailbox.InputStreamContent#getInputStream()
*/
public InputStream getInputStream() throws IOException {
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- writeTo(Channels.newChannel(out));
- return new ByteArrayInputStream(out.toByteArray());
+ return new ByteArrayInputStream((name + ": " + value).getBytes(US_ASCII));
}
}
\ No newline at end of file
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/FullByteContent.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/FullByteContent.java?rev=1160119&r1=1160118&r2=1160119&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/FullByteContent.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/FullByteContent.java Mon Aug 22 06:22:54 2011
@@ -28,6 +28,7 @@ import java.util.Iterator;
import java.util.List;
import org.apache.james.mailbox.Content;
+import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageResult;
import org.apache.james.mailbox.MessageResult.Header;
@@ -43,13 +44,13 @@ public class FullByteContent implements
private byte[] body;
private long size;
- public FullByteContent(final byte[] body, final List<MessageResult.Header> headers) throws IOException {
+ public FullByteContent(final byte[] body, final List<MessageResult.Header> headers) throws MailboxException {
this.headers = headers;
this.body = body;
this.size = caculateSize();
}
- protected long caculateSize() throws IOException{
+ protected long caculateSize() throws MailboxException{
long result = body.length;
result += 2;
for (final Iterator<MessageResult.Header> it = headers.iterator(); it.hasNext();) {
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java?rev=1160119&r1=1160118&r2=1160119&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java Mon Aug 22 06:22:54 2011
@@ -27,6 +27,7 @@ import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.james.mailbox.Content;
+import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.MessageResult;
import org.apache.james.mailbox.MessageResult.Header;
import org.apache.james.mailbox.store.ResultHeader;
@@ -128,7 +129,7 @@ public class PartContentBuilder {
}
}
- public Content getFullContent() throws IOException, UnexpectedEOFException, MimeException {
+ public Content getFullContent() throws IOException, UnexpectedEOFException, MimeException, MailboxException {
final List<Header> headers = getMimeHeaders();
final byte[] content = mimeBodyContent();
return new FullByteContent(content, headers);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org