MAILBOX-265 Cassandra Message Mapper should take Body fetch Type into account
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fb4a3ec3 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fb4a3ec3 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fb4a3ec3 Branch: refs/heads/master Commit: fb4a3ec303693d95403118ac9b284d1f61a5b561 Parents: 16cbae9 Author: Benoit Tellier <btell...@linagora.com> Authored: Thu Mar 3 13:47:47 2016 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Fri Mar 4 19:35:24 2016 +0700 ---------------------------------------------------------------------- .../mailbox/cassandra/mail/CassandraMessageMapper.java | 11 +++++++++-- .../cassandra/modules/CassandraMessageModule.java | 4 ++-- .../mailbox/cassandra/table/CassandraMessageTable.java | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/fb4a3ec3/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java index a401b90..7f9bbc4 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java @@ -28,6 +28,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.lte; import static com.datastax.driver.core.querybuilder.QueryBuilder.select; import static com.datastax.driver.core.querybuilder.QueryBuilder.set; import static com.datastax.driver.core.querybuilder.QueryBuilder.update; +import static org.apache.james.mailbox.cassandra.table.CassandraMessageTable.BODY; import static org.apache.james.mailbox.cassandra.table.CassandraMessageTable.BODY_CONTENT; import static org.apache.james.mailbox.cassandra.table.CassandraMessageTable.BODY_OCTECTS; import static org.apache.james.mailbox.cassandra.table.CassandraMessageTable.BODY_START_OCTET; @@ -277,7 +278,7 @@ public class CassandraMessageMapper implements MessageMapper<CassandraId> { SimpleMailboxMessage<CassandraId> message = new SimpleMailboxMessage<>( row.getDate(INTERNAL_DATE), - row.getInt(FULL_CONTENT_OCTETS), + row.getLong(FULL_CONTENT_OCTETS), row.getInt(BODY_START_OCTET), buildContent(row, fetchType), getFlags(row), @@ -469,6 +470,7 @@ public class CassandraMessageMapper implements MessageMapper<CassandraId> { private String[] retrieveFields(FetchType fetchType) { switch (fetchType) { case Body: + return BODY; case Full: return FIELDS; case Headers: @@ -483,10 +485,11 @@ public class CassandraMessageMapper implements MessageMapper<CassandraId> { private SharedByteArrayInputStream buildContent(Row row, FetchType fetchType) { switch (fetchType) { case Full: - case Body: return new SharedByteArrayInputStream(getFullContent(row)); case Headers: return new SharedByteArrayInputStream(getFieldContent(HEADER_CONTENT, row)); + case Body: + return new SharedByteArrayInputStream(getBodyContent(row)); case Metadata: return new SharedByteArrayInputStream(new byte[]{}); default: @@ -498,6 +501,10 @@ public class CassandraMessageMapper implements MessageMapper<CassandraId> { return Bytes.concat(getFieldContent(HEADER_CONTENT, row), getFieldContent(BODY_CONTENT, row)); } + private byte[] getBodyContent(Row row) { + return Bytes.concat(new byte[row.getInt(BODY_START_OCTET)], getFieldContent(BODY_CONTENT, row)); + } + private byte[] getFieldContent(String field, Row row) { byte[] headerContent = new byte[row.getBytes(field).remaining()]; row.getBytes(field).get(headerContent); http://git-wip-us.apache.org/repos/asf/james-project/blob/fb4a3ec3/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java index febfba0..d401782 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java @@ -54,10 +54,10 @@ public class CassandraMessageModule implements CassandraModule { .addClusteringColumn(CassandraMessageTable.IMAP_UID, bigint()) .addColumn(CassandraMessageTable.INTERNAL_DATE, timestamp()) .addColumn(CassandraMessageTable.BODY_START_OCTET, cint()) - .addColumn(CassandraMessageTable.BODY_OCTECTS, cint()) + .addColumn(CassandraMessageTable.BODY_OCTECTS, bigint()) .addColumn(CassandraMessageTable.TEXTUAL_LINE_COUNT, bigint()) .addColumn(CassandraMessageTable.MOD_SEQ, bigint()) - .addColumn(CassandraMessageTable.FULL_CONTENT_OCTETS, cint()) + .addColumn(CassandraMessageTable.FULL_CONTENT_OCTETS, bigint()) .addColumn(CassandraMessageTable.BODY_CONTENT, blob()) .addColumn(CassandraMessageTable.HEADER_CONTENT, blob()) .addColumn(CassandraMessageTable.Flag.ANSWERED, cboolean()) http://git-wip-us.apache.org/repos/asf/james-project/blob/fb4a3ec3/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageTable.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageTable.java index aaf3692..446ca50 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageTable.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageTable.java @@ -41,6 +41,7 @@ public interface CassandraMessageTable { String[] FIELDS = { MAILBOX_ID, IMAP_UID, INTERNAL_DATE, MOD_SEQ, BODY_START_OCTET, FULL_CONTENT_OCTETS, BODY_OCTECTS, Flag.ANSWERED, Flag.DELETED, Flag.DRAFT, Flag.FLAGGED, Flag.RECENT, Flag.SEEN, Flag.USER, Flag.USER_FLAGS, BODY_CONTENT, HEADER_CONTENT, TEXTUAL_LINE_COUNT, PROPERTIES }; String[] METADATA = { MAILBOX_ID, IMAP_UID, INTERNAL_DATE, MOD_SEQ, BODY_START_OCTET, FULL_CONTENT_OCTETS, BODY_OCTECTS, Flag.ANSWERED, Flag.DELETED, Flag.DRAFT, Flag.FLAGGED, Flag.RECENT, Flag.SEEN, Flag.USER, Flag.USER_FLAGS, TEXTUAL_LINE_COUNT, PROPERTIES }; String[] HEADERS = { MAILBOX_ID, IMAP_UID, INTERNAL_DATE, MOD_SEQ, BODY_START_OCTET, FULL_CONTENT_OCTETS, BODY_OCTECTS, Flag.ANSWERED, Flag.DELETED, Flag.DRAFT, Flag.FLAGGED, Flag.RECENT, Flag.SEEN, Flag.USER, Flag.USER_FLAGS, HEADER_CONTENT, TEXTUAL_LINE_COUNT, PROPERTIES }; + String[] BODY = { MAILBOX_ID, IMAP_UID, INTERNAL_DATE, MOD_SEQ, BODY_START_OCTET, FULL_CONTENT_OCTETS, BODY_OCTECTS, Flag.ANSWERED, Flag.DELETED, Flag.DRAFT, Flag.FLAGGED, Flag.RECENT, Flag.SEEN, Flag.USER, Flag.USER_FLAGS, BODY_CONTENT, TEXTUAL_LINE_COUNT, PROPERTIES }; interface Flag { String ANSWERED = "flagAnswered"; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org