MAILBOX-342 CassandraModule.Builder should enforce comments

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f6fda76d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f6fda76d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f6fda76d

Branch: refs/heads/master
Commit: f6fda76d8d6ac7ad4137a2e020cfe446562ee2c4
Parents: 7ad4f42
Author: benwa <btell...@linagora.com>
Authored: Wed Jul 25 10:57:16 2018 +0700
Committer: benwa <btell...@linagora.com>
Committed: Thu Jul 26 13:47:57 2018 +0700

----------------------------------------------------------------------
 .../cassandra/components/CassandraModule.java   | 33 ++++++++++++++---
 .../backends/cassandra/utils/PaggingTest.java   |  1 +
 .../cassandra/CassandraEventStoreModule.java    | 10 ++---
 .../cassandra/modules/CassandraAclModule.java   | 20 +++++-----
 .../modules/CassandraAnnotationModule.java      | 12 +++---
 .../modules/CassandraApplicableFlagsModule.java | 12 +++---
 .../modules/CassandraAttachmentModule.java      | 39 ++++++++++----------
 .../modules/CassandraDeletedMessageModule.java  | 10 ++---
 .../modules/CassandraFirstUnseenModule.java     | 10 ++---
 .../modules/CassandraMailboxCounterModule.java  | 12 +++---
 .../modules/CassandraMailboxModule.java         | 30 +++++++--------
 .../modules/CassandraMailboxRecentsModule.java  | 12 +++---
 .../modules/CassandraMessageModule.java         | 29 +++++++--------
 .../modules/CassandraModSeqModule.java          | 10 ++---
 .../cassandra/modules/CassandraQuotaModule.java | 34 ++++++++---------
 .../modules/CassandraRegistrationModule.java    |  7 ++--
 .../modules/CassandraSubscriptionModule.java    | 10 ++---
 .../cassandra/modules/CassandraUidModule.java   | 10 ++---
 .../blob/cassandra/CassandraBlobModule.java     | 14 +++----
 .../cassandra/CassandraDomainListModule.java    | 12 +++---
 .../CassandraMailRepositoryUrlModule.java       | 12 +++---
 .../james/rrt/cassandra/CassandraRRTModule.java | 14 +++----
 .../CassandraSieveRepositoryModule.java         | 30 +++++++--------
 .../CassandraUsersRepositoryModule.java         | 11 ++----
 .../cassandra/access/CassandraAccessModule.java | 14 +++----
 .../CassandraNotificationRegistryModule.java    | 14 +++----
 .../vacation/CassandraVacationModule.java       | 14 +++----
 .../CassandraMailRepositoryModule.java          |  9 +++--
 28 files changed, 232 insertions(+), 213 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java
----------------------------------------------------------------------
diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java
index 63e2f89..7afb82f 100644
--- 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java
+++ 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java
@@ -20,12 +20,14 @@
 package org.apache.james.backends.cassandra.components;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.function.Function;
 
-import com.datastax.driver.core.Statement;
 import com.datastax.driver.core.schemabuilder.Create;
 import com.datastax.driver.core.schemabuilder.CreateType;
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 
 public interface CassandraModule {
@@ -87,17 +89,38 @@ public interface CassandraModule {
     class TableBuilder {
         private final Builder originalBuilderReference;
         private final String tableName;
+        private Optional<String> comment;
+        private Optional<Function<Create.Options, Create.Options>> options;
 
         private TableBuilder(Builder originalBuilderReference, String 
tableName) {
             this.originalBuilderReference = originalBuilderReference;
             this.tableName = tableName;
+            comment = Optional.empty();
         }
 
-        public Builder statement(Function<Create, Statement> createStatement) {
+        public TableBuilder comment(String comment) {
+            Preconditions.checkArgument(!Strings.isNullOrEmpty(comment), 
"`comment` can not be null or empty");
+
+            this.comment = Optional.of(comment);
+            return this;
+        }
+
+        public TableBuilder options(Function<Create.Options, Create.Options> 
options) {
+            this.options = Optional.of(options);
+            return this;
+        }
+
+        public Builder statement(Function<Create, Create> toCreateStatement) {
+            Preconditions.checkState(comment.isPresent(), "`comment` is 
compulsory");
+
+            Create createStatement = toCreateStatement.apply(
+                SchemaBuilder.createTable(tableName)
+                    .ifNotExists());
+
             return originalBuilderReference.addTable(
-                new CassandraTable(tableName, createStatement.apply(
-                        SchemaBuilder.createTable(tableName)
-                            .ifNotExists())));
+                new CassandraTable(tableName,
+                    options.orElse(Function.identity())
+                        
.apply(createStatement.withOptions().comment(comment.get()))));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java
----------------------------------------------------------------------
diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java
index 946c338..f9049f9 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java
@@ -56,6 +56,7 @@ public class PaggingTest {
     @BeforeClass
     public static void setUpClass() {
         CassandraModule modules = CassandraModule.table(TABLE_NAME)
+            .comment("Testing table")
             .statement(statement -> statement
                 .addPartitionKey(ID, DataType.timeuuid())
                 .addClusteringColumn(CLUSTERING, DataType.bigint()))

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java
----------------------------------------------------------------------
diff --git 
a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java
 
b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java
index 194a0d4..17c147a 100644
--- 
a/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java
+++ 
b/event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.java
@@ -27,13 +27,13 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraEventStoreModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraEventStoreTable.EVENTS_TABLE)
+        .comment("Store events of a EventSourcing aggregate")
+        .options(options -> options
+            .caching(SchemaBuilder.KeyCaching.ALL,
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             .addPartitionKey(CassandraEventStoreTable.AGGREGATE_ID, 
DataType.varchar())
             .addClusteringColumn(CassandraEventStoreTable.EVENT_ID, 
DataType.cint())
-            .addColumn(CassandraEventStoreTable.EVENT, DataType.text())
-            .withOptions()
-            .comment("Store events of a EventSourcing aggregate")
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+            .addColumn(CassandraEventStoreTable.EVENT, DataType.text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java
index acb2205..abdecab 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java
@@ -34,23 +34,23 @@ public interface CassandraAclModule {
     CassandraModule MODULE = CassandraModule
         .builder()
         .table(CassandraACLTable.TABLE_NAME)
+        .comment("Holds mailbox ACLs")
+        .options(options -> options
+            .caching(SchemaBuilder.KeyCaching.ALL,
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             .addPartitionKey(CassandraACLTable.ID, timeuuid())
             .addColumn(CassandraACLTable.ACL, text())
-            .addColumn(CassandraACLTable.VERSION, bigint())
-            .withOptions()
-            .comment("Holds mailbox ACLs")
+            .addColumn(CassandraACLTable.VERSION, bigint()))
+        .table(CassandraUserMailboxRightsTable.TABLE_NAME)
+        .comment("Denormalisation table. Allow to retrieve non personal 
mailboxIds a user has right on")
+        .options(options -> options
+            .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .table(CassandraUserMailboxRightsTable.TABLE_NAME)
         .statement(statement -> statement
             .addPartitionKey(CassandraUserMailboxRightsTable.USER_NAME, text())
             .addClusteringColumn(CassandraUserMailboxRightsTable.MAILBOX_ID, 
timeuuid())
-            .addColumn(CassandraUserMailboxRightsTable.RIGHTS, text())
-            .withOptions()
-            .compactionOptions(SchemaBuilder.leveledStrategy())
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))
-            .comment("Denormalisation table. Allow to retrieve non personal 
mailboxIds a user has right on"))
+            .addColumn(CassandraUserMailboxRightsTable.RIGHTS, text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java
index 88ccdab..fdd1a52 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java
@@ -30,14 +30,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraAnnotationModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraAnnotationTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraAnnotationTable.MAILBOX_ID, timeuuid())
-            .addClusteringColumn(CassandraAnnotationTable.KEY, text())
-            .addColumn(CassandraAnnotationTable.VALUE, text())
-            .withOptions()
-            .comment("Holds Cassandra mailbox annotations")
+        .comment("Holds Cassandra mailbox annotations")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraAnnotationTable.MAILBOX_ID, timeuuid())
+            .addClusteringColumn(CassandraAnnotationTable.KEY, text())
+            .addColumn(CassandraAnnotationTable.VALUE, text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
index 9dc2721..afc7470 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
@@ -32,14 +32,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraApplicableFlagsModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraApplicableFlagTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraApplicableFlagTable.MAILBOX_ID, 
timeuuid())
-            .addColumn(Flag.USER_FLAGS, set(text()))
-            .withOptions()
-            .comment("Holds flags being used on specific mailboxes. As system 
flags are implicit, this table " +
-                "stores user flags.")
+        .comment("Holds flags being used on specific mailboxes. As system 
flags are implicit, this table " +
+            "stores user flags.")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraApplicableFlagTable.MAILBOX_ID, 
timeuuid())
+            .addColumn(Flag.USER_FLAGS, set(text())))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java
index 8a94f1d..4699cae 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java
@@ -36,44 +36,43 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 public interface CassandraAttachmentModule {
 
     CassandraModule MODULE = 
CassandraModule.table(CassandraAttachmentTable.TABLE_NAME)
+        .comment("Holds attachment for fast attachment retrieval")
         .statement(statement -> statement
             .addPartitionKey(CassandraAttachmentTable.ID, text())
             .addColumn(CassandraAttachmentTable.PAYLOAD, blob())
             .addColumn(CassandraAttachmentTable.TYPE, text())
-            .addColumn(CassandraAttachmentTable.SIZE, bigint())
-            .withOptions()
-            .comment("Holds attachment for fast attachment retrieval"))
+            .addColumn(CassandraAttachmentTable.SIZE, bigint()))
         .table(CassandraAttachmentV2Table.TABLE_NAME)
+        .comment("Holds attachment for fast attachment retrieval. Content of 
messages is stored" +
+            "in `blobs` and `blobparts` tables.")
+        .options(options -> options
+            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .caching(SchemaBuilder.KeyCaching.ALL,
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             .addPartitionKey(CassandraAttachmentV2Table.ID_AS_UUID, uuid())
             .addColumn(CassandraAttachmentV2Table.ID, text())
             .addColumn(CassandraAttachmentV2Table.BLOB_ID, text())
             .addColumn(CassandraAttachmentV2Table.TYPE, text())
-            .addColumn(CassandraAttachmentV2Table.SIZE, bigint())
-            .withOptions()
+            .addColumn(CassandraAttachmentV2Table.SIZE, bigint()))
+        .table(CassandraAttachmentMessageIdTable.TABLE_NAME)
+        .comment("Holds ids of messages owning the attachment")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))
-            .comment("Holds attachment for fast attachment retrieval. Content 
of messages is stored" +
-                "in `blobs` and `blobparts` tables."))
-        .table(CassandraAttachmentMessageIdTable.TABLE_NAME)
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             
.addPartitionKey(CassandraAttachmentMessageIdTable.ATTACHMENT_ID_AS_UUID, 
uuid())
             .addColumn(CassandraAttachmentMessageIdTable.ATTACHMENT_ID, text())
-            .addClusteringColumn(CassandraAttachmentMessageIdTable.MESSAGE_ID, 
text())
-            .withOptions()
+            .addClusteringColumn(CassandraAttachmentMessageIdTable.MESSAGE_ID, 
text()))
+        .table(CassandraAttachmentOwnerTable.TABLE_NAME)
+        .comment("Holds explicit owners of some attachments")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))
-            .comment("Holds ids of messages owning the attachment"))
-        .table(CassandraAttachmentOwnerTable.TABLE_NAME)
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             .addPartitionKey(CassandraAttachmentOwnerTable.ID, uuid())
-            .addClusteringColumn(CassandraAttachmentOwnerTable.OWNER, text())
-            .withOptions()
-            .compactionOptions(SchemaBuilder.leveledStrategy())
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))
-            .comment("Holds explicit owners of some attachments"))
+            .addClusteringColumn(CassandraAttachmentOwnerTable.OWNER, text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java
index 4997417..2bd334b 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java
@@ -31,13 +31,13 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraDeletedMessageModule {
     CassandraModule MODULE = CassandraModule.table(TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(MAILBOX_ID, DataType.timeuuid())
-            .addClusteringColumn(UID, DataType.bigint())
-            .withOptions()
-            .comment("Denormalisation table. Allows to retrieve UID marked as 
DELETED in specific mailboxes.")
+        .comment("Denormalisation table. Allows to retrieve UID marked as 
DELETED in specific mailboxes.")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(MAILBOX_ID, DataType.timeuuid())
+            .addClusteringColumn(UID, DataType.bigint()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java
index 75c1595..ec4a844 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java
@@ -28,14 +28,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraFirstUnseenModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraFirstUnseenTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraFirstUnseenTable.MAILBOX_ID, 
DataType.timeuuid())
-            .addClusteringColumn(CassandraFirstUnseenTable.UID, 
DataType.bigint())
-            .withOptions()
-            .comment("Denormalisation table. Allow to quickly retrieve the 
first UNSEEN UID of a specific mailbox.")
+        .comment("Denormalisation table. Allow to quickly retrieve the first 
UNSEEN UID of a specific mailbox.")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION))
             .clusteringOrder(CassandraFirstUnseenTable.UID, 
SchemaBuilder.Direction.ASC))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraFirstUnseenTable.MAILBOX_ID, 
DataType.timeuuid())
+            .addClusteringColumn(CassandraFirstUnseenTable.UID, 
DataType.bigint()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java
index 46d3798..74661c2 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java
@@ -30,14 +30,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraMailboxCounterModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraMailboxCountersTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraMailboxCountersTable.MAILBOX_ID, 
timeuuid())
-            .addColumn(CassandraMailboxCountersTable.COUNT, counter())
-            .addColumn(CassandraMailboxCountersTable.UNSEEN, counter())
-            .withOptions()
-            .comment("Holds messages count and unseen message count for each 
mailbox.")
+        .comment("Holds messages count and unseen message count for each 
mailbox.")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraMailboxCountersTable.MAILBOX_ID, 
timeuuid())
+            .addColumn(CassandraMailboxCountersTable.COUNT, counter())
+            .addColumn(CassandraMailboxCountersTable.UNSEEN, counter()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
index 5e4e663..d4341aa 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
@@ -38,35 +38,35 @@ public interface CassandraMailboxModule {
             .addColumn(CassandraMailboxTable.MailboxBase.NAMESPACE, text())
             .addColumn(CassandraMailboxTable.MailboxBase.USER, text()))
         .table(CassandraMailboxTable.TABLE_NAME)
+        .comment("Holds the mailboxes information.")
+        .options(options -> options
+            .caching(SchemaBuilder.KeyCaching.ALL,
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             .addPartitionKey(CassandraMailboxTable.ID, timeuuid())
             .addUDTColumn(CassandraMailboxTable.MAILBOX_BASE, 
SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE))
             .addColumn(CassandraMailboxTable.NAME, text())
-            .addColumn(CassandraMailboxTable.UIDVALIDITY, bigint())
-            .withOptions()
-            .comment("Holds the mailboxes information.")
+            .addColumn(CassandraMailboxTable.UIDVALIDITY, bigint()))
+        .table(CassandraMailboxPathTable.TABLE_NAME)
+        .comment("Denormalisation table. Allow to retrieve mailboxes belonging 
to a certain user. This is a " +
+            "LIST optimisation.")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .table(CassandraMailboxPathTable.TABLE_NAME)
         .statement(statement -> statement
             .addUDTPartitionKey(CassandraMailboxPathTable.NAMESPACE_AND_USER, 
SchemaBuilder.frozen(CassandraMailboxTable.MAILBOX_BASE))
             .addClusteringColumn(CassandraMailboxPathTable.MAILBOX_NAME, 
text())
-            .addColumn(CassandraMailboxPathTable.MAILBOX_ID, timeuuid())
-            .withOptions()
-            .comment("Denormalisation table. Allow to retrieve mailboxes 
belonging to a certain user. This is a " +
-                "LIST optimisation.")
+            .addColumn(CassandraMailboxPathTable.MAILBOX_ID, timeuuid()))
+        .table(CassandraMailboxPathV2Table.TABLE_NAME)
+        .comment("Denormalisation table. Allow to retrieve mailboxes belonging 
to a certain user. This is a " +
+            "LIST optimisation.")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .table(CassandraMailboxPathV2Table.TABLE_NAME)
         .statement(statement -> statement
             .addPartitionKey(CassandraMailboxPathV2Table.NAMESPACE, text())
             .addPartitionKey(CassandraMailboxPathV2Table.USER, text())
             .addClusteringColumn(CassandraMailboxPathV2Table.MAILBOX_NAME, 
text())
-            .addColumn(CassandraMailboxPathV2Table.MAILBOX_ID, timeuuid())
-            .withOptions()
-            .comment("Denormalisation table. Allow to retrieve mailboxes 
belonging to a certain user. This is a " +
-                "LIST optimisation.")
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+            .addColumn(CassandraMailboxPathV2Table.MAILBOX_ID, timeuuid()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java
index b79082c..c81f4d0 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java
@@ -30,14 +30,14 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraMailboxRecentsModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraMailboxRecentsTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraMailboxRecentsTable.MAILBOX_ID, 
timeuuid())
-            
.addClusteringColumn(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID, bigint())
-            .withOptions()
-            .comment("Denormalisation table. This table holds for each mailbox 
the messages marked as RECENT. This" +
-                " is a SELECT optimisation.")
+        .comment("Denormalisation table. This table holds for each mailbox the 
messages marked as RECENT. This" +
+            " is a SELECT optimisation.")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraMailboxRecentsTable.MAILBOX_ID, 
timeuuid())
+            
.addClusteringColumn(CassandraMailboxRecentsTable.RECENT_MESSAGE_UID, bigint()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/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 da6dfb0..f3193f5 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
@@ -43,6 +43,11 @@ public interface CassandraMessageModule {
 
     CassandraModule MODULE = CassandraModule.builder()
         .table(CassandraMessageIdTable.TABLE_NAME)
+        .comment("Holds mailbox and flags for each message, lookup by mailbox 
ID + UID")
+        .options(options -> options
+            .compactionOptions(SchemaBuilder.leveledStrategy())
+            .caching(SchemaBuilder.KeyCaching.ALL,
+                SchemaBuilder.rows(CACHED_MESSAGE_ID_ROWS)))
         .statement(statement -> statement
             .addPartitionKey(CassandraMessageIds.MAILBOX_ID, timeuuid())
             .addClusteringColumn(CassandraMessageIds.IMAP_UID, bigint())
@@ -55,13 +60,13 @@ public interface CassandraMessageModule {
             .addColumn(Flag.RECENT, cboolean())
             .addColumn(Flag.SEEN, cboolean())
             .addColumn(Flag.USER, cboolean())
-            .addColumn(Flag.USER_FLAGS, set(text()))
-            .withOptions()
-            .comment("Holds mailbox and flags for each message, lookup by 
mailbox ID + UID")
+            .addColumn(Flag.USER_FLAGS, set(text())))
+        .table(MessageIdToImapUid.TABLE_NAME)
+        .comment("Holds mailbox and flags for each message, lookup by message 
ID")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
-                SchemaBuilder.rows(CACHED_MESSAGE_ID_ROWS)))
-        .table(MessageIdToImapUid.TABLE_NAME)
+                SchemaBuilder.rows(CACHED_IMAP_UID_ROWS)))
         .statement(statement -> statement
             .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid())
             .addClusteringColumn(CassandraMessageIds.MAILBOX_ID, timeuuid())
@@ -74,13 +79,10 @@ public interface CassandraMessageModule {
             .addColumn(Flag.RECENT, cboolean())
             .addColumn(Flag.SEEN, cboolean())
             .addColumn(Flag.USER, cboolean())
-            .addColumn(Flag.USER_FLAGS, set(text()))
-            .withOptions()
-            .comment("Holds mailbox and flags for each message, lookup by 
message ID")
-            .compactionOptions(SchemaBuilder.leveledStrategy())
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                SchemaBuilder.rows(CACHED_IMAP_UID_ROWS)))
+            .addColumn(Flag.USER_FLAGS, set(text())))
         .table(CassandraMessageV2Table.TABLE_NAME)
+        .comment("Holds message metadata, independently of any mailboxes. 
Content of messages is stored " +
+            "in `blobs` and `blobparts` tables.")
         .statement(statement -> statement
             .addPartitionKey(CassandraMessageIds.MESSAGE_ID, timeuuid())
             .addColumn(CassandraMessageV2Table.INTERNAL_DATE, timestamp())
@@ -91,10 +93,7 @@ public interface CassandraMessageModule {
             .addColumn(CassandraMessageV2Table.BODY_CONTENT, text())
             .addColumn(CassandraMessageV2Table.HEADER_CONTENT, text())
             .addUDTListColumn(CassandraMessageV2Table.ATTACHMENTS, 
SchemaBuilder.frozen(CassandraMessageV2Table.ATTACHMENTS))
-            .addUDTListColumn(CassandraMessageV2Table.PROPERTIES, 
SchemaBuilder.frozen(CassandraMessageV2Table.PROPERTIES))
-            .withOptions()
-            .comment("Holds message metadata, independently of any mailboxes. 
Content of messages is stored " +
-                "in `blobs` and `blobparts` tables."))
+            .addUDTListColumn(CassandraMessageV2Table.PROPERTIES, 
SchemaBuilder.frozen(CassandraMessageV2Table.PROPERTIES)))
         .type(CassandraMessageV2Table.PROPERTIES)
         .statement(statement -> statement
             .addColumn(CassandraMessageV2Table.Properties.NAMESPACE, text())

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java
index b8cd359..459a03a 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java
@@ -30,13 +30,13 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraModSeqModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraMessageModseqTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraMessageModseqTable.MAILBOX_ID, 
timeuuid())
-            .addColumn(CassandraMessageModseqTable.NEXT_MODSEQ, bigint())
-            .withOptions()
-            .comment("Holds and is used to generate MODSEQ. A monotic counter 
is implemented on top of this table.")
+        .comment("Holds and is used to generate MODSEQ. A monotic counter is 
implemented on top of this table.")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraMessageModseqTable.MAILBOX_ID, 
timeuuid())
+            .addColumn(CassandraMessageModseqTable.NEXT_MODSEQ, bigint()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
index 59b8bd0..c6c0893 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraQuotaModule.java
@@ -35,39 +35,39 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 public interface CassandraQuotaModule {
     CassandraModule MODULE = CassandraModule.builder()
         .table(CassandraCurrentQuota.TABLE_NAME)
+        .comment("Holds per quota-root current values. Quota-roots defines 
groups of mailboxes which shares quotas limitations.")
+        .options(options -> options
+            .caching(SchemaBuilder.KeyCaching.ALL,
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             .addPartitionKey(CassandraCurrentQuota.QUOTA_ROOT, text())
             .addColumn(CassandraCurrentQuota.MESSAGE_COUNT, counter())
-            .addColumn(CassandraCurrentQuota.STORAGE, counter())
-            .withOptions()
-            .comment("Holds per quota-root current values. Quota-roots defines 
groups of mailboxes which shares quotas limitations.")
+            .addColumn(CassandraCurrentQuota.STORAGE, counter()))
+        .table(CassandraMaxQuota.TABLE_NAME)
+        .comment("Holds per quota-root limitations. Limitations can concern 
the number of messages in a quota-root or the total size of a quota-root.")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .table(CassandraMaxQuota.TABLE_NAME)
         .statement(statement -> statement
             .addPartitionKey(CassandraMaxQuota.QUOTA_ROOT, text())
             .addColumn(CassandraMaxQuota.MESSAGE_COUNT, bigint())
-            .addColumn(CassandraMaxQuota.STORAGE, bigint())
-            .withOptions()
-            .comment("Holds per quota-root limitations. Limitations can 
concern the number of messages in a quota-root or the total size of a 
quota-root.")
+            .addColumn(CassandraMaxQuota.STORAGE, bigint()))
+        .table(CassandraDomainMaxQuota.TABLE_NAME)
+        .comment("Holds per domain limitations. Limitations can concern the 
number of messages in a quota-root or the total size of a quota-root.")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .table(CassandraDomainMaxQuota.TABLE_NAME)
         .statement(statement -> statement
             .addPartitionKey(CassandraDomainMaxQuota.DOMAIN, text())
             .addColumn(CassandraDomainMaxQuota.MESSAGE_COUNT, bigint())
-            .addColumn(CassandraDomainMaxQuota.STORAGE, bigint())
-            .withOptions()
-            .comment("Holds per domain limitations. Limitations can concern 
the number of messages in a quota-root or the total size of a quota-root.")
+            .addColumn(CassandraDomainMaxQuota.STORAGE, bigint()))
+        .table(CassandraGlobalMaxQuota.TABLE_NAME)
+        .comment("Holds defaults limitations definition.")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
-        .table(CassandraGlobalMaxQuota.TABLE_NAME)
         .statement(statement -> statement
             .addPartitionKey(CassandraGlobalMaxQuota.TYPE, text())
-            .addColumn(CassandraGlobalMaxQuota.VALUE, bigint())
-            .withOptions()
-            .comment("Holds defaults limitations definition.")
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+            .addColumn(CassandraGlobalMaxQuota.VALUE, bigint()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java
index 94997c1..2f39dfb 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraRegistrationModule.java
@@ -34,10 +34,11 @@ public interface CassandraRegistrationModule {
             .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.NAME, 
text())
             .addColumn(CassandraMailboxPathRegisterTable.MailboxPath.USER, 
text()))
         .table(CassandraMailboxPathRegisterTable.TABLE_NAME)
+        .comment("Holds node mailboxPath registration for distributed events")
+        .options(options -> options
+            .compactionOptions(SchemaBuilder.dateTieredStrategy()))
         .statement(statement -> statement
             
.addUDTPartitionKey(CassandraMailboxPathRegisterTable.MAILBOX_PATH, 
SchemaBuilder.frozen(CassandraMailboxPathRegisterTable.MAILBOX_PATH))
-            .addClusteringColumn(CassandraMailboxPathRegisterTable.TOPIC, 
text())
-            .withOptions()
-            .compactionOptions(SchemaBuilder.dateTieredStrategy()))
+            .addClusteringColumn(CassandraMailboxPathRegisterTable.TOPIC, 
text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java
index e35e373..eb3cb8b 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java
@@ -31,12 +31,12 @@ public interface CassandraSubscriptionModule {
     int PER_USER_CACHED_SUBSCRIPTIONS = 100;
 
     CassandraModule MODULE = 
CassandraModule.table(CassandraSubscriptionTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraSubscriptionTable.USER, text())
-            .addClusteringColumn(CassandraSubscriptionTable.MAILBOX, text())
-            .withOptions()
-            .comment("Holds per user list of IMAP subscriptions")
+        .comment("Holds per user list of IMAP subscriptions")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 SchemaBuilder.rows(PER_USER_CACHED_SUBSCRIPTIONS)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraSubscriptionTable.USER, text())
+            .addClusteringColumn(CassandraSubscriptionTable.MAILBOX, text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java
index efa3bce..614f10d 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java
@@ -30,13 +30,13 @@ import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
 public interface CassandraUidModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraMessageUidTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraMessageUidTable.MAILBOX_ID, timeuuid())
-            .addColumn(CassandraMessageUidTable.NEXT_UID, bigint())
-            .withOptions()
-            .comment("Holds and is used to generate UID. A monotic counter is 
implemented on top of this table.")
+        .comment("Holds and is used to generate UID. A monotic counter is 
implemented on top of this table.")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.leveledStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraMessageUidTable.MAILBOX_ID, timeuuid())
+            .addColumn(CassandraMessageUidTable.NEXT_UID, bigint()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java
----------------------------------------------------------------------
diff --git 
a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java
 
b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java
index fb3623a..df2424e 100644
--- 
a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java
+++ 
b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java
@@ -27,19 +27,17 @@ public interface CassandraBlobModule {
     CassandraModule MODULE = CassandraModule
         .builder()
         .table(BlobTable.BlobParts.TABLE_NAME)
+        .comment("Holds blob parts composing blobs ." +
+            "Messages` headers and bodies are stored, chunked in blobparts.")
         .statement(statement -> statement
             .addPartitionKey(BlobTable.ID, DataType.text())
             .addClusteringColumn(BlobTable.BlobParts.CHUNK_NUMBER, 
DataType.cint())
-            .addColumn(BlobTable.BlobParts.DATA, DataType.blob())
-            .withOptions()
-            .comment("Holds blob parts composing blobs ." +
-                "Messages` headers and bodies are stored, chunked in 
blobparts."))
+            .addColumn(BlobTable.BlobParts.DATA, DataType.blob()))
         .table(BlobTable.TABLE_NAME)
+        .comment("Holds information for retrieving all blob parts composing 
this blob. " +
+            "Messages` headers and bodies are stored as blobparts.")
         .statement(statement -> statement
             .addPartitionKey(BlobTable.ID, DataType.text())
-            .addClusteringColumn(BlobTable.NUMBER_OF_CHUNK, DataType.cint())
-            .withOptions()
-            .comment("Holds information for retrieving all blob parts 
composing this blob. " +
-                "Messages` headers and bodies are stored as blobparts."))
+            .addClusteringColumn(BlobTable.NUMBER_OF_CHUNK, DataType.cint()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java
index 8d05add..e435a13 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java
@@ -27,13 +27,13 @@ import 
org.apache.james.domainlist.cassandra.tables.CassandraDomainsTable;
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
-public class CassandraDomainListModule {
-    public static final CassandraModule MODULE = 
CassandraModule.table(CassandraDomainsTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraDomainsTable.DOMAIN, text())
-            .withOptions()
-            .comment("Holds domains this James server is operating on.")
+public interface CassandraDomainListModule {
+    CassandraModule MODULE = 
CassandraModule.table(CassandraDomainsTable.TABLE_NAME)
+        .comment("Holds domains this James server is operating on.")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraDomainsTable.DOMAIN, text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
index 7523451..6d7b17b 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
@@ -26,13 +26,13 @@ import 
org.apache.james.backends.cassandra.utils.CassandraConstants;
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
-public class CassandraMailRepositoryUrlModule {
-    public static final CassandraModule MODULE = 
CassandraModule.table(UrlsTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(UrlsTable.URL, text())
-            .withOptions()
-            .comment("Holds the list of available mail repository")
+public interface CassandraMailRepositoryUrlModule {
+    CassandraModule MODULE = CassandraModule.table(UrlsTable.TABLE_NAME)
+        .comment("Holds the list of available mail repository")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(UrlsTable.URL, text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java
index 0970ce1..87a469b 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java
@@ -27,15 +27,15 @@ import 
org.apache.james.rrt.cassandra.tables.CassandraRecipientRewriteTableTable
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
-public class CassandraRRTModule {
-    public static final CassandraModule MODULE = 
CassandraModule.table(CassandraRecipientRewriteTableTable.TABLE_NAME)
+public interface CassandraRRTModule {
+    CassandraModule MODULE = 
CassandraModule.table(CassandraRecipientRewriteTableTable.TABLE_NAME)
+        .comment("Holds address re-writing rules.")
+        .options(options -> options
+            .caching(SchemaBuilder.KeyCaching.ALL,
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             .addPartitionKey(CassandraRecipientRewriteTableTable.USER, text())
             .addClusteringColumn(CassandraRecipientRewriteTableTable.DOMAIN, 
text())
-            .addClusteringColumn(CassandraRecipientRewriteTableTable.MAPPING, 
text())
-            .withOptions()
-            .comment("Holds address re-writing rules.")
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+            .addClusteringColumn(CassandraRecipientRewriteTableTable.MAPPING, 
text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java
index 799e972..0000dab 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java
@@ -36,39 +36,39 @@ public interface CassandraSieveRepositoryModule {
 
     CassandraModule MODULE = CassandraModule.builder()
         .table(CassandraSieveTable.TABLE_NAME)
+        .comment("Holds SIEVE scripts.")
+        .options(options -> options)
         .statement(statement -> statement
             .addPartitionKey(CassandraSieveTable.USER_NAME, text())
             .addClusteringColumn(CassandraSieveTable.SCRIPT_NAME, text())
             .addColumn(CassandraSieveTable.SCRIPT_CONTENT, text())
             .addColumn(CassandraSieveTable.IS_ACTIVE, cboolean())
-            .addColumn(CassandraSieveTable.SIZE, bigint())
-            .withOptions()
-            .comment("Holds SIEVE scripts."))
+            .addColumn(CassandraSieveTable.SIZE, bigint()))
         .table(CassandraSieveSpaceTable.TABLE_NAME)
+        .comment("Holds per user current space occupied by SIEVE scripts.")
+        .options(options -> options)
         .statement(statement -> statement
             .addPartitionKey(CassandraSieveSpaceTable.USER_NAME, text())
-            .addColumn(CassandraSieveSpaceTable.SPACE_USED, counter())
-            .withOptions()
-            .comment("Holds per user current space occupied by SIEVE 
scripts."))
+            .addColumn(CassandraSieveSpaceTable.SPACE_USED, counter()))
         .table(CassandraSieveQuotaTable.TABLE_NAME)
+        .comment("Holds per user size limitations for SIEVE script storage.")
+        .options(options -> options)
         .statement(statement -> statement
             .addPartitionKey(CassandraSieveQuotaTable.USER_NAME, text())
-            .addColumn(CassandraSieveQuotaTable.QUOTA, bigint())
-            .withOptions()
-            .comment("Holds per user size limitations for SIEVE script 
storage."))
+            .addColumn(CassandraSieveQuotaTable.QUOTA, bigint()))
         .table(CassandraSieveClusterQuotaTable.TABLE_NAME)
+        .comment("Holds default size limitations for SIEVE script storage.")
+        .options(options -> options)
         .statement(statement -> statement
             .addPartitionKey(CassandraSieveClusterQuotaTable.NAME, text())
-            .addColumn(CassandraSieveClusterQuotaTable.VALUE, bigint())
-            .withOptions()
-            .comment("Holds default size limitations for SIEVE script 
storage."))
+            .addColumn(CassandraSieveClusterQuotaTable.VALUE, bigint()))
         .table(CassandraSieveActiveTable.TABLE_NAME)
+        .comment("Denormalisation table. Allows per user direct active SIEVE 
script retrieval.")
+        .options(options -> options)
         .statement(statement -> statement
             .addPartitionKey(CassandraSieveActiveTable.USER_NAME, text())
             .addColumn(CassandraSieveActiveTable.SCRIPT_NAME, text())
-            .addColumn(CassandraSieveActiveTable.DATE, timestamp())
-            .withOptions()
-            .comment("Denormalisation table. Allows per user direct active 
SIEVE script retrieval."))
+            .addColumn(CassandraSieveActiveTable.DATE, timestamp()))
         .build();
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
index 473cb02..0f04fb4 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
@@ -24,16 +24,13 @@ import static com.datastax.driver.core.DataType.text;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.user.cassandra.tables.CassandraUserTable;
 
-public class CassandraUsersRepositoryModule {
-
-    public static final CassandraModule MODULE = 
CassandraModule.table(CassandraUserTable.TABLE_NAME)
+public interface CassandraUsersRepositoryModule {
+    CassandraModule MODULE = 
CassandraModule.table(CassandraUserTable.TABLE_NAME)
+        .comment("Holds users of this James server.")
         .statement(statement -> statement
             .addPartitionKey(CassandraUserTable.NAME, text())
             .addColumn(CassandraUserTable.REALNAME, text())
             .addColumn(CassandraUserTable.PASSWORD, text())
-            .addColumn(CassandraUserTable.ALGORITHM, text())
-            .withOptions()
-            .comment("Holds users of this James server."))
+            .addColumn(CassandraUserTable.ALGORITHM, text()))
         .build();
-
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java
 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java
index 6fe4583..f7267fd 100644
--- 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java
+++ 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java
@@ -28,14 +28,14 @@ import 
org.apache.james.jmap.cassandra.access.table.CassandraAccessTokenTable;
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
-public class CassandraAccessModule {
-    public static final CassandraModule MODULE = 
CassandraModule.table(CassandraAccessTokenTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraAccessTokenTable.TOKEN, uuid())
-            .addColumn(CassandraAccessTokenTable.USERNAME, text())
-            .withOptions()
-            .comment("Holds JMAP access token required to process to 
authentication.")
+public interface CassandraAccessModule {
+    CassandraModule MODULE = 
CassandraModule.table(CassandraAccessTokenTable.TABLE_NAME)
+        .comment("Holds JMAP access token required to process to 
authentication.")
+        .options(options -> options
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraAccessTokenTable.TOKEN, uuid())
+            .addColumn(CassandraAccessTokenTable.USERNAME, text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java
 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java
index 0cb2abb..e73e0a1 100644
--- 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java
+++ 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraNotificationRegistryModule.java
@@ -27,15 +27,15 @@ import 
org.apache.james.jmap.cassandra.vacation.tables.CassandraNotificationTabl
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
-public class CassandraNotificationRegistryModule {
-    public static final CassandraModule MODULE = 
CassandraModule.table(CassandraNotificationTable.TABLE_NAME)
-        .statement(statement -> statement
-            .addPartitionKey(CassandraNotificationTable.ACCOUNT_ID, text())
-            .addClusteringColumn(CassandraNotificationTable.RECIPIENT_ID, 
text())
-            .withOptions()
-            .comment("Stores registry of vacation notification being sent.")
+public interface CassandraNotificationRegistryModule {
+    CassandraModule MODULE = 
CassandraModule.table(CassandraNotificationTable.TABLE_NAME)
+        .comment("Stores registry of vacation notification being sent.")
+        .options(options -> options
             .compactionOptions(SchemaBuilder.dateTieredStrategy())
             .caching(SchemaBuilder.KeyCaching.ALL,
                 
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+        .statement(statement -> statement
+            .addPartitionKey(CassandraNotificationTable.ACCOUNT_ID, text())
+            .addClusteringColumn(CassandraNotificationTable.RECIPIENT_ID, 
text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java
 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java
index a55d71a..9fb922b 100644
--- 
a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java
+++ 
b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java
@@ -29,8 +29,12 @@ import 
org.apache.james.jmap.cassandra.vacation.tables.CassandraVacationTable;
 
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
 
-public class CassandraVacationModule {
-    public static final CassandraModule MODULE = 
CassandraModule.table(CassandraVacationTable.TABLE_NAME)
+public interface CassandraVacationModule {
+    CassandraModule MODULE = 
CassandraModule.table(CassandraVacationTable.TABLE_NAME)
+        .comment("Holds vacation definition. Allow one to automatically 
respond to emails with a custom message.")
+        .options(options -> options
+            .caching(SchemaBuilder.KeyCaching.ALL,
+                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
         .statement(statement -> statement
             .addPartitionKey(CassandraVacationTable.ACCOUNT_ID, text())
             .addColumn(CassandraVacationTable.IS_ENABLED, cboolean())
@@ -38,10 +42,6 @@ public class CassandraVacationModule {
             .addUDTColumn(CassandraVacationTable.TO_DATE, 
SchemaBuilder.frozen(CassandraZonedDateTimeModule.ZONED_DATE_TIME))
             .addColumn(CassandraVacationTable.TEXT, text())
             .addColumn(CassandraVacationTable.SUBJECT, text())
-            .addColumn(CassandraVacationTable.HTML, text())
-            .withOptions()
-            .comment("Holds vacation definition. Allow one to automatically 
respond to emails with a custom message.")
-            .caching(SchemaBuilder.KeyCaching.ALL,
-                
SchemaBuilder.rows(CassandraConstants.DEFAULT_CACHED_ROW_PER_PARTITION)))
+            .addColumn(CassandraVacationTable.HTML, text()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f6fda76d/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
----------------------------------------------------------------------
diff --git 
a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
 
b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
index a2b7661..cfbcdf4 100644
--- 
a/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
+++ 
b/server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
@@ -37,14 +37,18 @@ public interface CassandraMailRepositoryModule {
             .addColumn(MailRepositoryTable.HEADER_NAME, text())
             .addColumn(MailRepositoryTable.HEADER_VALUE, text()))
         .table(MailRepositoryTable.COUNT_TABLE)
+        .comment("Projection maintaining per mail repository mail counter")
         .statement(statement -> statement
             .addPartitionKey(MailRepositoryTable.REPOSITORY_NAME, text())
             .addColumn(MailRepositoryTable.COUNT, counter()))
         .table(MailRepositoryTable.KEYS_TABLE_NAME)
+        .comment("Per-mailRepository mail key list")
         .statement(statement -> statement
             .addPartitionKey(MailRepositoryTable.REPOSITORY_NAME, text())
             .addClusteringColumn(MailRepositoryTable.MAIL_KEY, text()))
         .table(MailRepositoryTable.CONTENT_TABLE_NAME)
+        .comment("Stores the mails for a given repository. " +
+            "Content is stored with other blobs")
         .statement(statement -> statement
             .addPartitionKey(MailRepositoryTable.REPOSITORY_NAME, text())
             .addPartitionKey(MailRepositoryTable.MAIL_KEY, text())
@@ -59,9 +63,6 @@ public interface CassandraMailRepositoryModule {
             .addColumn(MailRepositoryTable.REMOTE_HOST, text())
             .addColumn(MailRepositoryTable.REMOTE_ADDR, text())
             .addColumn(MailRepositoryTable.LAST_UPDATED, timestamp())
-            
.addUDTMapColumn(MailRepositoryTable.PER_RECIPIENT_SPECIFIC_HEADERS, text(), 
frozen(MailRepositoryTable.HEADER_TYPE))
-            .withOptions()
-            .comment("Stores the mails for a given repository. " +
-                "Content is stored with other blobs"))
+            
.addUDTMapColumn(MailRepositoryTable.PER_RECIPIENT_SPECIFIC_HEADERS, text(), 
frozen(MailRepositoryTable.HEADER_TYPE)))
         .build();
 }


---------------------------------------------------------------------
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