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 ma...@apache.org on 2015/10/29 15:15:52 UTC

svn commit: r1711271 - in /james/project/trunk/backends-common/cassandra/src: main/java/org/apache/james/backends/cassandra/init/ main/java/org/apache/james/backends/cassandra/utils/ main/resources/META-INF/ test/java/org/apache/james/backends/cassandr...

Author: matthieu
Date: Thu Oct 29 14:15:52 2015
New Revision: 1711271

URL: http://svn.apache.org/viewvc?rev=1711271&view=rev
Log:
JAMES-1588 Introduce a Cassandra module aggregator

Added:
    james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java
      - copied, changed from r1711269, james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java
    james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/Collectors.java
      - copied, changed from r1711269, james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java
    james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CollectorsTest.java
Modified:
    james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTableManager.java
    james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java
    james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
    james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java
    james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java
    james/project/trunk/backends-common/cassandra/src/main/resources/META-INF/cassandra-session.xml
    james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterSingleton.java
    james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypeProviderTest.java

Copied: james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java (from r1711269, james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java)
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java?p2=james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java&p1=james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java&r1=1711269&r2=1711271&rev=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java (original)
+++ james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraModuleComposite.java Thu Oct 29 14:15:52 2015
@@ -19,30 +19,46 @@
 
 package org.apache.james.backends.cassandra.init;
 
+import java.util.Arrays;
 import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
 
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.UserType;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
+import org.apache.james.backends.cassandra.components.CassandraIndex;
 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 org.apache.james.backends.cassandra.utils.Collectors;
 
-public class CassandraTypesCreator {
+public class CassandraModuleComposite implements CassandraModule {
+
+    private final ImmutableList<CassandraTable> tables;
+    private final ImmutableList<CassandraIndex> index;
     private final ImmutableList<CassandraType> types;
-    private final Session session;
 
-    public CassandraTypesCreator(List<CassandraModule> modules, Session session) {
-        this.types = ImmutableList.copyOf(modules.stream()
+    public CassandraModuleComposite(CassandraModule... modules) {
+        tables = Arrays.stream(modules)
+            .flatMap(module -> module.moduleTables().stream())
+            .collect(Collectors.toImmutableList());
+        index = Arrays.stream(modules)
+            .flatMap(module -> module.moduleIndex().stream())
+            .collect(Collectors.toImmutableList());
+        types = Arrays.stream(modules)
             .flatMap(module -> module.moduleTypes().stream())
-            .collect(Collectors.toList()));
-        this.session = session;
+            .collect(Collectors.toImmutableList());
+    }
+
+    @Override
+    public List<CassandraTable> moduleTables() {
+        return tables;
     }
 
-    public void initializeTypes() {
-        types.forEach((type) -> session.execute(type.getCreateStatement()));
+    @Override
+    public List<CassandraIndex> moduleIndex() {
+        return index;
     }
 
+    @Override
+    public List<CassandraType> moduleTypes() {
+        return types;
+    }
 }

Modified: james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTableManager.java
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTableManager.java?rev=1711271&r1=1711270&r2=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTableManager.java (original)
+++ james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTableManager.java Thu Oct 29 14:15:52 2015
@@ -19,35 +19,30 @@
 
 package org.apache.james.backends.cassandra.init;
 
-import java.util.List;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
-import com.google.common.collect.ImmutableList;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 
 public class CassandraTableManager {
 
     private final Session session;
-    private final ImmutableList<CassandraModule> modules;
+    private final CassandraModule module;
 
-    public CassandraTableManager(List<CassandraModule> modules, Session session) {
+    public CassandraTableManager(CassandraModule module, Session session) {
         this.session = session;
-        this.modules = ImmutableList.copyOf(modules);
+        this.module = module;
     }
 
     public CassandraTableManager ensureAllTables() {
-        modules.stream()
-            .flatMap(module -> module.moduleTables().stream())
+        module.moduleTables().stream()
             .forEach(table -> session.execute(table.getCreateStatement()));
-        modules.stream()
-            .flatMap(module -> module.moduleIndex().stream())
+        module.moduleIndex().stream()
             .forEach(index -> session.execute(index.getCreateIndexStatement()));
         return this;
     }
 
     public void clearAllTables() {
-        modules.stream()
-            .flatMap(module -> module.moduleTables().stream())
+        module.moduleTables().stream()
             .forEach(table -> clearTable(table.getName()));
     }
 

Modified: james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java?rev=1711271&r1=1711270&r2=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java (original)
+++ james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java Thu Oct 29 14:15:52 2015
@@ -19,14 +19,8 @@
 
 package org.apache.james.backends.cassandra.init;
 
-import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
-
 import com.datastax.driver.core.Session;
-import com.datastax.driver.core.UserType;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.components.CassandraType;
 
@@ -34,10 +28,8 @@ public class CassandraTypesCreator {
     private final ImmutableList<CassandraType> types;
     private final Session session;
 
-    public CassandraTypesCreator(List<CassandraModule> modules, Session session) {
-        this.types = ImmutableList.copyOf(modules.stream()
-            .flatMap(module -> module.moduleTypes().stream())
-            .collect(Collectors.toList()));
+    public CassandraTypesCreator(CassandraModule module, Session session) {
+        this.types = ImmutableList.copyOf(module.moduleTypes());
         this.session = session;
     }
 

Modified: james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java?rev=1711271&r1=1711270&r2=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java (original)
+++ james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java Thu Oct 29 14:15:52 2015
@@ -19,30 +19,31 @@
 
 package org.apache.james.backends.cassandra.init;
 
-import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.UserType;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.components.CassandraType;
+import org.apache.james.backends.cassandra.utils.Collectors;
 
 public class CassandraTypesProvider {
     private final ImmutableMap<String, UserType> userTypes;
 
-    public CassandraTypesProvider(List<CassandraModule> modules, Session session) {
-        userTypes = ImmutableMap.copyOf(modules.stream()
-            .flatMap(module -> module.moduleTypes().stream())
-            .collect(
-                Collectors.toMap(
+    public CassandraTypesProvider(CassandraModule module, Session session) {
+        userTypes = module.moduleTypes()
+            .stream()
+            .collect(Collectors.toImmutableMap(
                     CassandraType::getName,
-                    type -> session.getCluster()
-                    .getMetadata()
-                    .getKeyspace(session.getLoggedKeyspace())
-                    .getUserType(type.getName()))));
+                    type -> getSessionType(session, type)));
+    }
+
+    private UserType getSessionType(Session session, CassandraType type) {
+        return session.getCluster()
+            .getMetadata()
+            .getKeyspace(session.getLoggedKeyspace())
+            .getUserType(type.getName());
     }
 
     public UserType getDefinedUserType(String typeName) {

Modified: james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java?rev=1711271&r1=1711270&r2=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java (original)
+++ james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java Thu Oct 29 14:15:52 2015
@@ -19,8 +19,6 @@
 
 package org.apache.james.backends.cassandra.init;
 
-import java.util.List;
-
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 import org.apache.james.backends.cassandra.components.CassandraModule;
@@ -28,17 +26,17 @@ import org.apache.james.backends.cassand
 public class SessionWithInitializedTablesFactory {
     private final static String DEFAULT_KEYSPACE_NAME = "apache_james";
 
-    private List<CassandraModule> modules;
+    private CassandraModule module;
 
-    public SessionWithInitializedTablesFactory(List<CassandraModule> modules) {
-        this.modules = modules;
+    public SessionWithInitializedTablesFactory(CassandraModule module) {
+        this.module = module;
     }
 
     public Session createSession(Cluster cluster, String keyspace) {
         Session session = cluster.connect(keyspace);
-        new CassandraTypesCreator(modules, session)
+        new CassandraTypesCreator(module, session)
             .initializeTypes();
-        new CassandraTableManager(modules, session)
+        new CassandraTableManager(module, session)
             .ensureAllTables();
         return session;
     }

Modified: james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java?rev=1711271&r1=1711270&r2=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java (original)
+++ james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SpringStaticSessionFactory.java Thu Oct 29 14:15:52 2015
@@ -19,20 +19,18 @@
 
 package org.apache.james.backends.cassandra.init;
 
-import java.util.List;
-
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Session;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 
 public class SpringStaticSessionFactory {
 
-    public static Session createSession(Cluster cluster, String keyspace, List<CassandraModule> modules) {
-        return new SessionWithInitializedTablesFactory(modules).createSession(cluster, keyspace);
+    public static Session createSession(Cluster cluster, String keyspace, CassandraModule module) {
+        return new SessionWithInitializedTablesFactory(module).createSession(cluster, keyspace);
     }
 
-    public static Session createSession(Cluster cluster, List<CassandraModule> modules) {
-        return new SessionWithInitializedTablesFactory(modules).createSession(cluster);
+    public static Session createSession(Cluster cluster, CassandraModule module) {
+        return new SessionWithInitializedTablesFactory(module).createSession(cluster);
     }
 
 }
\ No newline at end of file

Copied: james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/Collectors.java (from r1711269, james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java)
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/Collectors.java?p2=james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/Collectors.java&p1=james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java&r1=1711269&r2=1711271&rev=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java (original)
+++ james/project/trunk/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/Collectors.java Thu Oct 29 14:15:52 2015
@@ -17,32 +17,31 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.backends.cassandra.init;
+package org.apache.james.backends.cassandra.utils;
 
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collectors;
+import java.util.function.Function;
+import java.util.stream.Collector;
 
-import com.datastax.driver.core.Session;
-import com.datastax.driver.core.UserType;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import org.apache.james.backends.cassandra.components.CassandraModule;
-import org.apache.james.backends.cassandra.components.CassandraType;
 
-public class CassandraTypesCreator {
-    private final ImmutableList<CassandraType> types;
-    private final Session session;
+public class Collectors {
 
-    public CassandraTypesCreator(List<CassandraModule> modules, Session session) {
-        this.types = ImmutableList.copyOf(modules.stream()
-            .flatMap(module -> module.moduleTypes().stream())
-            .collect(Collectors.toList()));
-        this.session = session;
+    public static <T> Collector<T, List<T>, ImmutableList<T>> toImmutableList() {
+        return Collector.of(ArrayList::new, List::add, (left, right) -> {
+            left.addAll(right);
+            return left;
+        }, ImmutableList::copyOf);
     }
-
-    public void initializeTypes() {
-        types.forEach((type) -> session.execute(type.getCreateStatement()));
+    
+    public static <T, K, V> Collector<T, ImmutableMap.Builder<K, V>, ImmutableMap<K, V>> toImmutableMap(
+            Function<? super T, ? extends K> keyMapper,
+            Function<? super T, ? extends V> valueMapper) {
+        return Collector.of(ImmutableMap::<K,V>builder,
+                (acc, v) -> acc.put(keyMapper.apply(v), valueMapper.apply(v)),
+                (map1, map2) -> map1.putAll(map2.build()),
+                ImmutableMap.Builder::build);
     }
-
 }

Modified: james/project/trunk/backends-common/cassandra/src/main/resources/META-INF/cassandra-session.xml
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/main/resources/META-INF/cassandra-session.xml?rev=1711271&r1=1711270&r2=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/main/resources/META-INF/cassandra-session.xml (original)
+++ james/project/trunk/backends-common/cassandra/src/main/resources/META-INF/cassandra-session.xml Thu Oct 29 14:15:52 2015
@@ -43,6 +43,12 @@
           class="org.apache.james.mailbox.cassandra.CassandraMailboxModule"
           lazy-init="true"/>
 
+    <bean id="cassandra-module-composite"
+          class="org.apache.james.backends.cassandra.init.CassandraModuleComposite"
+          lazy-init="true">
+        <constructor-arg index="0" ref="cassandra-mailbox-module"/>
+    </bean>
+
     <bean id="cassandra-cluster"
           class="org.apache.james.backends.cassandra.init.ClusterFactory"
           factory-method="createClusterForSingleServerWithoutPassWord"
@@ -66,21 +72,13 @@
           lazy-init="true">
         <constructor-arg index="0" ref="cassandra-cluster-initialized"/>
         <constructor-arg index="1" value="${cassandra.keyspace}"/>
-        <constructor-arg index="2">
-            <list>
-                <ref bean="cassandra-mailbox-module"/>
-            </list>
-        </constructor-arg>
+        <constructor-arg index="2" ref="cassandra-module-composite"/>
     </bean>
 
     <bean id="cassandra-type-provider"
           class="org.apache.james.backends.cassandra.init.CassandraTypesProvider"
           lazy-init="true">
-        <constructor-arg index="0">
-            <list>
-                <ref bean="cassandra-mailbox-module"/>
-            </list>
-        </constructor-arg>
+        <constructor-arg index="0" ref="cassandra-module-composite"/>
         <constructor-arg index="1" ref="cassandra-session"/>
     </bean>
 

Modified: james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterSingleton.java
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterSingleton.java?rev=1711271&r1=1711270&r2=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterSingleton.java (original)
+++ james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterSingleton.java Thu Oct 29 14:15:52 2015
@@ -33,8 +33,6 @@ import org.cassandraunit.utils.EmbeddedC
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Arrays;
-import java.util.List;
 import java.util.Optional;
 
 public final class CassandraClusterSingleton {
@@ -48,25 +46,25 @@ public final class CassandraClusterSingl
 
     private static final Logger LOG = LoggerFactory.getLogger(CassandraClusterSingleton.class);
     private static CassandraClusterSingleton cluster = null;
-    private final List<CassandraModule> modules;
+    private final CassandraModule module;
     private Session session;
     private CassandraTypesProvider typesProvider;
 
     public static synchronized CassandraClusterSingleton create(CassandraModule module) throws RuntimeException {
         LOG.info("Retrieving cluster instance.");
         if (cluster == null) {
-            cluster = new CassandraClusterSingleton(Arrays.asList(module));
+            cluster = new CassandraClusterSingleton(module);
         }
         return cluster;
     }
 
-    private CassandraClusterSingleton(List<CassandraModule> modules) throws RuntimeException {
-        this.modules = modules;
+    private CassandraClusterSingleton(CassandraModule module) throws RuntimeException {
+        this.module = module;
         try {
             EmbeddedCassandraServerHelper.startEmbeddedCassandra();
             session = new FunctionRunnerWithRetry(MAX_RETRY)
                 .executeAndRetrieveObject(CassandraClusterSingleton.this::tryInitializeSession);
-            typesProvider = new CassandraTypesProvider(modules, session);
+            typesProvider = new CassandraTypesProvider(module, session);
         } catch(Exception exception) {
             Throwables.propagate(exception);
         }
@@ -77,11 +75,11 @@ public final class CassandraClusterSingl
     }
 
     public void ensureAllTables() {
-        new CassandraTableManager(modules, session).ensureAllTables();
+        new CassandraTableManager(module, session).ensureAllTables();
     }
 
     public void clearAllTables() {
-        new CassandraTableManager(modules, session).clearAllTables();
+        new CassandraTableManager(module, session).clearAllTables();
     }
 
     private Optional<Session> tryInitializeSession() {
@@ -89,7 +87,7 @@ public final class CassandraClusterSingl
             Cluster cluster = ClusterFactory.createClusterForSingleServerWithoutPassWord(CLUSTER_IP, CLUSTER_PORT_TEST);
             Cluster clusterWithInitializedKeyspace = ClusterWithKeyspaceCreatedFactory
                 .clusterWithInitializedKeyspace(cluster, KEYSPACE_NAME, REPLICATION_FACTOR);
-            return Optional.of(new SessionWithInitializedTablesFactory(modules).createSession(clusterWithInitializedKeyspace, KEYSPACE_NAME));
+            return Optional.of(new SessionWithInitializedTablesFactory(module).createSession(clusterWithInitializedKeyspace, KEYSPACE_NAME));
         } catch (NoHostAvailableException exception) {
             sleep(SLEEP_BEFORE_RETRY);
             return Optional.empty();

Modified: james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypeProviderTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypeProviderTest.java?rev=1711271&r1=1711270&r2=1711271&view=diff
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypeProviderTest.java (original)
+++ james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypeProviderTest.java Thu Oct 29 14:15:52 2015
@@ -33,7 +33,6 @@ import org.apache.james.backends.cassand
 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 org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -82,15 +81,15 @@ public class CassandraTypeProviderTest {
     @Test
     public void initializeTypesShouldCreateTheTypes() {
         deleteMailboxBaseType();
-        new CassandraTypesCreator(Arrays.asList(module), cassandra.getConf()).initializeTypes();
-        CassandraTypesProvider cassandraTypesProviderTest = new CassandraTypesProvider(Arrays.asList(module), cassandra.getConf());
+        new CassandraTypesCreator(module, cassandra.getConf()).initializeTypes();
+        CassandraTypesProvider cassandraTypesProviderTest = new CassandraTypesProvider(module, cassandra.getConf());
         assertThat(cassandraTypesProviderTest.getDefinedUserType(TYPE_NAME))
             .isNotNull();
     }
 
     @Test
     public void initializeTypesShouldNotFailIfCalledTwice() {
-        new CassandraTypesProvider(Arrays.asList(module), cassandra.getConf());
+        new CassandraTypesProvider(module, cassandra.getConf());
         assertThat(cassandra.getTypesProvider().getDefinedUserType(TYPE_NAME))
             .isNotNull();
     }

Added: james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CollectorsTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CollectorsTest.java?rev=1711271&view=auto
==============================================================================
--- james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CollectorsTest.java (added)
+++ james/project/trunk/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CollectorsTest.java Thu Oct 29 14:15:52 2015
@@ -0,0 +1,89 @@
+/****************************************************************
+ * 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.utils;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.data.MapEntry.entry;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+public class CollectorsTest {
+    @Test
+    public void immutableListCollectorShouldReturnEmptyImmutableListWhenEmptyStream() {
+        String[] data = {};
+        List<String> actual = Arrays.stream(data)
+            .collect(Collectors.toImmutableList());
+        assertThat(actual).isInstanceOf(ImmutableList.class);
+        assertThat(actual).isEmpty();
+    }
+    
+    @Test
+    public void immutableListCollectorShouldReturnImmutableListWhenOneElementStream() {
+        String[] data = {"a"};
+        List<String> actual = Arrays.stream(data)
+            .collect(Collectors.toImmutableList());
+        assertThat(actual).isInstanceOf(ImmutableList.class);
+        assertThat(actual).containsExactly("a");
+    }
+    
+    @Test
+    public void immutableListCollectorShouldReturnImmutableListWhen3ElementsStream() {
+        String[] data = {"a", "b", "c"};
+        List<String> actual = Arrays.stream(data)
+            .collect(Collectors.toImmutableList());
+        assertThat(actual).isInstanceOf(ImmutableList.class);
+        assertThat(actual).containsExactly("a", "b", "c");
+    }
+    
+    @Test
+    public void immutableMapCollectorShouldReturnEmptyImmutableMapWhenEmptyStream() {
+        String[] data = {};
+        Map<String, Integer> actual = Arrays.stream(data)
+                .collect(Collectors.toImmutableMap(x -> x.toUpperCase(), x -> x.length()));
+        assertThat(actual).isInstanceOf(ImmutableMap.class);
+        assertThat(actual).isEmpty();
+    }
+    
+    @Test
+    public void immutableMapCollectorShouldReturnAppliedImmutableMapWhenOneElementStream() {
+        String[] data = {"a"};
+        Map<String, Integer> actual = Arrays.stream(data)
+                .collect(Collectors.toImmutableMap(x -> x.toUpperCase(), x -> x.length()));
+        assertThat(actual).isInstanceOf(ImmutableMap.class);
+        assertThat(actual).containsExactly(entry("A", 1));
+    }
+    
+    @Test
+    public void immutableMapCollectorShouldReturnAppliedImmutableMapWhen3ElementsStream() {
+        String[] data = {"a", "bb", "ccc"};
+        Map<String, Integer> actual = Arrays.stream(data)
+                .collect(Collectors.toImmutableMap(x -> x.toUpperCase(), x -> x.length()));
+        assertThat(actual).isInstanceOf(ImmutableMap.class);
+        assertThat(actual).containsExactly(entry("A", 1), entry("BB", 2), entry("CCC", 3));;
+    }
+    
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org