MAILBOX-342 CassandraModule.Builder should allow to compose modules

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

Branch: refs/heads/master
Commit: 2901528b2609a6833abddf0adf6e32fff0375e40
Parents: f6fda76
Author: benwa <[email protected]>
Authored: Wed Jul 25 11:21:01 2018 +0700
Committer: benwa <[email protected]>
Committed: Thu Jul 26 13:47:58 2018 +0700

----------------------------------------------------------------------
 .../cassandra/components/CassandraModule.java   | 34 +++++++++++-
 .../init/CassandraModuleComposite.java          | 55 --------------------
 .../versions/CassandraSchemaVersionModule.java  |  5 +-
 .../cassandra/mail/MailboxAggregateModule.java  | 36 +++++++------
 .../cassandra/host/CassandraHostSystem.java     |  9 +---
 .../modules/mailbox/CassandraSessionModule.java |  3 +-
 6 files changed, 56 insertions(+), 86 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2901528b/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 7afb82f..252b6f9 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
@@ -19,6 +19,8 @@
 
 package org.apache.james.backends.cassandra.components;
 
+import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 import java.util.function.Function;
@@ -26,6 +28,7 @@ import java.util.function.Function;
 import com.datastax.driver.core.schemabuilder.Create;
 import com.datastax.driver.core.schemabuilder.CreateType;
 import com.datastax.driver.core.schemabuilder.SchemaBuilder;
+import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
@@ -69,6 +72,24 @@ public interface CassandraModule {
             return new TypeBuilder(this, typeName);
         }
 
+        public Builder module(CassandraModule module) {
+            return modules(ImmutableList.of(module));
+        }
+
+        public Builder modules(Collection<CassandraModule> modules) {
+            tables.addAll(modules.stream()
+                .flatMap(module -> module.moduleTables().stream())
+                .collect(Guavate.toImmutableList()));
+            types.addAll(modules.stream()
+                .flatMap(module -> module.moduleTypes().stream())
+                .collect(Guavate.toImmutableList()));
+            return this;
+        }
+
+        public Builder modules(CassandraModule... modules) {
+            return this.modules(Arrays.asList(modules));
+        }
+
         public Impl build() {
             return new Impl(
                 tables.build(),
@@ -95,7 +116,8 @@ public interface CassandraModule {
         private TableBuilder(Builder originalBuilderReference, String 
tableName) {
             this.originalBuilderReference = originalBuilderReference;
             this.tableName = tableName;
-            comment = Optional.empty();
+            this.comment = Optional.empty();
+            this.options = Optional.empty();
         }
 
         public TableBuilder comment(String comment) {
@@ -153,6 +175,16 @@ public interface CassandraModule {
         return builder().table(tableName);
     }
 
+    static CassandraModule aggregateModules(CassandraModule... modules) {
+        return aggregateModules(Arrays.asList(modules));
+    }
+
+    static CassandraModule aggregateModules(Collection<CassandraModule> 
modules) {
+        return builder()
+            .modules(modules)
+            .build();
+    }
+
     List<CassandraTable> moduleTables();
 
     List<CassandraType> moduleTypes();

http://git-wip-us.apache.org/repos/asf/james-project/blob/2901528b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java
----------------------------------------------------------------------
diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java
deleted file mode 100644
index 38265b0..0000000
--- 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.backends.cassandra.init;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.components.CassandraTable;
-import org.apache.james.backends.cassandra.components.CassandraType;
-
-import com.github.steveash.guavate.Guavate;
-import com.google.common.collect.ImmutableList;
-
-public class CassandraModuleComposite implements CassandraModule {
-
-    private final ImmutableList<CassandraTable> tables;
-    private final ImmutableList<CassandraType> types;
-
-    public CassandraModuleComposite(CassandraModule... modules) {
-        tables = Arrays.stream(modules)
-            .flatMap(module -> module.moduleTables().stream())
-            .collect(Guavate.toImmutableList());
-        types = Arrays.stream(modules)
-            .flatMap(module -> module.moduleTypes().stream())
-            .collect(Guavate.toImmutableList());
-    }
-
-    @Override
-    public List<CassandraTable> moduleTables() {
-        return tables;
-    }
-
-    @Override
-    public List<CassandraType> moduleTypes() {
-        return types;
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/2901528b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionModule.java
----------------------------------------------------------------------
diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionModule.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionModule.java
index acffb8a..18a9837 100644
--- 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionModule.java
+++ 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionModule.java
@@ -27,10 +27,9 @@ import 
org.apache.james.backends.cassandra.versions.table.CassandraSchemaVersion
 
 public interface CassandraSchemaVersionModule {
     CassandraModule MODULE = 
CassandraModule.table(CassandraSchemaVersionTable.TABLE_NAME)
+        .comment("Holds the history of the versions of the schema used.")
         .statement(statement -> statement
             .addPartitionKey(CassandraSchemaVersionTable.KEY, timeuuid())
-            .addClusteringColumn(CassandraSchemaVersionTable.VALUE, cint())
-            .withOptions()
-            .comment("Holds the history of the versions of the schema used."))
+            .addClusteringColumn(CassandraSchemaVersionTable.VALUE, cint()))
         .build();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2901528b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
index d2514cb..841a785 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
@@ -20,7 +20,6 @@
 package org.apache.james.mailbox.cassandra.mail;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.blob.cassandra.CassandraBlobModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule;
@@ -33,23 +32,26 @@ import 
org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
 import 
org.apache.james.mailbox.cassandra.modules.CassandraMailboxRecentsModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
+import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
 
-public class MailboxAggregateModule {
-    public static CassandraModule MODULE = new CassandraModuleComposite(
-        CassandraAclModule.MODULE,
-        CassandraMailboxModule.MODULE,
-        CassandraMessageModule.MODULE,
-        CassandraBlobModule.MODULE,
-        CassandraAttachmentModule.MODULE,
-        CassandraMailboxCounterModule.MODULE,
-        CassandraMailboxRecentsModule.MODULE,
-        CassandraFirstUnseenModule.MODULE,
-        CassandraUidModule.MODULE,
-        CassandraModSeqModule.MODULE,
-        CassandraSubscriptionModule.MODULE,
-        CassandraDeletedMessageModule.MODULE,
-        CassandraAnnotationModule.MODULE,
-        CassandraApplicableFlagsModule.MODULE);
+public interface MailboxAggregateModule {
+    CassandraModule MODULE = CassandraModule.aggregateModules(
+            CassandraAclModule.MODULE,
+            CassandraMailboxModule.MODULE,
+            CassandraMessageModule.MODULE,
+            CassandraBlobModule.MODULE,
+            CassandraAttachmentModule.MODULE,
+            CassandraMailboxCounterModule.MODULE,
+            CassandraMailboxRecentsModule.MODULE,
+            CassandraFirstUnseenModule.MODULE,
+            CassandraUidModule.MODULE,
+            CassandraModSeqModule.MODULE,
+            CassandraSubscriptionModule.MODULE,
+            CassandraDeletedMessageModule.MODULE,
+            CassandraAnnotationModule.MODULE,
+            CassandraApplicableFlagsModule.MODULE);
+
+    CassandraModule MODULE_WITH_QUOTA = 
CassandraModule.aggregateModules(CassandraQuotaModule.MODULE, MODULE);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2901528b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
 
b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
index f914410..aaa1b62 100644
--- 
a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
+++ 
b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
@@ -19,8 +19,6 @@
 package org.apache.james.mpt.imapmailbox.cassandra.host;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
-import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.imap.encode.main.DefaultImapEncoderFactory;
@@ -35,7 +33,6 @@ import 
org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
 import 
org.apache.james.mailbox.cassandra.TestCassandraMailboxSessionMapperFactory;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
 import org.apache.james.mailbox.cassandra.quota.CassandraGlobalMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerDomainMaxQuotaDao;
@@ -68,10 +65,6 @@ public class CassandraHostSystem extends JamesImapHostSystem 
{
         Feature.ANNOTATION_SUPPORT,
         Feature.MOD_SEQ_SEARCH);
 
-    private final CassandraModule mailboxModule = new CassandraModuleComposite(
-            CassandraQuotaModule.MODULE,
-            MailboxAggregateModule.MODULE);
-
     private final Host cassandraHost;
     private CassandraMailboxManager mailboxManager;
     private CassandraCluster cassandra;
@@ -84,7 +77,7 @@ public class CassandraHostSystem extends JamesImapHostSystem {
     @Override
     public void beforeTest() throws Exception {
         super.beforeTest();
-        cassandra = CassandraCluster.create(mailboxModule, cassandraHost);
+        cassandra = 
CassandraCluster.create(MailboxAggregateModule.MODULE_WITH_QUOTA, 
cassandraHost);
         com.datastax.driver.core.Session session = cassandra.getConf();
         CassandraMessageId.Factory messageIdFactory = new 
CassandraMessageId.Factory();
         CassandraMailboxSessionMapperFactory mapperFactory = 
TestCassandraMailboxSessionMapperFactory.forTests(

http://git-wip-us.apache.org/repos/asf/james-project/blob/2901528b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
----------------------------------------------------------------------
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
index 0f27457..b018bdb 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
@@ -26,7 +26,6 @@ import java.util.concurrent.ScheduledExecutorService;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.backends.cassandra.init.CassandraZonedDateTimeModule;
 import 
org.apache.james.backends.cassandra.init.SessionWithInitializedTablesFactory;
 import 
org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
@@ -87,7 +86,7 @@ public class CassandraSessionModule extends AbstractModule {
     @Provides
     @Singleton
     CassandraModule composeDataDefinitions(Set<CassandraModule> modules) {
-        return new CassandraModuleComposite(modules.toArray(new 
CassandraModule[0]));
+        return CassandraModule.aggregateModules(modules);
     }
 
     @Provides


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to