You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/07/26 07:02:39 UTC
[21/27] james-project git commit: MAILBOX-342 CassandraModule.Builder
should allow to compose modules
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 <bt...@linagora.com>
Authored: Wed Jul 25 11:21:01 2018 +0700
Committer: benwa <bt...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org