Author: btellier
Date: Fri Jul  3 14:33:40 2015
New Revision: 1689015

URL: http://svn.apache.org/r1689015
Log:
MAILBOX-208 Improve Cassandra Subscription Mapper

Modified:
    
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
    
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java

Modified: 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java?rev=1689015&r1=1689014&r2=1689015&view=diff
==============================================================================
--- 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
 (original)
+++ 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraTableManager.java
 Fri Jul  3 14:33:40 2015
@@ -131,6 +131,10 @@ public class CassandraTableManager {
                 .onTable(CassandraMailboxTable.TABLE_NAME)
                 .andColumn(CassandraMailboxTable.MAILBOX_BASE)
         ),
+        UserSubscription(SchemaBuilder.createIndex(INDEX_PREFIX + 
CassandraSubscriptionTable.USER)
+            .ifNotExists()
+            .onTable(CassandraSubscriptionTable.TABLE_NAME)
+            .andColumn(CassandraSubscriptionTable.USER))
         ;
         private SchemaStatement createIndexStatement;
 

Modified: 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java?rev=1689015&r1=1689014&r2=1689015&view=diff
==============================================================================
--- 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
 (original)
+++ 
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
 Fri Jul  3 14:33:40 2015
@@ -28,6 +28,9 @@ import static org.apache.james.mailbox.c
 import static 
org.apache.james.mailbox.cassandra.table.CassandraSubscriptionTable.USER;
 
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
@@ -52,44 +55,53 @@ public class CassandraSubscriptionMapper
 
     @Override
     public synchronized void delete(Subscription subscription) {
-        session.execute(QueryBuilder.delete().from(TABLE_NAME).where(eq(USER, 
subscription.getUser())).and(eq(MAILBOX, subscription.getMailbox())));
+        session.execute(QueryBuilder.delete()
+            .from(TABLE_NAME)
+            .where(eq(USER, subscription.getUser()))
+            .and(eq(MAILBOX, subscription.getMailbox())));
     }
 
     @Override
     public Subscription findMailboxSubscriptionForUser(String user, String 
mailbox) {
-        ResultSet results = 
session.execute(select(MAILBOX).from(TABLE_NAME).where(eq(USER, 
user)).and(eq(MAILBOX, mailbox)));
+        ResultSet results = session.execute(select(MAILBOX)
+            .from(TABLE_NAME)
+            .where(eq(USER, user))
+            .and(eq(MAILBOX, mailbox)));
         return !results.isExhausted() ? new SimpleSubscription(user, mailbox) 
: null;
     }
 
     @Override
     public List<Subscription> findSubscriptionsForUser(String user) {
-        Builder<Subscription> result = ImmutableList.<Subscription> builder();
-        Select query = select(MAILBOX).from(TABLE_NAME);
-        query.where(eq(USER, user));
-        query.allowFiltering();
-        for (Row row : session.execute(query)) {
-            result.add(new SimpleSubscription(user, row.getString(MAILBOX)));
-        }
-        return result.build();
+        return convertToStream(
+            session.execute(select(MAILBOX)
+                .from(TABLE_NAME)
+                .where(eq(USER, user))))
+            .map((row) -> new SimpleSubscription(user, row.getString(MAILBOX)))
+            .collect(Collectors.toList());
     }
 
     @Override
     public synchronized void save(Subscription subscription) {
-        Insert query = insertInto(TABLE_NAME).value(USER, 
subscription.getUser()).value(MAILBOX, subscription.getMailbox());
-        session.execute(query);
+        session.execute(insertInto(TABLE_NAME)
+            .value(USER, subscription.getUser())
+            .value(MAILBOX, subscription.getMailbox()));
     }
 
     public List<SimpleSubscription> list() {
-        Builder<SimpleSubscription> result = 
ImmutableList.<SimpleSubscription> builder();
-        for (Row row : session.execute(select(FIELDS).from(TABLE_NAME))) {
-            result.add(new SimpleSubscription(row.getString(USER), 
row.getString(MAILBOX)));
-        }
-        return result.build();
+        return convertToStream(
+            session.execute(select(FIELDS)
+                .from(TABLE_NAME)))
+            .map((row) -> new SimpleSubscription(row.getString(USER), 
row.getString(MAILBOX)))
+            .collect(Collectors.toList());
     }
 
     @Override
     public void endRequest() {
-        // nothing todo
+        // nothing to do
+    }
+
+    private Stream<Row> convertToStream(ResultSet resultSet) {
+        return StreamSupport.stream(resultSet.spliterator(), true);
     }
 
 }



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

Reply via email to