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

Reply via email to