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/06/29 10:21:14 UTC
svn commit: r1688109 [1/6] - in /james/mailbox/trunk:
caching/src/main/java/org/apache/james/mailbox/caching/
caching/src/main/java/org/apache/james/mailbox/caching/guava/
cassandra/src/main/java/org/apache/james/mailbox/cassandra/
cassandra/src/main/j...
Author: btellier
Date: Mon Jun 29 08:21:12 2015
New Revision: 1688109
URL: http://svn.apache.org/r1688109
Log:
MAILBOX-236 use strong types for Mailbox Id - contributed by Matthieu Baechlor
Added:
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraId.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseId.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRId.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAId.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirId.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryId.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/MailboxId.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/TestId.java
Modified:
james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxSessionMapperFactory.java
james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java
james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxByPathCache.java
james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxMetadataCache.java
james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxByPathCache.java
james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxMetadataCache.java
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/SimpleMailboxACLJsonConverterTest.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessage.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseModSeqProvider.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseUidProvider.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/model/HBaseMailbox.java
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapperTest.java
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapperTest.java
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/model/HBaseMailboxTest.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxSessionMapperFactory.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRModSeqProvider.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRUidProvider.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailbox.java
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMessage.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAModSeqProvider.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAUidProvider.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
james/mailbox/trunk/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
james/mailbox/trunk/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirMailboxSessionMapperFactory.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/MaildirStore.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTest.java
james/mailbox/trunk/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirStressTest.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryModSeqProvider.java
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryUidProvider.java
james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
james/mailbox/trunk/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxMapperTest.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MailboxEventDispatcher.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/MailboxSessionMapperFactory.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxPath.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractLockingModSeqProvider.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractLockingUidProvider.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapperFactory.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapperFactory.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/ModSeqProvider.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/UidProvider.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Mailbox.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/Message.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailbox.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/quota/PerUserQuotaManager.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/GroupFolderResolverTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherFlagsTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/MessageBuilder.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/MessageResultImplTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsMultipartMixedTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsRFC822Test.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/SearchUtilsTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/StoreMessageResultIteratorTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMailboxMapperTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxAssertTests.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageAssertTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/mail/model/MetadataMapAssertTest.java
james/mailbox/trunk/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessageTest.java
james/mailbox/trunk/tool/src/test/java/org/apache/james/mailbox/copier/MailboxCopierTest.java
james/mailbox/trunk/zoo-seq-provider/src/main/java/org/apache/james/mailbox/store/mail/ZooUidProvider.java
james/mailbox/trunk/zoo-seq-provider/src/test/java/org/apache/james/mailbox/store/mail/ZooUidProviderTest.java
Modified: james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java (original)
+++ james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java Mon Jun 29 08:21:12 2015
@@ -3,12 +3,13 @@ package org.apache.james.mailbox.caching
import org.apache.james.mailbox.MailboxListener;
import org.apache.james.mailbox.MailboxListenerSupport;
import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
/**
* A MailboxListener that invalidates the configured caches in response to Events
*
* @param <Id>
*/
-public class CacheInvalidatingMailboxListener<Id> implements MailboxListener {
+public class CacheInvalidatingMailboxListener<Id extends MailboxId> implements MailboxListener {
private MailboxByPathCache<Id> mailboxCacheByPath;
private MailboxMetadataCache<Id> mailboxMetadataCache;
Modified: james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java (original)
+++ james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java Mon Jun 29 08:21:12 2015
@@ -6,6 +6,7 @@ import org.apache.james.mailbox.exceptio
import org.apache.james.mailbox.model.MailboxACL;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.mail.MailboxMapper;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
import org.apache.james.mailbox.store.mail.model.Mailbox;
/**
@@ -15,7 +16,7 @@ import org.apache.james.mailbox.store.ma
* @param <Id>
*/
-public class CachingMailboxMapper<Id> implements MailboxMapper<Id> {
+public class CachingMailboxMapper<Id extends MailboxId> implements MailboxMapper<Id> {
private MailboxMapper<Id> underlying;
private MailboxByPathCache<Id> cache;
Modified: james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxSessionMapperFactory.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxSessionMapperFactory.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxSessionMapperFactory.java (original)
+++ james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxSessionMapperFactory.java Mon Jun 29 08:21:12 2015
@@ -6,6 +6,7 @@ import org.apache.james.mailbox.exceptio
import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
import org.apache.james.mailbox.store.mail.MailboxMapper;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
import org.apache.james.mailbox.store.user.SubscriptionMapper;
/**
@@ -15,7 +16,7 @@ import org.apache.james.mailbox.store.us
*
* @param <Id>
*/
-public class CachingMailboxSessionMapperFactory<Id> extends
+public class CachingMailboxSessionMapperFactory<Id extends MailboxId> extends
MailboxSessionMapperFactory<Id> {
private MailboxSessionMapperFactory<Id> underlying;
Modified: james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java (original)
+++ james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java Mon Jun 29 08:21:12 2015
@@ -10,6 +10,7 @@ import org.apache.james.mailbox.model.Me
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.UpdatedFlags;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Message;
@@ -19,7 +20,7 @@ import org.apache.james.mailbox.store.ma
*
* @param <Id>
*/
-public class CachingMessageMapper<Id> implements MessageMapper<Id> {
+public class CachingMessageMapper<Id extends MailboxId> implements MessageMapper<Id> {
private MessageMapper<Id> underlying;
Modified: james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxByPathCache.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxByPathCache.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxByPathCache.java (original)
+++ james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxByPathCache.java Mon Jun 29 08:21:12 2015
@@ -4,6 +4,7 @@ import org.apache.james.mailbox.exceptio
import org.apache.james.mailbox.exception.MailboxNotFoundException;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.mail.MailboxMapper;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
import org.apache.james.mailbox.store.mail.model.Mailbox;
/**
@@ -11,7 +12,7 @@ import org.apache.james.mailbox.store.ma
*
* @param <Id>
*/
-public interface MailboxByPathCache<Id> {
+public interface MailboxByPathCache<Id extends MailboxId> {
public abstract Mailbox<Id> findMailboxByPath(MailboxPath mailboxName,
MailboxMapper<Id> underlying) throws MailboxNotFoundException,
Modified: james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxMetadataCache.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxMetadataCache.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxMetadataCache.java (original)
+++ james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/MailboxMetadataCache.java Mon Jun 29 08:21:12 2015
@@ -2,6 +2,7 @@ package org.apache.james.mailbox.caching
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
import org.apache.james.mailbox.store.mail.model.Mailbox;
/**
@@ -10,7 +11,7 @@ import org.apache.james.mailbox.store.ma
*
* @param <Id>
*/
-public interface MailboxMetadataCache<Id> {
+public interface MailboxMetadataCache<Id extends MailboxId> {
public abstract long countMessagesInMailbox(Mailbox<Id> mailbox,
MessageMapper<Id> underlying) throws MailboxException;
Modified: james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxByPathCache.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxByPathCache.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxByPathCache.java (original)
+++ james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxByPathCache.java Mon Jun 29 08:21:12 2015
@@ -5,6 +5,7 @@ import org.apache.james.mailbox.exceptio
import org.apache.james.mailbox.exception.MailboxNotFoundException;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.mail.MailboxMapper;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import com.google.common.cache.Cache;
@@ -16,7 +17,7 @@ import com.google.common.cache.Cache;
*
* @param <Id>
*/
-public class GuavaMailboxByPathCache<Id> extends AbstractGuavaCache implements MailboxByPathCache<Id> {
+public class GuavaMailboxByPathCache<Id extends MailboxId> extends AbstractGuavaCache implements MailboxByPathCache<Id> {
private final Cache<String, Mailbox<Id>> findMailboxByPathCache = BUILDER.build();
Modified: james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxMetadataCache.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxMetadataCache.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxMetadataCache.java (original)
+++ james/mailbox/trunk/caching/src/main/java/org/apache/james/mailbox/caching/guava/GuavaMailboxMetadataCache.java Mon Jun 29 08:21:12 2015
@@ -3,6 +3,7 @@ package org.apache.james.mailbox.caching
import org.apache.james.mailbox.caching.MailboxMetadataCache;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import com.google.common.cache.Cache;
@@ -13,7 +14,7 @@ import com.google.common.cache.Cache;
* @param <Id>
*/
-public class GuavaMailboxMetadataCache<Id> extends AbstractGuavaCache implements MailboxMetadataCache<Id> {
+public class GuavaMailboxMetadataCache<Id extends MailboxId> extends AbstractGuavaCache implements MailboxMetadataCache<Id> {
// TODO these can probably be instantiated more elegant way
private final Cache<Id, Long> cacheCountMessagesInMailbox = BUILDER.build();
Added: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraId.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraId.java?rev=1688109&view=auto
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraId.java (added)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraId.java Mon Jun 29 08:21:12 2015
@@ -0,0 +1,77 @@
+/****************************************************************
+ * 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.mailbox.cassandra;
+
+import java.util.UUID;
+
+import org.apache.james.mailbox.store.mail.model.MailboxId;
+
+import com.datastax.driver.core.utils.UUIDs;
+
+public class CassandraId implements MailboxId {
+
+ private final UUID id;
+
+ public static CassandraId timeBased() {
+ return of(UUIDs.timeBased());
+ }
+
+ public static CassandraId of(UUID id) {
+ return new CassandraId(id);
+ }
+
+ private CassandraId(UUID id) {
+ this.id = id;
+ }
+
+ @Override
+ public String serialize() {
+ return id.toString();
+ }
+
+ public UUID asUuid() {
+ return id;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ CassandraId other = (CassandraId) obj;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ return true;
+ }
+
+}
Modified: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java (original)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java Mon Jun 29 08:21:12 2015
@@ -19,8 +19,6 @@
package org.apache.james.mailbox.cassandra;
-import java.util.UUID;
-
import org.apache.james.mailbox.MailboxPathLocker;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
@@ -37,7 +35,7 @@ import org.apache.james.mailbox.store.ma
/**
* Cassandra implementation of {@link StoreMailboxManager}
*/
-public class CassandraMailboxManager extends StoreMailboxManager<UUID> {
+public class CassandraMailboxManager extends StoreMailboxManager<CassandraId> {
private MailboxPathLocker locker;
public CassandraMailboxManager(CassandraMailboxSessionMapperFactory mapperFactory, Authenticator authenticator, final MailboxPathLocker locker) {
@@ -46,14 +44,14 @@ public class CassandraMailboxManager ext
}
@Override
- protected Mailbox<UUID> doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
- SimpleMailbox<UUID> cassandraMailbox = new SimpleMailbox<>(mailboxPath, randomUidValidity());
+ protected Mailbox<CassandraId> doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+ SimpleMailbox<CassandraId> cassandraMailbox = new SimpleMailbox<>(mailboxPath, randomUidValidity());
cassandraMailbox.setACL(SimpleMailboxACL.EMPTY);
return cassandraMailbox;
}
@Override
- protected StoreMessageManager<UUID> createMessageManager(Mailbox<UUID> mailboxRow, MailboxSession session) throws MailboxException {
+ protected StoreMessageManager<CassandraId> createMessageManager(Mailbox<CassandraId> mailboxRow, MailboxSession session) throws MailboxException {
return new CassandraMessageManager(getMapperFactory(), getMessageSearchIndex(), getEventDispatcher(), this.locker, mailboxRow);
}
Modified: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java (original)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java Mon Jun 29 08:21:12 2015
@@ -19,8 +19,6 @@
package org.apache.james.mailbox.cassandra;
-import java.util.UUID;
-
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.cassandra.mail.CassandraMailboxMapper;
import org.apache.james.mailbox.cassandra.mail.CassandraMessageMapper;
@@ -37,16 +35,16 @@ import com.datastax.driver.core.Session;
* Cassandra implementation of {@link MailboxSessionMapperFactory}
*
*/
-public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFactory<UUID> {
+public class CassandraMailboxSessionMapperFactory extends MailboxSessionMapperFactory<CassandraId> {
private static final int DEFAULT_MAX_RETRY = 1000;
private final Session session;
- private final UidProvider<UUID> uidProvider;
- private final ModSeqProvider<UUID> modSeqProvider;
+ private final UidProvider<CassandraId> uidProvider;
+ private final ModSeqProvider<CassandraId> modSeqProvider;
private final CassandraTypesProvider typesProvider;
private int maxRetry;
- public CassandraMailboxSessionMapperFactory(UidProvider<UUID> uidProvider, ModSeqProvider<UUID> modSeqProvider, Session session, CassandraTypesProvider typesProvider) {
+ public CassandraMailboxSessionMapperFactory(UidProvider<CassandraId> uidProvider, ModSeqProvider<CassandraId> modSeqProvider, Session session, CassandraTypesProvider typesProvider) {
this.uidProvider = uidProvider;
this.modSeqProvider = modSeqProvider;
this.session = session;
@@ -64,7 +62,7 @@ public class CassandraMailboxSessionMapp
}
@Override
- public MailboxMapper<UUID> createMailboxMapper(MailboxSession mailboxSession) {
+ public MailboxMapper<CassandraId> createMailboxMapper(MailboxSession mailboxSession) {
return new CassandraMailboxMapper(session, typesProvider, maxRetry);
}
@@ -73,11 +71,11 @@ public class CassandraMailboxSessionMapp
return new CassandraSubscriptionMapper(session);
}
- public ModSeqProvider<UUID> getModSeqProvider() {
+ public ModSeqProvider<CassandraId> getModSeqProvider() {
return modSeqProvider;
}
- public UidProvider<UUID> getUidProvider() {
+ public UidProvider<CassandraId> getUidProvider() {
return uidProvider;
}
Modified: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java (original)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java Mon Jun 29 08:21:12 2015
@@ -19,8 +19,6 @@
package org.apache.james.mailbox.cassandra;
-import java.util.UUID;
-
import javax.mail.Flags;
import org.apache.james.mailbox.MailboxPathLocker;
@@ -38,9 +36,9 @@ import org.apache.james.mailbox.store.se
* Cassandra implementation of {@link StoreMessageManager}
*
*/
-public class CassandraMessageManager extends StoreMessageManager<UUID> {
+public class CassandraMessageManager extends StoreMessageManager<CassandraId> {
- public CassandraMessageManager(MailboxSessionMapperFactory<UUID> mapperFactory, MessageSearchIndex<UUID> index, MailboxEventDispatcher<UUID> dispatcher, MailboxPathLocker locker, Mailbox<UUID> mailbox) throws MailboxException {
+ public CassandraMessageManager(MailboxSessionMapperFactory<CassandraId> mapperFactory, MessageSearchIndex<CassandraId> index, MailboxEventDispatcher<CassandraId> dispatcher, MailboxPathLocker locker, Mailbox<CassandraId> mailbox) throws MailboxException {
super(mapperFactory, index, dispatcher, locker, mailbox, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver());
}
Modified: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java (original)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java Mon Jun 29 08:21:12 2015
@@ -19,15 +19,19 @@
package org.apache.james.mailbox.cassandra.mail;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Row;
-import com.datastax.driver.core.Session;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
+
+import java.io.IOException;
+import java.util.Optional;
+
import org.apache.james.mailbox.cassandra.CassandraConstants;
-import org.apache.james.mailbox.cassandra.mail.utils.SimpleMailboxACLJsonConverter;
+import org.apache.james.mailbox.cassandra.CassandraId;
import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry;
+import org.apache.james.mailbox.cassandra.mail.utils.SimpleMailboxACLJsonConverter;
import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
import org.apache.james.mailbox.exception.MailboxException;
@@ -38,15 +42,12 @@ import org.apache.james.mailbox.store.ma
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-import java.util.Optional;
-import java.util.UUID;
-
-import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Row;
+import com.datastax.driver.core.Session;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Throwables;
public class CassandraACLMapper {
@@ -55,18 +56,18 @@ public class CassandraACLMapper {
void inject();
}
- private final Mailbox<UUID> mailbox;
+ private final Mailbox<CassandraId> mailbox;
private final Session session;
private final int maxRetry;
private final CodeInjector codeInjector;
private static final Logger LOG = LoggerFactory.getLogger(CassandraACLMapper.class);
- public CassandraACLMapper(Mailbox<UUID> mailbox, Session session, int maxRetry) {
+ public CassandraACLMapper(Mailbox<CassandraId> mailbox, Session session, int maxRetry) {
this(mailbox, session, maxRetry, () -> {});
}
- public CassandraACLMapper(Mailbox<UUID> mailbox, Session session, int maxRetry, CodeInjector codeInjector) {
+ public CassandraACLMapper(Mailbox<CassandraId> mailbox, Session session, int maxRetry, CodeInjector codeInjector) {
Preconditions.checkArgument(maxRetry > 0);
Preconditions.checkArgument(mailbox.getMailboxId() != null);
this.mailbox = mailbox;
@@ -109,7 +110,7 @@ public class CassandraACLMapper {
return session.execute(
select(CassandraACLTable.ACL, CassandraACLTable.VERSION)
.from(CassandraACLTable.TABLE_NAME)
- .where(eq(CassandraMailboxTable.ID, mailbox.getMailboxId()))
+ .where(eq(CassandraMailboxTable.ID, mailbox.getMailboxId().asUuid()))
);
}
@@ -119,7 +120,7 @@ public class CassandraACLMapper {
update(CassandraACLTable.TABLE_NAME)
.with(set(CassandraACLTable.ACL, SimpleMailboxACLJsonConverter.toJson(aclWithVersion.mailboxACL)))
.and(set(CassandraACLTable.VERSION, aclWithVersion.version + 1))
- .where(eq(CassandraACLTable.ID, mailbox.getMailboxId()))
+ .where(eq(CassandraACLTable.ID, mailbox.getMailboxId().asUuid()))
.onlyIf(eq(CassandraACLTable.VERSION, aclWithVersion.version))
);
} catch (JsonProcessingException exception) {
@@ -131,7 +132,7 @@ public class CassandraACLMapper {
try {
return session.execute(
insertInto(CassandraACLTable.TABLE_NAME)
- .value(CassandraACLTable.ID, mailbox.getMailboxId())
+ .value(CassandraACLTable.ID, mailbox.getMailboxId().asUuid())
.value(CassandraACLTable.ACL, SimpleMailboxACLJsonConverter.toJson(acl))
.value(CassandraACLTable.VERSION, 0)
.ifNotExists()
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=1688109&r1=1688108&r2=1688109&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 Mon Jun 29 08:21:12 2015
@@ -19,43 +19,49 @@
package org.apache.james.mailbox.cassandra.mail;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.*;
-import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.*;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.FIELDS;
+import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.ID;
+import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.MAILBOX_BASE;
+import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.NAME;
+import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.PATH;
+import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.TABLE_NAME;
+import static org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.UIDVALIDITY;
import java.util.Collections;
import java.util.List;
-import java.util.Optional;
import java.util.StringTokenizer;
-import java.util.UUID;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
-import com.datastax.driver.core.utils.UUIDs;
-import com.google.common.base.Preconditions;
+import org.apache.james.mailbox.cassandra.CassandraId;
import org.apache.james.mailbox.cassandra.CassandraTypesProvider;
import org.apache.james.mailbox.cassandra.CassandraTypesProvider.TYPE;
-import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
+import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable.MailboxBase;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.MailboxNotFoundException;
import org.apache.james.mailbox.model.MailboxACL;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.mail.MailboxMapper;
import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
import com.datastax.driver.core.ResultSet;
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;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
/**
* Data access management for mailbox.
*/
-public class CassandraMailboxMapper implements MailboxMapper<UUID> {
+public class CassandraMailboxMapper implements MailboxMapper<CassandraId> {
public static final String WILDCARD = "%";
private final Session session;
@@ -69,12 +75,15 @@ public class CassandraMailboxMapper impl
}
@Override
- public void delete(Mailbox<UUID> mailbox) throws MailboxException {
- session.execute(QueryBuilder.delete().from(TABLE_NAME).where(eq(ID, mailbox.getMailboxId())));
+ public void delete(Mailbox<CassandraId> mailbox) throws MailboxException {
+ session.execute(
+ QueryBuilder.delete()
+ .from(TABLE_NAME)
+ .where(eq(ID, mailbox.getMailboxId().asUuid())));
}
@Override
- public Mailbox<UUID> findMailboxByPath(MailboxPath path) throws MailboxException {
+ public Mailbox<CassandraId> findMailboxByPath(MailboxPath path) throws MailboxException {
ResultSet resultSet = session.execute(select(FIELDS).from(TABLE_NAME).where(eq(PATH, path.toString())));
if (resultSet.isExhausted()) {
throw new MailboxNotFoundException(path);
@@ -83,20 +92,20 @@ public class CassandraMailboxMapper impl
}
}
- private SimpleMailbox<UUID> mailbox(Row row) {
- SimpleMailbox<UUID> mailbox = new SimpleMailbox<>(
+ private SimpleMailbox<CassandraId> mailbox(Row row) {
+ SimpleMailbox<CassandraId> mailbox = new SimpleMailbox<>(
new MailboxPath(
row.getUDTValue(MAILBOX_BASE).getString(MailboxBase.NAMESPACE),
row.getUDTValue(MAILBOX_BASE).getString(MailboxBase.USER),
row.getString(NAME)),
row.getLong(UIDVALIDITY));
- mailbox.setMailboxId(row.getUUID(ID));
+ mailbox.setMailboxId(CassandraId.of(row.getUUID(ID)));
mailbox.setACL(new CassandraACLMapper(mailbox, session, maxRetry).getACL());
return mailbox;
}
@Override
- public List<Mailbox<UUID>> findMailboxWithPathLike(MailboxPath path) throws MailboxException {
+ 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())
@@ -119,19 +128,19 @@ public class CassandraMailboxMapper impl
}
@Override
- public void save(Mailbox<UUID> mailbox) throws MailboxException {
+ public void save(Mailbox<CassandraId> mailbox) throws MailboxException {
Preconditions.checkArgument(mailbox instanceof SimpleMailbox);
- SimpleMailbox<UUID> cassandraMailbox = (SimpleMailbox<UUID>) mailbox;
+ SimpleMailbox<CassandraId> cassandraMailbox = (SimpleMailbox<CassandraId>) mailbox;
if (cassandraMailbox.getMailboxId() == null) {
- cassandraMailbox.setMailboxId(UUIDs.timeBased());
+ cassandraMailbox.setMailboxId(CassandraId.timeBased());
}
upsertMailbox(cassandraMailbox);
}
- private void upsertMailbox(SimpleMailbox<UUID> mailbox) throws MailboxException {
+ private void upsertMailbox(SimpleMailbox<CassandraId> mailbox) throws MailboxException {
session.execute(
insertInto(TABLE_NAME)
- .value(ID, mailbox.getMailboxId())
+ .value(ID, mailbox.getMailboxId().asUuid())
.value(NAME, mailbox.getName())
.value(UIDVALIDITY, mailbox.getUidValidity())
.value(MAILBOX_BASE, typesProvider.getDefinedUserType(TYPE.MailboxBase)
@@ -152,7 +161,7 @@ public class CassandraMailboxMapper impl
}
@Override
- public boolean hasChildren(Mailbox<UUID> mailbox, char delimiter) {
+ 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());
@@ -171,8 +180,8 @@ public class CassandraMailboxMapper impl
}
@Override
- public List<Mailbox<UUID>> list() throws MailboxException {
- Builder<Mailbox<UUID>> result = ImmutableList.<Mailbox<UUID>> builder();
+ 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));
}
@@ -185,7 +194,7 @@ public class CassandraMailboxMapper impl
}
@Override
- public void updateACL(Mailbox<UUID> mailbox, MailboxACL.MailboxACLCommand mailboxACLCommand) throws MailboxException {
+ public void updateACL(Mailbox<CassandraId> mailbox, MailboxACL.MailboxACLCommand mailboxACLCommand) throws MailboxException {
new CassandraACLMapper(mailbox, session, maxRetry).updateACL(mailboxACLCommand);
}
Modified: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java (original)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java Mon Jun 29 08:21:12 2015
@@ -30,7 +30,6 @@ import static com.datastax.driver.core.q
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageTable.Properties;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageTable.BODY_CONTENT;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageTable.BODY_OCTECTS;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageTable.BODY_START_OCTET;
@@ -60,21 +59,21 @@ import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.UUID;
import java.util.stream.Collectors;
import javax.mail.Flags;
import javax.mail.Flags.Flag;
import javax.mail.util.SharedByteArrayInputStream;
-import com.datastax.driver.core.UDTValue;
import org.apache.james.mailbox.FlagsBuilder;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.cassandra.CassandraConstants;
+import org.apache.james.mailbox.cassandra.CassandraId;
import org.apache.james.mailbox.cassandra.CassandraTypesProvider;
import org.apache.james.mailbox.cassandra.CassandraTypesProvider.TYPE;
import org.apache.james.mailbox.cassandra.table.CassandraMailboxCountersTable;
import org.apache.james.mailbox.cassandra.table.CassandraMessageTable;
+import org.apache.james.mailbox.cassandra.table.CassandraMessageTable.Properties;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MessageMetaData;
import org.apache.james.mailbox.model.MessageRange;
@@ -94,7 +93,7 @@ import com.datastax.driver.core.Prepared
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
-import com.datastax.driver.core.TupleValue;
+import com.datastax.driver.core.UDTValue;
import com.datastax.driver.core.querybuilder.Assignment;
import com.datastax.driver.core.querybuilder.Insert;
import com.datastax.driver.core.querybuilder.QueryBuilder;
@@ -109,27 +108,27 @@ import com.google.common.primitives.Byte
/**
* Cassandra implementation of a {@link MessageMapper}.
*/
-public class CassandraMessageMapper implements MessageMapper<UUID> {
+public class CassandraMessageMapper implements MessageMapper<CassandraId> {
private final Session session;
- private final ModSeqProvider<UUID> modSeqProvider;
+ private final ModSeqProvider<CassandraId> modSeqProvider;
private final MailboxSession mailboxSession;
- private final UidProvider<UUID> uidProvider;
+ private final UidProvider<CassandraId> uidProvider;
private final CassandraTypesProvider typesProvider;
private int maxRetries;
private final static int DEFAULT_MAX_RETRIES = 10000;
- public CassandraMessageMapper(Session session, UidProvider<UUID> uidProvider, ModSeqProvider<UUID> modSeqProvider, CassandraTypesProvider typesProvider) {
+ public CassandraMessageMapper(Session session, UidProvider<CassandraId> uidProvider, ModSeqProvider<CassandraId> modSeqProvider, CassandraTypesProvider typesProvider) {
this(session, uidProvider, modSeqProvider, null, DEFAULT_MAX_RETRIES, typesProvider);
}
- public CassandraMessageMapper(Session session, UidProvider<UUID> uidProvider, ModSeqProvider<UUID> modSeqProvider, MailboxSession mailboxSession, CassandraTypesProvider typesProvider) {
+ public CassandraMessageMapper(Session session, UidProvider<CassandraId> uidProvider, ModSeqProvider<CassandraId> modSeqProvider, MailboxSession mailboxSession, CassandraTypesProvider typesProvider) {
this(session, uidProvider, modSeqProvider, mailboxSession, DEFAULT_MAX_RETRIES, typesProvider);
}
- public CassandraMessageMapper(Session session, UidProvider<UUID> uidProvider, ModSeqProvider<UUID> modSeqProvider, MailboxSession mailboxSession, int maxRetries, CassandraTypesProvider typesProvider) {
+ public CassandraMessageMapper(Session session, UidProvider<CassandraId> uidProvider, ModSeqProvider<CassandraId> modSeqProvider, MailboxSession mailboxSession, int maxRetries, CassandraTypesProvider typesProvider) {
this.session = session;
this.uidProvider = uidProvider;
this.modSeqProvider = modSeqProvider;
@@ -139,14 +138,20 @@ public class CassandraMessageMapper impl
}
@Override
- public long countMessagesInMailbox(Mailbox<UUID> mailbox) throws MailboxException {
- ResultSet results = session.execute(select(CassandraMailboxCountersTable.COUNT).from(CassandraMailboxCountersTable.TABLE_NAME).where(eq(CassandraMailboxCountersTable.MAILBOX_ID, mailbox.getMailboxId())));
+ public long countMessagesInMailbox(Mailbox<CassandraId> mailbox) throws MailboxException {
+ ResultSet results = session.execute(
+ select(CassandraMailboxCountersTable.COUNT)
+ .from(CassandraMailboxCountersTable.TABLE_NAME)
+ .where(eq(CassandraMailboxCountersTable.MAILBOX_ID, mailbox.getMailboxId().asUuid())));
return results.isExhausted() ? 0 : results.one().getLong(CassandraMailboxCountersTable.COUNT);
}
@Override
- public long countUnseenMessagesInMailbox(Mailbox<UUID> mailbox) throws MailboxException {
- ResultSet results = session.execute(select(CassandraMailboxCountersTable.UNSEEN).from(CassandraMailboxCountersTable.TABLE_NAME).where(eq(CassandraMailboxCountersTable.MAILBOX_ID, mailbox.getMailboxId())));
+ public long countUnseenMessagesInMailbox(Mailbox<CassandraId> mailbox) throws MailboxException {
+ ResultSet results = session.execute(
+ select(CassandraMailboxCountersTable.UNSEEN)
+ .from(CassandraMailboxCountersTable.TABLE_NAME)
+ .where(eq(CassandraMailboxCountersTable.MAILBOX_ID, mailbox.getMailboxId().asUuid())));
if (!results.isExhausted()) {
Row row = results.one();
if (row.getColumnDefinitions().contains(CassandraMailboxCountersTable.UNSEEN)) {
@@ -157,37 +162,44 @@ public class CassandraMessageMapper impl
}
@Override
- public void delete(Mailbox<UUID> mailbox, Message<UUID> message) throws MailboxException {
- session.execute(QueryBuilder.delete().from(TABLE_NAME).where(eq(MAILBOX_ID, mailbox.getMailboxId())).and(eq(IMAP_UID, message.getUid())));
+ public void delete(Mailbox<CassandraId> mailbox, Message<CassandraId> message) throws MailboxException {
+ session.execute(
+ QueryBuilder.delete()
+ .from(TABLE_NAME)
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid()))
+ .and(eq(IMAP_UID, message.getUid())));
decrementCount(mailbox);
if (!message.isSeen()) {
decrementUnseen(mailbox);
}
}
- private void decrementCount(Mailbox<UUID> mailbox) {
+ private void decrementCount(Mailbox<CassandraId> mailbox) {
updateMailbox(mailbox, decr(CassandraMailboxCountersTable.COUNT));
}
- private void incrementCount(Mailbox<UUID> mailbox) {
+ private void incrementCount(Mailbox<CassandraId> mailbox) {
updateMailbox(mailbox, incr(CassandraMailboxCountersTable.COUNT));
}
- private void decrementUnseen(Mailbox<UUID> mailbox) {
+ private void decrementUnseen(Mailbox<CassandraId> mailbox) {
updateMailbox(mailbox, decr(CassandraMailboxCountersTable.UNSEEN));
}
- private void incrementUnseen(Mailbox<UUID> mailbox) {
+ private void incrementUnseen(Mailbox<CassandraId> mailbox) {
updateMailbox(mailbox, incr(CassandraMailboxCountersTable.UNSEEN));
}
- private void updateMailbox(Mailbox<UUID> mailbox, Assignment operation) {
- session.execute(update(CassandraMailboxCountersTable.TABLE_NAME).with(operation).where(eq(CassandraMailboxCountersTable.MAILBOX_ID, mailbox.getMailboxId())));
+ private void updateMailbox(Mailbox<CassandraId> mailbox, Assignment operation) {
+ session.execute(
+ update(CassandraMailboxCountersTable.TABLE_NAME)
+ .with(operation)
+ .where(eq(CassandraMailboxCountersTable.MAILBOX_ID, mailbox.getMailboxId().asUuid())));
}
@Override
- public Iterator<Message<UUID>> findInMailbox(Mailbox<UUID> mailbox, MessageRange set, FetchType ftype, int max) throws MailboxException {
- Builder<Message<UUID>> result = ImmutableSortedSet.<Message<UUID>> naturalOrder();
+ public Iterator<Message<CassandraId>> findInMailbox(Mailbox<CassandraId> mailbox, MessageRange set, FetchType ftype, int max) throws MailboxException {
+ Builder<Message<CassandraId>> result = ImmutableSortedSet.<Message<CassandraId>> naturalOrder();
ResultSet rows = session.execute(buildQuery(mailbox, set));
for (Row row : rows) {
result.add(message(row));
@@ -222,13 +234,21 @@ public class CassandraMessageMapper impl
return property;
}
- private Message<UUID> message(Row row) {
- SimpleMessage<UUID> message = new SimpleMessage<UUID>(row.getDate(INTERNAL_DATE), row.getInt(FULL_CONTENT_OCTETS), row.getInt(BODY_START_OCTET), new SharedByteArrayInputStream(getFullContent(row)), getFlags(row), getPropertyBuilder(row), row.getUUID(MAILBOX_ID));
+ private Message<CassandraId> message(Row row) {
+ SimpleMessage<CassandraId> message =
+ new SimpleMessage<CassandraId>(
+ row.getDate(INTERNAL_DATE),
+ row.getInt(FULL_CONTENT_OCTETS),
+ row.getInt(BODY_START_OCTET),
+ new SharedByteArrayInputStream(getFullContent(row)),
+ getFlags(row),
+ getPropertyBuilder(row),
+ CassandraId.of(row.getUUID(MAILBOX_ID)));
message.setUid(row.getLong(IMAP_UID));
return message;
}
- private Where buildQuery(Mailbox<UUID> mailbox, MessageRange set) {
+ private Where buildQuery(Mailbox<CassandraId> mailbox, MessageRange set) {
final MessageRange.Type type = set.getType();
switch (type) {
case ALL:
@@ -243,24 +263,36 @@ public class CassandraMessageMapper impl
throw new UnsupportedOperationException();
}
- private Where selectAll(Mailbox<UUID> mailbox) {
- return select(FIELDS).from(TABLE_NAME).where(eq(MAILBOX_ID, mailbox.getMailboxId()));
+ private Where selectAll(Mailbox<CassandraId> mailbox) {
+ return select(FIELDS)
+ .from(TABLE_NAME)
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid()));
}
- private Where selectFrom(Mailbox<UUID> mailbox, long uid) {
- return select(FIELDS).from(TABLE_NAME).where(eq(MAILBOX_ID, mailbox.getMailboxId())).and(gte(IMAP_UID, uid));
+ private Where selectFrom(Mailbox<CassandraId> mailbox, long uid) {
+ return select(FIELDS)
+ .from(TABLE_NAME)
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid()))
+ .and(gte(IMAP_UID, uid));
}
- private Where selectRange(Mailbox<UUID> mailbox, long from, long to) {
- return select(FIELDS).from(TABLE_NAME).where(eq(MAILBOX_ID, mailbox.getMailboxId())).and(gte(IMAP_UID, from)).and(lte(IMAP_UID, to));
+ private Where selectRange(Mailbox<CassandraId> mailbox, long from, long to) {
+ return select(FIELDS)
+ .from(TABLE_NAME)
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid()))
+ .and(gte(IMAP_UID, from))
+ .and(lte(IMAP_UID, to));
}
- private Where selectMessage(Mailbox<UUID> mailbox, long uid) {
- return select(FIELDS).from(TABLE_NAME).where(eq(MAILBOX_ID, mailbox.getMailboxId())).and(eq(IMAP_UID, uid));
+ private Where selectMessage(Mailbox<CassandraId> mailbox, long uid) {
+ return select(FIELDS)
+ .from(TABLE_NAME)
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid()))
+ .and(eq(IMAP_UID, uid));
}
@Override
- public List<Long> findRecentMessageUidsInMailbox(Mailbox<UUID> mailbox) throws MailboxException {
+ public List<Long> findRecentMessageUidsInMailbox(Mailbox<CassandraId> mailbox) throws MailboxException {
ImmutableList.Builder<Long> result = ImmutableList.<Long> builder();
ResultSet rows = session.execute(selectAll(mailbox).orderBy(asc(IMAP_UID)));
for (Row row : rows) {
@@ -272,7 +304,7 @@ public class CassandraMessageMapper impl
}
@Override
- public Long findFirstUnseenMessageUid(Mailbox<UUID> mailbox) throws MailboxException {
+ public Long findFirstUnseenMessageUid(Mailbox<CassandraId> mailbox) throws MailboxException {
ResultSet rows = session.execute(selectAll(mailbox).orderBy(asc(IMAP_UID)));
for (Row row : rows) {
if (!row.getBool(SEEN)) {
@@ -283,12 +315,12 @@ public class CassandraMessageMapper impl
}
@Override
- public Map<Long, MessageMetaData> expungeMarkedForDeletionInMailbox(final Mailbox<UUID> mailbox, MessageRange set) throws MailboxException {
+ public Map<Long, MessageMetaData> expungeMarkedForDeletionInMailbox(final Mailbox<CassandraId> mailbox, MessageRange set) throws MailboxException {
ImmutableMap.Builder<Long, MessageMetaData> deletedMessages = ImmutableMap.builder();
ResultSet messages = session.execute(buildQuery(mailbox, set));
for (Row row : messages) {
if (row.getBool(DELETED)) {
- Message<UUID> message = message(row);
+ Message<CassandraId> message = message(row);
delete(mailbox, message);
deletedMessages.put(message.getUid(), new SimpleMessageMetaData(message));
}
@@ -297,7 +329,7 @@ public class CassandraMessageMapper impl
}
@Override
- public MessageMetaData move(Mailbox<UUID> mailbox, Message<UUID> original) throws MailboxException {
+ public MessageMetaData move(Mailbox<CassandraId> mailbox, Message<CassandraId> original) throws MailboxException {
throw new UnsupportedOperationException("Not implemented - see https://issues.apache.org/jira/browse/IMAP-370");
}
@@ -307,7 +339,7 @@ public class CassandraMessageMapper impl
}
@Override
- public long getHighestModSeq(Mailbox<UUID> mailbox) throws MailboxException {
+ public long getHighestModSeq(Mailbox<CassandraId> mailbox) throws MailboxException {
return modSeqProvider.highestModSeq(mailboxSession, mailbox);
}
@@ -317,7 +349,7 @@ public class CassandraMessageMapper impl
}
@Override
- public MessageMetaData add(Mailbox<UUID> mailbox, Message<UUID> message) throws MailboxException {
+ public MessageMetaData add(Mailbox<CassandraId> mailbox, Message<CassandraId> message) throws MailboxException {
message.setUid(uidProvider.nextUid(mailboxSession, mailbox));
message.setModSeq(modSeqProvider.nextModSeq(mailboxSession, mailbox));
MessageMetaData messageMetaData = save(mailbox, message);
@@ -328,10 +360,10 @@ public class CassandraMessageMapper impl
return messageMetaData;
}
- private MessageMetaData save(Mailbox<UUID> mailbox, Message<UUID> message) throws MailboxException {
+ private MessageMetaData save(Mailbox<CassandraId> mailbox, Message<CassandraId> message) throws MailboxException {
try {
Insert query = insertInto(TABLE_NAME)
- .value(MAILBOX_ID, mailbox.getMailboxId())
+ .value(MAILBOX_ID, mailbox.getMailboxId().asUuid())
.value(IMAP_UID, message.getUid())
.value(MOD_SEQ, message.getModSeq())
.value(INTERNAL_DATE, message.getInternalDate())
@@ -367,7 +399,7 @@ public class CassandraMessageMapper impl
}
}
- private boolean conditionalSave(Mailbox<UUID> mailbox, Message<UUID> message, long flagVersion) throws MailboxException {
+ private boolean conditionalSave(Mailbox<CassandraId> mailbox, Message<CassandraId> message, long flagVersion) throws MailboxException {
ResultSet resultSet = session.execute(
update(TABLE_NAME)
.with(set(ANSWERED, message.isAnswered()))
@@ -379,7 +411,7 @@ public class CassandraMessageMapper impl
.and(set(USER, message.createFlags().contains(Flag.USER)))
.and(set(FLAG_VERSION, flagVersion + 1))
.where(eq(IMAP_UID, message.getUid()))
- .and(eq(MAILBOX_ID, message.getMailboxId()))
+ .and(eq(MAILBOX_ID, message.getMailboxId().asUuid()))
.onlyIf(eq(FLAG_VERSION, flagVersion))
);
return resultSet.one().getBool(CassandraConstants.LIGHTWEIGHT_TRANSACTION_APPLIED);
@@ -400,7 +432,7 @@ public class CassandraMessageMapper impl
* @throws MailboxException
*/
@Override
- public Iterator<UpdatedFlags> updateFlags(Mailbox<UUID> mailbox, Flags flags, boolean value, boolean replace, MessageRange set) throws MailboxException {
+ public Iterator<UpdatedFlags> updateFlags(Mailbox<CassandraId> mailbox, Flags flags, boolean value, boolean replace, MessageRange set) throws MailboxException {
ImmutableList.Builder<UpdatedFlags> result = ImmutableList.builder();
for (Row row : session.execute(buildQuery(mailbox, set))) {
updateMessage(mailbox, flags, value, replace, result, row);
@@ -408,9 +440,9 @@ public class CassandraMessageMapper impl
return result.build().iterator();
}
- private void updateMessage(Mailbox<UUID> mailbox, Flags flags, boolean value, boolean replace, ImmutableList.Builder<UpdatedFlags> result, Row row) throws MailboxException {
+ private void updateMessage(Mailbox<CassandraId> mailbox, Flags flags, boolean value, boolean replace, ImmutableList.Builder<UpdatedFlags> result, Row row) throws MailboxException {
// Get the message and basic information about it
- Message<UUID> message = message(row);
+ Message<CassandraId> message = message(row);
long flagVersion = row.getLong(FLAG_VERSION);
long uid = message.getUid();
// update flags
@@ -457,7 +489,7 @@ public class CassandraMessageMapper impl
result.add(new UpdatedFlags(message.getUid(), message.getModSeq(), originFlags, updatedFlags));
}
- private void manageUnseenMessageCounts(Mailbox<UUID> mailbox, Flags oldFlags, Flags newFlags) {
+ private void manageUnseenMessageCounts(Mailbox<CassandraId> mailbox, Flags oldFlags, Flags newFlags) {
if (oldFlags.contains(Flag.SEEN) && !newFlags.contains(Flag.SEEN)) {
incrementUnseen(mailbox);
}
@@ -466,7 +498,7 @@ public class CassandraMessageMapper impl
}
}
- private Row findMessageByUid(Mailbox<UUID> mailbox, long uid) {
+ private Row findMessageByUid(Mailbox<CassandraId> mailbox, long uid) {
ResultSet resultSet = session.execute(selectMessage(mailbox, uid));
if ( resultSet.isExhausted() ) {
return null;
@@ -474,7 +506,7 @@ public class CassandraMessageMapper impl
return resultSet.one();
}
- private Flags buildFlags(Message<UUID> message, Flags flags, boolean value, boolean replace) {
+ private Flags buildFlags(Message<CassandraId> message, Flags flags, boolean value, boolean replace) {
if (replace) {
return flags;
} else {
@@ -489,7 +521,7 @@ public class CassandraMessageMapper impl
}
@Override
- public MessageMetaData copy(Mailbox<UUID> mailbox, Message<UUID> original) throws MailboxException {
+ public MessageMetaData copy(Mailbox<CassandraId> mailbox, Message<CassandraId> original) throws MailboxException {
original.setUid(uidProvider.nextUid(mailboxSession, mailbox));
original.setModSeq(modSeqProvider.nextModSeq(mailboxSession, mailbox));
@@ -502,7 +534,7 @@ public class CassandraMessageMapper impl
}
@Override
- public long getLastUid(Mailbox<UUID> mailbox) throws MailboxException {
+ public long getLastUid(Mailbox<CassandraId> mailbox) throws MailboxException {
return uidProvider.lastUid(mailboxSession, mailbox);
}
Modified: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java (original)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java Mon Jun 29 08:21:12 2015
@@ -30,9 +30,9 @@ import static org.apache.james.mailbox.c
import static org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable.TABLE_NAME;
import java.util.Optional;
-import java.util.UUID;
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.cassandra.CassandraId;
import org.apache.james.mailbox.cassandra.mail.utils.FunctionRunnerWithRetry;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.store.mail.ModSeqProvider;
@@ -45,7 +45,7 @@ import com.datastax.driver.core.Session;
import com.datastax.driver.core.querybuilder.BuiltStatement;
import com.google.common.base.Throwables;
-public class CassandraModSeqProvider implements ModSeqProvider<UUID> {
+public class CassandraModSeqProvider implements ModSeqProvider<CassandraId> {
private static final int DEFAULT_MAX_RETRY = 100000;
private static final Logger LOG = LoggerFactory.getLogger(CassandraModSeqProvider.class);
@@ -64,7 +64,7 @@ public class CassandraModSeqProvider imp
}
@Override
- public long nextModSeq(MailboxSession mailboxSession, Mailbox<UUID> mailbox) throws MailboxException {
+ public long nextModSeq(MailboxSession mailboxSession, Mailbox<CassandraId> mailbox) throws MailboxException {
if (findHighestModSeq(mailboxSession, mailbox).isFirst()) {
Optional<ModSeq> optional = tryInsertModSeq(mailbox, FIRST_MODSEQ);
if (optional.isPresent()) {
@@ -85,15 +85,15 @@ public class CassandraModSeqProvider imp
}
@Override
- public long highestModSeq(MailboxSession mailboxSession, Mailbox<UUID> mailbox) throws MailboxException {
+ public long highestModSeq(MailboxSession mailboxSession, Mailbox<CassandraId> mailbox) throws MailboxException {
return findHighestModSeq(mailboxSession, mailbox).getValue();
}
- private ModSeq findHighestModSeq(MailboxSession mailboxSession, Mailbox<UUID> mailbox) throws MailboxException {
+ private ModSeq findHighestModSeq(MailboxSession mailboxSession, Mailbox<CassandraId> mailbox) throws MailboxException {
ResultSet result = session.execute(
select(NEXT_MODSEQ)
.from(TABLE_NAME)
- .where(eq(MAILBOX_ID, mailbox.getMailboxId())));
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid())));
if (result.isExhausted()) {
return FIRST_MODSEQ;
} else {
@@ -101,22 +101,22 @@ public class CassandraModSeqProvider imp
}
}
- private Optional<ModSeq> tryInsertModSeq(Mailbox<UUID> mailbox, ModSeq modSeq) {
+ private Optional<ModSeq> tryInsertModSeq(Mailbox<CassandraId> mailbox, ModSeq modSeq) {
ModSeq nextModSeq = modSeq.next();
return transactionalStatementToOptionalModSeq(nextModSeq,
insertInto(TABLE_NAME)
.value(NEXT_MODSEQ, nextModSeq.getValue())
- .value(MAILBOX_ID, mailbox.getMailboxId())
+ .value(MAILBOX_ID, mailbox.getMailboxId().asUuid())
.ifNotExists());
}
- private Optional<ModSeq> tryUpdateModSeq(Mailbox<UUID> mailbox, ModSeq modSeq) {
+ private Optional<ModSeq> tryUpdateModSeq(Mailbox<CassandraId> mailbox, ModSeq modSeq) {
ModSeq nextModSeq = modSeq.next();
return transactionalStatementToOptionalModSeq(nextModSeq,
update(TABLE_NAME)
.onlyIf(eq(NEXT_MODSEQ, modSeq.getValue()))
.with(set(NEXT_MODSEQ, nextModSeq.getValue()))
- .where(eq(MAILBOX_ID, mailbox.getMailboxId())));
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid())));
}
private Optional<ModSeq> transactionalStatementToOptionalModSeq(ModSeq modSeq, BuiltStatement statement) {
Modified: james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java (original)
+++ james/mailbox/trunk/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java Mon Jun 29 08:21:12 2015
@@ -19,18 +19,17 @@
package org.apache.james.mailbox.cassandra.mail;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
-import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable.MAILBOX_ID;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable.NEXT_UID;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable.TABLE_NAME;
-import java.util.UUID;
-
import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.cassandra.CassandraId;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.store.mail.UidProvider;
import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -38,7 +37,7 @@ import org.apache.james.mailbox.store.ma
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Session;
-public class CassandraUidProvider implements UidProvider<UUID> {
+public class CassandraUidProvider implements UidProvider<CassandraId> {
public final static int DEFAULT_MAX_RETRY = 100000;
private Session session;
@@ -55,10 +54,14 @@ public class CassandraUidProvider implem
}
@Override
- public long nextUid(MailboxSession mailboxSession, Mailbox<UUID> mailbox) throws MailboxException {
+ public long nextUid(MailboxSession mailboxSession, Mailbox<CassandraId> mailbox) throws MailboxException {
long lastUid = lastUid(mailboxSession, mailbox);
if (lastUid == 0) {
- ResultSet result = session.execute(insertInto(TABLE_NAME).value(NEXT_UID, ++lastUid).value(MAILBOX_ID, mailbox.getMailboxId()).ifNotExists());
+ ResultSet result = session.execute(
+ insertInto(TABLE_NAME)
+ .value(NEXT_UID, ++lastUid)
+ .value(MAILBOX_ID, mailbox.getMailboxId().asUuid())
+ .ifNotExists());
if(result.one().getBool(applied)) {
return lastUid;
}
@@ -68,7 +71,11 @@ public class CassandraUidProvider implem
do {
tries++;
lastUid = lastUid(mailboxSession, mailbox);
- ResultSet result = session.execute(update(TABLE_NAME).onlyIf(eq(NEXT_UID, lastUid)).with(set(NEXT_UID, ++lastUid)).where(eq(MAILBOX_ID, mailbox.getMailboxId())));
+ ResultSet result = session.execute(
+ update(TABLE_NAME)
+ .onlyIf(eq(NEXT_UID, lastUid))
+ .with(set(NEXT_UID, ++lastUid))
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid())));
isApplied = result.one().getBool(applied);
} while (! isApplied && tries < maxRetry);
if( ! isApplied ) {
@@ -78,8 +85,11 @@ public class CassandraUidProvider implem
}
@Override
- public long lastUid(MailboxSession mailboxSession, Mailbox<UUID> mailbox) throws MailboxException {
- ResultSet result = session.execute(select(NEXT_UID).from(TABLE_NAME).where(eq(MAILBOX_ID, mailbox.getMailboxId())));
+ public long lastUid(MailboxSession mailboxSession, Mailbox<CassandraId> mailbox) throws MailboxException {
+ ResultSet result = session.execute(
+ select(NEXT_UID)
+ .from(TABLE_NAME)
+ .where(eq(MAILBOX_ID, mailbox.getMailboxId().asUuid())));
return result.isExhausted() ? 0 : result.one().getLong(NEXT_UID);
}
Modified: james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java (original)
+++ james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java Mon Jun 29 08:21:12 2015
@@ -22,8 +22,6 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
-import java.util.UUID;
-
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
@@ -60,7 +58,7 @@ public class CassandraMailboxSessionMapp
LOG.info("createMessageMapper");
MailboxSession session = null;
CassandraMailboxSessionMapperFactory instance = new CassandraMailboxSessionMapperFactory(null, null, null, null);
- MessageMapper<UUID> messageMapper = instance.createMessageMapper(session);
+ MessageMapper<CassandraId> messageMapper = instance.createMessageMapper(session);
assertNotNull(messageMapper);
assertTrue(messageMapper instanceof MessageMapper);
}
@@ -74,7 +72,7 @@ public class CassandraMailboxSessionMapp
LOG.info("createMailboxMapper");
MailboxSession session = null;
CassandraMailboxSessionMapperFactory instance = new CassandraMailboxSessionMapperFactory(null, null, null, null);
- MailboxMapper<UUID> mailboxMapper = instance.createMailboxMapper(session);
+ MailboxMapper<CassandraId> mailboxMapper = instance.createMailboxMapper(session);
assertNotNull(mailboxMapper);
assertTrue(mailboxMapper instanceof MailboxMapper);
}
@@ -100,9 +98,9 @@ public class CassandraMailboxSessionMapp
@Test
public void testGetModSeqProvider() {
LOG.info("getModSeqProvider");
- ModSeqProvider<UUID> expResult = new CassandraModSeqProvider(CLUSTER.getConf());
+ ModSeqProvider<CassandraId> expResult = new CassandraModSeqProvider(CLUSTER.getConf());
CassandraMailboxSessionMapperFactory instance = new CassandraMailboxSessionMapperFactory(null, expResult, null, null);
- ModSeqProvider<UUID> result = instance.getModSeqProvider();
+ ModSeqProvider<CassandraId> result = instance.getModSeqProvider();
assertEquals(expResult, result);
}
@@ -113,9 +111,9 @@ public class CassandraMailboxSessionMapp
@Test
public void testGetUidProvider() {
LOG.info("getUidProvider");
- UidProvider<UUID> expResult = new CassandraUidProvider(CLUSTER.getConf());
+ UidProvider<CassandraId> expResult = new CassandraUidProvider(CLUSTER.getConf());
CassandraMailboxSessionMapperFactory instance = new CassandraMailboxSessionMapperFactory((CassandraUidProvider) expResult, null, null, null);
- UidProvider<UUID> result = instance.getUidProvider();
+ UidProvider<CassandraId> result = instance.getUidProvider();
assertEquals(expResult, result);
}
}
Modified: james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java (original)
+++ james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperTest.java Mon Jun 29 08:21:12 2015
@@ -18,12 +18,20 @@
****************************************************************/
package org.apache.james.mailbox.cassandra.mail;
-import static org.assertj.core.api.Assertions.assertThat;
import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
+import static org.assertj.core.api.Assertions.assertThat;
-import com.google.common.base.Throwables;
+import java.util.UUID;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.mailbox.cassandra.CassandraId;
import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxACL;
@@ -34,20 +42,13 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import java.util.UUID;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
+import com.google.common.base.Throwables;
public class CassandraACLMapperTest {
private CassandraACLMapper cassandraACLMapper;
private CassandraClusterSingleton cassandra;
- private SimpleMailbox<UUID> mailbox;
+ private SimpleMailbox<CassandraId> mailbox;
private int uidValidity;
private int maxRetry;
private ExecutorService executor;
@@ -58,7 +59,7 @@ public class CassandraACLMapperTest {
cassandra.ensureAllTables();
uidValidity = 10;
mailbox = new SimpleMailbox<>(new MailboxPath("#private", "benwa@linagora.com", "INBOX"), uidValidity);
- mailbox.setMailboxId(UUID.fromString("464765a0-e4e7-11e4-aba4-710c1de3782b"));
+ mailbox.setMailboxId(CassandraId.of(UUID.fromString("464765a0-e4e7-11e4-aba4-710c1de3782b")));
maxRetry = 100;
cassandraACLMapper = new CassandraACLMapper(mailbox, cassandra.getConf(), maxRetry);
executor = Executors.newFixedThreadPool(2);
@@ -89,7 +90,7 @@ public class CassandraACLMapperTest {
public void retrieveACLWhenPresentInBaseShouldReturnCorrespondingACL() throws Exception {
cassandra.getConf().execute(
insertInto(CassandraACLTable.TABLE_NAME)
- .value(CassandraACLTable.ID, mailbox.getMailboxId())
+ .value(CassandraACLTable.ID, mailbox.getMailboxId().asUuid())
.value(CassandraACLTable.ACL, "{\"entries\":{\"bob\":64}}")
.value(CassandraACLTable.VERSION, 1)
);
@@ -105,7 +106,7 @@ public class CassandraACLMapperTest {
public void retrieveACLWhenInvalidInBaseShouldReturnEmptyACL() throws Exception {
cassandra.getConf().execute(
insertInto(CassandraACLTable.TABLE_NAME)
- .value(CassandraACLTable.ID, mailbox.getMailboxId())
+ .value(CassandraACLTable.ID, mailbox.getMailboxId().asUuid())
.value(CassandraACLTable.ACL, "{\"entries\":{\"bob\":invalid}}")
.value(CassandraACLTable.VERSION, 1)
);
@@ -165,7 +166,7 @@ public class CassandraACLMapperTest {
public void updateInvalidACLShouldBeBasedOnEmptyACL() throws Exception {
cassandra.getConf().execute(
insertInto(CassandraACLTable.TABLE_NAME)
- .value(CassandraACLTable.ID, mailbox.getMailboxId())
+ .value(CassandraACLTable.ID, mailbox.getMailboxId().asUuid())
.value(CassandraACLTable.ACL, "{\"entries\":{\"bob\":invalid}}")
.value(CassandraACLTable.VERSION, 1)
);
Modified: james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java (original)
+++ james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java Mon Jun 29 08:21:12 2015
@@ -18,11 +18,10 @@
****************************************************************/
package org.apache.james.mailbox.cassandra.mail;
+import org.apache.james.mailbox.cassandra.CassandraId;
import org.apache.james.mailbox.store.mail.model.AbstractMailboxMapperTest;
-import java.util.UUID;
-
-public class CassandraMailboxMapperTest extends AbstractMailboxMapperTest<UUID> {
+public class CassandraMailboxMapperTest extends AbstractMailboxMapperTest<CassandraId> {
public CassandraMailboxMapperTest() {
super(new CassandraMapperProvider());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org