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:37 UTC
[19/27] james-project git commit: MAILBOX-342 Introduce a builder for
CassandraModule
MAILBOX-342 Introduce a builder for CassandraModule
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dd7020d9
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dd7020d9
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dd7020d9
Branch: refs/heads/master
Commit: dd7020d974f98c6bb576d40021919f391455a2a7
Parents: 1b27146
Author: benwa <bt...@linagora.com>
Authored: Tue Jul 24 14:31:03 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Thu Jul 26 13:47:39 2018 +0700
----------------------------------------------------------------------
.../cassandra/components/CassandraModule.java | 104 +++++++++++++++++++
1 file changed, 104 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/dd7020d9/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 3655b5a..a082fc1 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,9 +20,113 @@
package org.apache.james.backends.cassandra.components;
import java.util.List;
+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.collect.ImmutableList;
public interface CassandraModule {
+ class Impl implements CassandraModule {
+ private final List<CassandraTable> tables;
+ private final List<CassandraType> types;
+
+ private Impl(List<CassandraTable> tables, List<CassandraType> types) {
+ this.tables = tables;
+ this.types = types;
+ }
+
+ @Override
+ public List<CassandraTable> moduleTables() {
+ return tables;
+ }
+
+ @Override
+ public List<CassandraType> moduleTypes() {
+ return types;
+ }
+ }
+
+ class Builder {
+ private ImmutableList.Builder<CassandraTable> tables;
+ private ImmutableList.Builder<CassandraType> types;
+
+ private Builder() {
+ tables = ImmutableList.builder();
+ types = ImmutableList.builder();
+ }
+
+ public TableBuilder table(String tableName) {
+ return new TableBuilder(this, tableName);
+ }
+
+ public TypeBuilder type(String typeName) {
+ return new TypeBuilder(this, typeName);
+ }
+
+ public Impl build() {
+ return new Impl(
+ tables.build(),
+ types.build());
+ }
+
+ private Builder addTable(CassandraTable table) {
+ tables.add(table);
+ return this;
+ }
+
+ private Builder addType(CassandraType type) {
+ types.add(type);
+ return this;
+ }
+ }
+
+ class TableBuilder {
+ private final Builder originalBuilderReference;
+ private final String tableName;
+
+ private TableBuilder(Builder originalBuilderReference, String tableName) {
+ this.originalBuilderReference = originalBuilderReference;
+ this.tableName = tableName;
+ }
+
+ public Builder statement(Function<Create, Statement> createStatement) {
+ return originalBuilderReference.addTable(
+ new CassandraTable(tableName, createStatement.apply(SchemaBuilder.createTable(tableName))));
+ }
+ }
+
+ class TypeBuilder {
+ private final Builder originalBuilderReference;
+ private final String typeName;
+
+ private TypeBuilder(Builder originalBuilderReference, String typeName) {
+ this.originalBuilderReference = originalBuilderReference;
+ this.typeName = typeName;
+ }
+
+ public Builder statement(Function<CreateType, CreateType> createStatement) {
+ return originalBuilderReference.addType(
+ new CassandraType(typeName, createStatement.apply(
+ SchemaBuilder.createType(typeName))));
+ }
+ }
+
+ static Builder builder() {
+ return new Builder();
+ }
+
+ static TypeBuilder type(String typeName) {
+ return builder().type(typeName);
+ }
+
+ static TableBuilder table(String tableName) {
+ return builder().table(tableName);
+ }
+
List<CassandraTable> moduleTables();
List<CassandraType> moduleTypes();
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org