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 2015/07/03 16:34:01 UTC
svn commit: r1689016 -
/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
Author: btellier
Date: Fri Jul 3 14:34:01 2015
New Revision: 1689016
URL: http://svn.apache.org/r1689016
Log:
MAILBOX-208 Improve Cassandra Mailbox Mapper
Modified:
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
Modified: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java?rev=1689016&r1=1689015&r2=1689016&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java (original)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java Fri Jul 3 14:34:01 2015
@@ -55,8 +55,6 @@ import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableList.Builder;
/**
* Data access management for mailbox.
@@ -77,7 +75,7 @@ public class CassandraMailboxMapper impl
@Override
public void delete(Mailbox<CassandraId> mailbox) throws MailboxException {
session.execute(
- QueryBuilder.delete()
+ QueryBuilder.delete()
.from(TABLE_NAME)
.where(eq(ID, mailbox.getMailboxId().asUuid())));
}
@@ -92,6 +90,56 @@ public class CassandraMailboxMapper impl
}
}
+ @Override
+ public List<Mailbox<CassandraId>> findMailboxWithPathLike(MailboxPath path) throws MailboxException {
+ Pattern regex = Pattern.compile(constructEscapedRegexForMailboxNameMatching(path));
+ return getMailboxFilteredByNamespaceAndUserStream(path.getNamespace(), path.getUser())
+ .filter((row) -> regex.matcher(row.getString(NAME)).matches())
+ .map(this::mailbox)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public void save(Mailbox<CassandraId> mailbox) throws MailboxException {
+ Preconditions.checkArgument(mailbox instanceof SimpleMailbox);
+ SimpleMailbox<CassandraId> cassandraMailbox = (SimpleMailbox<CassandraId>) mailbox;
+ if (cassandraMailbox.getMailboxId() == null) {
+ cassandraMailbox.setMailboxId(CassandraId.timeBased());
+ }
+ upsertMailbox(cassandraMailbox);
+ }
+
+ @Override
+ public boolean hasChildren(Mailbox<CassandraId> mailbox, char delimiter) {
+ final Pattern regex = Pattern.compile(Pattern.quote( mailbox.getName() + String.valueOf(delimiter)) + ".*");
+ return getMailboxFilteredByNamespaceAndUserStream(mailbox.getNamespace(), mailbox.getUser())
+ .anyMatch((row) -> regex.matcher(row.getString(NAME)).matches());
+ }
+
+ @Override
+ public List<Mailbox<CassandraId>> list() throws MailboxException {
+ return convertToStream(
+ session.execute(select(FIELDS)
+ .from(TABLE_NAME)))
+ .map(this::mailbox)
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public <T> T execute(Transaction<T> transaction) throws MailboxException {
+ return transaction.run();
+ }
+
+ @Override
+ public void updateACL(Mailbox<CassandraId> mailbox, MailboxACL.MailboxACLCommand mailboxACLCommand) throws MailboxException {
+ new CassandraACLMapper(mailbox, session, maxRetry).updateACL(mailboxACLCommand);
+ }
+
+ @Override
+ public void endRequest() {
+ // Do nothing
+ }
+
private SimpleMailbox<CassandraId> mailbox(Row row) {
SimpleMailbox<CassandraId> mailbox = new SimpleMailbox<>(
new MailboxPath(
@@ -104,15 +152,6 @@ public class CassandraMailboxMapper impl
return mailbox;
}
- @Override
- public List<Mailbox<CassandraId>> findMailboxWithPathLike(MailboxPath path) throws MailboxException {
- Pattern regex = Pattern.compile(constructEscapedRegexForMailboxNameMatching(path));
- return getMailboxFilteredByNamespaceAndUserStream(path.getNamespace(), path.getUser())
- .filter((row) -> regex.matcher(row.getString(NAME)).matches())
- .map(this::mailbox)
- .collect(Collectors.toList());
- }
-
private String constructEscapedRegexForMailboxNameMatching(MailboxPath path) {
return Collections
.list(new StringTokenizer(path.getName(), WILDCARD, true))
@@ -127,16 +166,6 @@ public class CassandraMailboxMapper impl
).collect(Collectors.joining());
}
- @Override
- public void save(Mailbox<CassandraId> mailbox) throws MailboxException {
- Preconditions.checkArgument(mailbox instanceof SimpleMailbox);
- SimpleMailbox<CassandraId> cassandraMailbox = (SimpleMailbox<CassandraId>) mailbox;
- if (cassandraMailbox.getMailboxId() == null) {
- cassandraMailbox.setMailboxId(CassandraId.timeBased());
- }
- upsertMailbox(cassandraMailbox);
- }
-
private void upsertMailbox(SimpleMailbox<CassandraId> mailbox) throws MailboxException {
session.execute(
insertInto(TABLE_NAME)
@@ -155,47 +184,18 @@ public class CassandraMailboxMapper impl
return new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName());
}
- @Override
- public void endRequest() {
- // Do nothing
- }
-
- @Override
- public boolean hasChildren(Mailbox<CassandraId> mailbox, char delimiter) {
- final Pattern regex = Pattern.compile(Pattern.quote( mailbox.getName() + String.valueOf(delimiter)) + ".*");
- return getMailboxFilteredByNamespaceAndUserStream(mailbox.getNamespace(), mailbox.getUser())
- .anyMatch((row) -> regex.matcher(row.getString(NAME)).matches());
+ private Stream<Row> convertToStream(ResultSet resultSet) {
+ return StreamSupport.stream(resultSet.spliterator(), true);
}
private Stream<Row> getMailboxFilteredByNamespaceAndUserStream (String namespace, String user) {
- return StreamSupport.stream(session.execute(
- select(FIELDS)
- .from(TABLE_NAME)
- .where(eq(MAILBOX_BASE, typesProvider.getDefinedUserType(TYPE.MailboxBase)
- .newValue()
- .setString(MailboxBase.NAMESPACE, namespace)
- .setString(MailboxBase.USER, user))))
- .spliterator(),
- true);
- }
-
- @Override
- public List<Mailbox<CassandraId>> list() throws MailboxException {
- Builder<Mailbox<CassandraId>> result = ImmutableList.<Mailbox<CassandraId>> builder();
- for (Row row : session.execute(select(FIELDS).from(TABLE_NAME))) {
- result.add(mailbox(row));
- }
- return result.build();
- }
-
- @Override
- public <T> T execute(Transaction<T> transaction) throws MailboxException {
- return transaction.run();
- }
-
- @Override
- public void updateACL(Mailbox<CassandraId> mailbox, MailboxACL.MailboxACLCommand mailboxACLCommand) throws MailboxException {
- new CassandraACLMapper(mailbox, session, maxRetry).updateACL(mailboxACLCommand);
+ return convertToStream(session.execute(
+ select(FIELDS)
+ .from(TABLE_NAME)
+ .where(eq(MAILBOX_BASE, typesProvider.getDefinedUserType(TYPE.MailboxBase)
+ .newValue()
+ .setString(MailboxBase.NAMESPACE, namespace)
+ .setString(MailboxBase.USER, user)))));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org