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]
