MAILBOX-277 Message now have a messageId property

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7882e36f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7882e36f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7882e36f

Branch: refs/heads/master
Commit: 7882e36f554336dcc865c478a452823d521b82af
Parents: bfd0b61
Author: Matthieu Baechler <matthieu.baech...@linagora.com>
Authored: Tue Oct 18 17:21:45 2016 +0200
Committer: Matthieu Baechler <matthieu.baech...@linagora.com>
Committed: Tue Oct 25 09:50:50 2016 +0200

----------------------------------------------------------------------
 .../apache/james/mailbox/model/MessageId.java   |   7 ++
 .../james/mailbox/model/MessageMetaData.java    |   2 +
 .../cassandra/CassandraMailboxManager.java      |  10 +-
 .../CassandraMailboxSessionMapperFactory.java   |  10 +-
 .../cassandra/CassandraMessageManager.java      |   8 +-
 .../cassandra/mail/CassandraMessageMapper.java  |   9 +-
 .../META-INF/spring/mailbox-cassandra.xml       |   3 +
 .../cassandra/CassandraMailboxManagerTest.java  |   7 +-
 ...assandraMailboxSessionMapperFactoryTest.java |  16 ++-
 .../CassandraSubscriptionManagerTest.java       |   4 +-
 .../CassandraMailboxManagerAttachmentTest.java  |   8 +-
 .../cassandra/mail/CassandraMapperProvider.java |  19 +++-
 .../ElasticSearchIntegrationTest.java           |   6 +-
 .../MailboxMessageToElasticSearchJsonTest.java  | 100 ++++++++++---------
 .../mailbox/hbase/HBaseMailboxManager.java      |  16 ++-
 .../hbase/HBaseMailboxSessionMapperFactory.java |   8 +-
 .../mailbox/hbase/HBaseMessageManager.java      |   8 +-
 .../apache/james/mailbox/hbase/HBaseUtils.java  |   5 +-
 .../mailbox/hbase/mail/HBaseMailboxMessage.java |  11 +-
 .../mailbox/hbase/mail/HBaseMessageMapper.java  |  18 ++--
 .../mailbox/hbase/HBaseMailboxManagerTest.java  |   9 +-
 .../HBaseMailboxSessionMapperFactoryTest.java   |  16 ++-
 .../james/mailbox/hbase/HBaseUtilsTest.java     |   4 +-
 .../mail/HBaseMailboxMessageMapperTest.java     |   9 +-
 .../hbase/user/HBaseSubscriptionMapperTest.java |   5 +-
 .../james/mailbox/jcr/JCRMailboxManager.java    |  16 ++-
 .../james/mailbox/jcr/JCRMessageManager.java    |  11 +-
 .../jcr/mail/model/JCRMailboxMessage.java       |  10 +-
 .../mailbox/jcr/JCRMailboxManagerTest.java      |   4 +-
 .../james/mailbox/jpa/JPAMailboxManager.java    |   6 +-
 .../james/mailbox/jpa/JPAMessageManager.java    |   5 +-
 .../openjpa/AbstractJPAMailboxMessage.java      |   2 +-
 .../jpa/openjpa/OpenJPAMailboxManager.java      |  22 ++--
 .../jpa/openjpa/OpenJPAMessageManager.java      |  12 ++-
 .../resources/META-INF/spring/mailbox-jpa.xml   |   4 +
 .../mailbox/jpa/JPAMailboxManagerTest.java      |   3 +-
 .../LuceneMailboxMessageSearchIndexTest.java    |   9 +-
 .../search/LuceneMessageSearchIndexTest.java    |   6 +-
 .../META-INF/spring/mailbox-maildir.xml         |   4 +
 .../maildir/MaildirMailboxManagerTests.java     |   4 +-
 .../inmemory/InMemoryMailboxManager.java        |  10 +-
 .../inmemory/InMemoryMessageManager.java        |   7 +-
 .../META-INF/spring/mailbox-memory.xml          |   3 +
 .../inmemory/InMemoryMailboxManagerTest.java    |   6 +-
 .../InMemoryMailboxManagerAttachmentTest.java   |   9 +-
 .../inmemory/mail/InMemoryMapperProvider.java   |   9 ++
 .../manager/InMemoryIntegrationResources.java   |   5 +-
 .../search/SimpleMessageSearchIndexTest.java    |   6 +-
 .../james/mailbox/store/MessageResultImpl.java  |   6 ++
 .../mailbox/store/SimpleMessageMetaData.java    |  12 ++-
 .../mailbox/store/StoreMailboxManager.java      |  22 +++-
 .../mailbox/store/StoreMessageManager.java      |  28 +++---
 .../store/StoreMessageResultIterator.java       |  11 +-
 .../dto/MessageMetaDataDataTransferObject.java  |  15 +--
 .../store/mail/model/DefaultMessageId.java      |  54 ++--------
 .../mail/model/DelegatingMailboxMessage.java    |   5 +-
 .../mail/model/impl/SimpleMailboxMessage.java   |  10 +-
 .../store/mail/model/impl/SimpleMessage.java    |  10 +-
 .../james/mailbox/store/MessageBuilder.java     |   3 +-
 .../mailbox/store/SimpleMailboxMembership.java  |  11 +-
 .../StoreMailboxManagerAnnotationTest.java      |   4 +-
 .../mailbox/store/StoreMailboxManagerTest.java  |  10 +-
 .../StoreMailboxMessageResultIteratorTest.java  |   3 +-
 .../mailbox/store/json/EventSerializerTest.java |   3 +-
 .../mail/model/DefaultMailboxMessageIdTest.java |  47 ---------
 .../mail/model/MailboxMessageAssertTest.java    |  14 +--
 .../store/mail/model/MapperProvider.java        |   3 +
 .../store/mail/model/MessageMapperTest.java     |  37 +++----
 .../store/mail/model/MessageMoveTest.java       |   7 +-
 .../store/mail/model/MetadataMapAssertTest.java |  12 ++-
 .../model/impl/SimpleMailboxMessageTest.java    |   5 +-
 .../quota/ListeningCurrentQuotaUpdaterTest.java |   9 +-
 .../james/mailbox/copier/MailboxCopierTest.java |   4 +-
 .../registrations/MailboxRegistrationTest.java  |   5 +-
 .../cassandra/host/CassandraHostSystem.java     |  10 +-
 .../host/ElasticSearchHostSystem.java           |   3 +-
 .../imapmailbox/hbase/host/HBaseHostSystem.java |   8 +-
 .../InMemoryEventAsynchronousHostSystem.java    |   3 +-
 .../inmemory/host/InMemoryHostSystem.java       |   6 +-
 .../mpt/imapmailbox/jcr/host/JCRHostSystem.java |   6 +-
 .../mpt/imapmailbox/jpa/host/JPAHostSystem.java |   5 +-
 .../maildir/host/MaildirHostSystem.java         |   6 +-
 .../base/FakeMailboxListenerAdded.java          |  16 ++-
 .../base/MailboxEventAnalyserTest.java          |   6 ++
 .../modules/mailbox/CassandraMailboxModule.java |   4 +
 .../modules/mailbox/MemoryMailboxModule.java    |   4 +
 .../adapter/mailbox/MailboxManagementTest.java  |   4 +-
 .../apache/james/jmap/model/MessageFactory.java |   8 +-
 .../SetMessagesCreationProcessorTest.java       |   3 +-
 .../apache/james/pop3server/POP3ServerTest.java |   3 +-
 .../routes/UserMailboxesRoutesTest.java         |   6 +-
 91 files changed, 579 insertions(+), 363 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
index 975d44a..3c2ca6e 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
@@ -20,5 +20,12 @@
 package org.apache.james.mailbox.model;
 
 public interface MessageId {
+
+    interface Factory {
+
+        MessageId generate();
+        
+    }
+    
     String serialize();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMetaData.java
----------------------------------------------------------------------
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMetaData.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMetaData.java
index ae214ed..6f629fc 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMetaData.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMetaData.java
@@ -49,4 +49,6 @@ public interface MessageMetaData {
      * </p>
      */
     Date getInternalDate();
+    
+    MessageId getMessageId();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index 2219604..fdb0092 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -30,6 +30,7 @@ import 
org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.SimpleMailboxACL;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.StoreMailboxManager;
@@ -46,13 +47,15 @@ public class CassandraMailboxManager extends 
StoreMailboxManager {
     private final MailboxPathLocker locker;
 
     @Inject
-    public CassandraMailboxManager(CassandraMailboxSessionMapperFactory 
mapperFactory, Authenticator authenticator, MailboxPathLocker locker, 
MessageParser messageParser) {
+    public CassandraMailboxManager(CassandraMailboxSessionMapperFactory 
mapperFactory, Authenticator authenticator, 
+            MailboxPathLocker locker, MessageParser messageParser, 
MessageId.Factory messageIdFactory) {
         super(mapperFactory,
             authenticator,
             locker,
             new UnionMailboxACLResolver(),
             new SimpleGroupMembershipResolver(),
-            messageParser);
+            messageParser,
+            messageIdFactory);
         this.locker = locker;
     }
 
@@ -88,7 +91,8 @@ public class CassandraMailboxManager extends 
StoreMailboxManager {
             mailboxRow,
             getQuotaManager(),
             getQuotaRootResolver(),
-            getMessageParser());
+            getMessageParser(),
+            getMessageIdFactory());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
index abc0b9d..4a0aaef 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
@@ -29,6 +29,8 @@ import 
org.apache.james.mailbox.cassandra.mail.CassandraMailboxMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraMessageMapper;
 import org.apache.james.mailbox.cassandra.user.CassandraSubscriptionMapper;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
 import org.apache.james.mailbox.store.mail.AttachmentMapper;
@@ -50,13 +52,16 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
     private final UidProvider uidProvider;
     private final ModSeqProvider modSeqProvider;
     private final CassandraTypesProvider typesProvider;
+    private final Factory messageIdFactory;
     private int maxRetry;
 
     @Inject
-    public CassandraMailboxSessionMapperFactory(UidProvider uidProvider, 
ModSeqProvider modSeqProvider, Session session, CassandraTypesProvider 
typesProvider) {
+    public CassandraMailboxSessionMapperFactory(UidProvider uidProvider, 
ModSeqProvider modSeqProvider, 
+            Session session, CassandraTypesProvider typesProvider, 
MessageId.Factory messageIdFactory) {
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
         this.session = session;
+        this.messageIdFactory = messageIdFactory;
         this.maxRetry = DEFAULT_MAX_RETRY;
         this.typesProvider = typesProvider;
     }
@@ -67,7 +72,8 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
 
     @Override
     public CassandraMessageMapper createMessageMapper(MailboxSession 
mailboxSession) {
-        return new CassandraMessageMapper(session, uidProvider, 
modSeqProvider, null, maxRetry, typesProvider, 
createAttachmentMapper(mailboxSession));
+        return new CassandraMessageMapper(session, uidProvider, 
modSeqProvider, null, maxRetry, 
+                typesProvider, createAttachmentMapper(mailboxSession), 
messageIdFactory);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
index a2845ee..5eeac40 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
@@ -26,6 +26,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -41,8 +42,11 @@ import 
org.apache.james.mailbox.store.search.MessageSearchIndex;
  */
 public class CassandraMessageManager extends StoreMessageManager {
 
-    public CassandraMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index, MailboxEventDispatcher dispatcher, MailboxPathLocker 
locker, Mailbox mailbox, QuotaManager quotaManager, QuotaRootResolver 
quotaRootResolver, MessageParser messageParser) throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, new 
UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), quotaManager, 
quotaRootResolver, messageParser);
+    public CassandraMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index, 
+            MailboxEventDispatcher dispatcher, MailboxPathLocker locker, 
Mailbox mailbox, QuotaManager quotaManager, 
+            QuotaRootResolver quotaRootResolver, MessageParser messageParser, 
MessageId.Factory messageIdFactory) throws MailboxException {
+        super(mapperFactory, index, dispatcher, locker, mailbox, new 
UnionMailboxACLResolver(), 
+                new SimpleGroupMembershipResolver(), quotaManager, 
quotaRootResolver, messageParser, messageIdFactory);
 
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index 440ee86..044e289 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -89,6 +89,8 @@ import org.apache.james.mailbox.model.Attachment;
 import org.apache.james.mailbox.model.AttachmentId;
 import org.apache.james.mailbox.model.Cid;
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.UpdatedFlags;
@@ -129,8 +131,11 @@ public class CassandraMessageMapper implements 
MessageMapper {
     private final CassandraTypesProvider typesProvider;
     private final int maxRetries;
     private final AttachmentMapper attachmentMapper;
+    private final Factory messageIdFactory;
 
-    public CassandraMessageMapper(Session session, UidProvider uidProvider, 
ModSeqProvider modSeqProvider, MailboxSession mailboxSession, int maxRetries, 
CassandraTypesProvider typesProvider, AttachmentMapper attachmentMapper) {
+    public CassandraMessageMapper(Session session, UidProvider uidProvider, 
ModSeqProvider modSeqProvider, 
+            MailboxSession mailboxSession, int maxRetries, 
CassandraTypesProvider typesProvider, AttachmentMapper attachmentMapper,
+            MessageId.Factory messageIdFactory) {
         this.session = session;
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
@@ -138,6 +143,7 @@ public class CassandraMessageMapper implements 
MessageMapper {
         this.maxRetries = maxRetries;
         this.typesProvider = typesProvider;
         this.attachmentMapper = attachmentMapper;
+        this.messageIdFactory = messageIdFactory;
     }
 
     @Override
@@ -310,6 +316,7 @@ public class CassandraMessageMapper implements 
MessageMapper {
     private MailboxMessage message(Row row, FetchType fetchType) {
         SimpleMailboxMessage message =
             new SimpleMailboxMessage(
+                messageIdFactory.generate(),
                 row.getDate(INTERNAL_DATE),
                 row.getLong(FULL_CONTENT_OCTETS),
                 row.getInt(BODY_START_OCTET),

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/main/resources/META-INF/spring/mailbox-cassandra.xml
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/resources/META-INF/spring/mailbox-cassandra.xml 
b/mailbox/cassandra/src/main/resources/META-INF/spring/mailbox-cassandra.xml
index 3e2c733..331f322 100644
--- a/mailbox/cassandra/src/main/resources/META-INF/spring/mailbox-cassandra.xml
+++ b/mailbox/cassandra/src/main/resources/META-INF/spring/mailbox-cassandra.xml
@@ -33,6 +33,7 @@
         <constructor-arg index="0" ref="cassandra-sessionMapperFactory"/>
         <constructor-arg index="1" ref="authenticator"/>
         <constructor-arg index="2" ref="cassandra-locker"/>
+        <constructor-arg index="3" ref="cassandra-messageIdFactory" />
         <property name="messageSearchIndex" ref="elasticsearch-listener"/>
         <property name="quotaManager" ref="quotaManager"/>
         <property name="quotaRootResolver" ref="quotaRootResolver"/>
@@ -40,6 +41,8 @@
         <property name="delegatingMailboxListener" ref="delegating-listener"/>
     </bean>
 
+    <bean id="cassandra-messageIdFactory" 
class="org.apache.james.mailbox.store.mail.model.DefaultMessageId.Factory" />
+
     <bean id ="cassandra-subscriptionManager"
           
class="org.apache.james.mailbox.cassandra.CassandraSubscriptionManager"
           lazy-init="true">

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
index 230992d..82c502b 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
@@ -33,6 +33,7 @@ import 
org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.junit.runner.RunWith;
 import org.xenei.junit.contract.Contract;
@@ -64,12 +65,14 @@ public class CassandraMailboxManagerTest {
             CASSANDRA.ensureAllTables();
             CassandraUidProvider uidProvider = new 
CassandraUidProvider(CASSANDRA.getConf());
             CassandraModSeqProvider modSeqProvider = new 
CassandraModSeqProvider(CASSANDRA.getConf());
+            DefaultMessageId.Factory messageIdFactory = new 
DefaultMessageId.Factory();
             CassandraMailboxSessionMapperFactory mapperFactory = new 
CassandraMailboxSessionMapperFactory(uidProvider,
                 modSeqProvider,
                 CASSANDRA.getConf(),
-                CASSANDRA.getTypesProvider());
+                CASSANDRA.getTypesProvider(),
+                messageIdFactory);
 
-            CassandraMailboxManager manager = new 
CassandraMailboxManager(mapperFactory, null, new NoMailboxPathLocker(), new 
MessageParser());
+            CassandraMailboxManager manager = new 
CassandraMailboxManager(mapperFactory, null, new NoMailboxPathLocker(), new 
MessageParser(), messageIdFactory);
             try {
                 manager.init();
             } catch (MailboxException e) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
index 9aa45d4..1bfcbb1 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactoryTest.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.UidProvider;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.junit.Before;
 import org.junit.Test;
@@ -62,7 +63,8 @@ public class CassandraMailboxSessionMapperFactoryTest {
     public void testCreateMessageMapper() throws Exception {
         LOG.info("createMessageMapper");
         MailboxSession session = null;
-        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory(null, null, null, null);
+        DefaultMessageId.Factory messageIdFactory = new 
DefaultMessageId.Factory();
+        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory(null, null, null, null, messageIdFactory);
         MessageMapper messageMapper = instance.createMessageMapper(session);
         assertNotNull(messageMapper);
         assertTrue(messageMapper instanceof MessageMapper);
@@ -76,7 +78,8 @@ public class CassandraMailboxSessionMapperFactoryTest {
     public void testCreateMailboxMapper() throws Exception {
         LOG.info("createMailboxMapper");
         MailboxSession session = null;
-        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory(null, null, null, null);
+        DefaultMessageId.Factory messageIdFactory = new 
DefaultMessageId.Factory();
+        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory(null, null, null, null, messageIdFactory);
         MailboxMapper mailboxMapper = instance.createMailboxMapper(session);
         assertNotNull(mailboxMapper);
         assertTrue(mailboxMapper instanceof MailboxMapper);
@@ -90,7 +93,8 @@ public class CassandraMailboxSessionMapperFactoryTest {
     public void testCreateSubscriptionMapper() throws Exception {
         LOG.info("createSubscriptionMapper");
         MailboxSession session = null;
-        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory(null, null, null, null);
+        DefaultMessageId.Factory messageIdFactory = new 
DefaultMessageId.Factory();
+        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory(null, null, null, null, messageIdFactory);
         SubscriptionMapper subscriptionMapper = 
instance.createSubscriptionMapper(session);
         assertNotNull(subscriptionMapper);
         assertTrue(subscriptionMapper instanceof SubscriptionMapper);
@@ -104,7 +108,8 @@ public class CassandraMailboxSessionMapperFactoryTest {
     public void testGetModSeqProvider() {
         LOG.info("getModSeqProvider");
         ModSeqProvider expResult = new 
CassandraModSeqProvider(CLUSTER.getConf());
-        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory(null, expResult, null, null);
+        DefaultMessageId.Factory messageIdFactory = new 
DefaultMessageId.Factory();
+        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory(null, expResult, null, null, 
messageIdFactory);
         ModSeqProvider result = instance.getModSeqProvider();
         assertEquals(expResult, result);
     }
@@ -117,7 +122,8 @@ public class CassandraMailboxSessionMapperFactoryTest {
     public void testGetUidProvider() {
         LOG.info("getUidProvider");
         UidProvider expResult = new CassandraUidProvider(CLUSTER.getConf());
-        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory((CassandraUidProvider) expResult, null, 
null, null);
+        DefaultMessageId.Factory messageIdFactory = new 
DefaultMessageId.Factory();
+        CassandraMailboxSessionMapperFactory instance = new 
CassandraMailboxSessionMapperFactory((CassandraUidProvider) expResult, null, 
null, null, messageIdFactory);
         UidProvider result = instance.getUidProvider();
         assertEquals(expResult, result);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
index 900beb9..7d72d7e 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
@@ -25,6 +25,7 @@ import org.apache.james.mailbox.SubscriptionManager;
 import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
 import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
 import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 
 /**
  * Test Cassandra subscription against some general purpose written code.
@@ -40,7 +41,8 @@ public class CassandraSubscriptionManagerTest extends 
AbstractSubscriptionManage
                 new CassandraUidProvider(cassandra.getConf()),
                 new CassandraModSeqProvider(cassandra.getConf()),
                 cassandra.getConf(),
-                cassandra.getTypesProvider()
+                cassandra.getTypesProvider(),
+                new DefaultMessageId.Factory()
             )
         );
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
index 9e1517c..704d111 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
@@ -38,6 +38,7 @@ import 
org.apache.james.mailbox.store.AbstractMailboxManagerAttachmentTest;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 
 public class CassandraMailboxManagerAttachmentTest extends 
AbstractMailboxManagerAttachmentTest {
@@ -59,14 +60,15 @@ public class CassandraMailboxManagerAttachmentTest extends 
AbstractMailboxManage
                 new CassandraUidProvider(cassandra.getConf()),
                 new CassandraModSeqProvider(cassandra.getConf()),
                 cassandra.getConf(),
-                cassandra.getTypesProvider());
+                cassandra.getTypesProvider(),
+                new DefaultMessageId.Factory());
         Authenticator noAuthenticator = null;
-        mailboxManager = new 
CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new 
NoMailboxPathLocker(), new MessageParser());
+        mailboxManager = new 
CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new 
NoMailboxPathLocker(), new MessageParser(), new DefaultMessageId.Factory()); 
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any()))
             .thenThrow(new RuntimeException("Message parser set to fail"));
-        parseFailingMailboxManager = new 
CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new 
NoMailboxPathLocker(), failingMessageParser);
+        parseFailingMailboxManager = new 
CassandraMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new 
NoMailboxPathLocker(), failingMessageParser, new DefaultMessageId.Factory()); 
         parseFailingMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
index ae3c1eb..ac8d177 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
@@ -32,10 +32,12 @@ import 
org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
 import org.apache.james.mailbox.store.mail.AttachmentMapper;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.MapperProvider;
 
 public class CassandraMapperProvider implements MapperProvider {
@@ -51,12 +53,18 @@ public class CassandraMapperProvider implements 
MapperProvider {
         new CassandraAnnotationModule()));
 
     @Override
+    public MessageId generateMessageId() {
+        return new DefaultMessageId.Factory().generate();
+    }
+    
+    @Override
     public MailboxMapper createMailboxMapper() throws MailboxException {
         return new CassandraMailboxSessionMapperFactory(
             new CassandraUidProvider(cassandra.getConf()),
             new CassandraModSeqProvider(cassandra.getConf()),
             cassandra.getConf(),
-            cassandra.getTypesProvider()
+            cassandra.getTypesProvider(),
+            new DefaultMessageId.Factory()
         ).getMailboxMapper(new MockMailboxSession("benwa"));
     }
 
@@ -66,7 +74,8 @@ public class CassandraMapperProvider implements 
MapperProvider {
             new CassandraUidProvider(cassandra.getConf()),
             new CassandraModSeqProvider(cassandra.getConf()),
             cassandra.getConf(),
-            cassandra.getTypesProvider()
+            cassandra.getTypesProvider(),
+            new DefaultMessageId.Factory()
         ).getMessageMapper(new MockMailboxSession("benwa"));
     }
 
@@ -76,7 +85,8 @@ public class CassandraMapperProvider implements 
MapperProvider {
                 new CassandraUidProvider(cassandra.getConf()),
                 new CassandraModSeqProvider(cassandra.getConf()),
                 cassandra.getConf(),
-                cassandra.getTypesProvider()
+                cassandra.getTypesProvider(),
+                new DefaultMessageId.Factory()
             ).getAttachmentMapper(new MockMailboxSession("benwa"));
     }
 
@@ -106,7 +116,8 @@ public class CassandraMapperProvider implements 
MapperProvider {
                 new CassandraUidProvider(cassandra.getConf()),
                 new CassandraModSeqProvider(cassandra.getConf()),
                 cassandra.getConf(),
-                cassandra.getTypesProvider()
+                cassandra.getTypesProvider(),
+                new DefaultMessageId.Factory()
             ).getAnnotationMapper(new MockMailboxSession("benwa"));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index edfc939..a60a747 100644
--- 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -33,10 +33,12 @@ import 
org.apache.james.mailbox.elasticsearch.utils.TestingClientProvider;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
 import org.elasticsearch.client.Client;
@@ -70,13 +72,15 @@ public class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest
             new ElasticSearchIndexer(client, new 
DeleteByQueryPerformer(client, Executors.newSingleThreadExecutor(), 
BATCH_SIZE)),
             new ElasticSearchSearcher(client, new QueryConverter(new 
CriterionConverter()), SEARCH_SIZE, new InMemoryId.Factory()),
             new MessageToElasticSearchJson(new DefaultTextExtractor(), 
ZoneId.of("Europe/Paris")));
+        MessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
         storeMailboxManager = new InMemoryMailboxManager(
             mapperFactory,
             new FakeAuthenticator(),
             new JVMMailboxPathLocker(),
             new UnionMailboxACLResolver(),
             new SimpleGroupMembershipResolver(),
-            new MessageParser());
+            new MessageParser(),
+            messageIdFactory);
         storeMailboxManager.setMessageSearchIndex(messageSearchIndex);
         storeMailboxManager.init();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
index fa13685..0a47807 100644
--- 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/json/MailboxMessageToElasticSearchJsonTest.java
@@ -37,8 +37,10 @@ import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxSession.User;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.TestId;
 import org.apache.james.mailbox.store.extractor.DefaultTextExtractor;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
@@ -55,6 +57,7 @@ public class MailboxMessageToElasticSearchJsonTest {
     public static final int SIZE = 25;
     public static final int BODY_START_OCTET = 100;
     public static final TestId MAILBOX_ID = TestId.of(18L);
+    public static final MessageId MESSAGE_ID = new DefaultMessageId();
     public static final long MOD_SEQ = 42L;
     public static final MessageUid UID = MessageUid.of(25);
     public static final Charset CHARSET = Charsets.UTF_8;
@@ -78,7 +81,8 @@ public class MailboxMessageToElasticSearchJsonTest {
         MessageToElasticSearchJson messageToElasticSearchJson = new 
MessageToElasticSearchJson(
                 new DefaultTextExtractor(),
                 ZoneId.of("Europe/Paris"));
-        MailboxMessage spamMail = new SimpleMailboxMessage(date,
+        MailboxMessage spamMail = new SimpleMailboxMessage(MESSAGE_ID,
+                date,
                 SIZE,
                 BODY_START_OCTET,
                 new 
SharedByteArrayInputStream("message".getBytes(Charsets.UTF_8)),
@@ -96,13 +100,14 @@ public class MailboxMessageToElasticSearchJsonTest {
         MessageToElasticSearchJson messageToElasticSearchJson = new 
MessageToElasticSearchJson(
             new DefaultTextExtractor(),
             ZoneId.of("Europe/Paris"));
-        MailboxMessage spamMail = new SimpleMailboxMessage(date,
-            SIZE,
-            BODY_START_OCTET,
-            new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/spamMail.eml"))),
-            new Flags(),
-            propertyBuilder,
-            MAILBOX_ID);
+        MailboxMessage spamMail = new SimpleMailboxMessage(MESSAGE_ID,
+                date,
+                SIZE,
+                BODY_START_OCTET,
+                new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/spamMail.eml"))),
+                new Flags(),
+                propertyBuilder,
+                MAILBOX_ID);
         spamMail.setUid(UID);
         spamMail.setModSeq(MOD_SEQ);
         assertThatJson(messageToElasticSearchJson.convertToJson(spamMail, 
ImmutableList.of(new MockMailboxSession("username").getUser())))
@@ -115,13 +120,14 @@ public class MailboxMessageToElasticSearchJsonTest {
         MessageToElasticSearchJson messageToElasticSearchJson = new 
MessageToElasticSearchJson(
             new DefaultTextExtractor(),
             ZoneId.of("Europe/Paris"));
-        MailboxMessage htmlMail = new SimpleMailboxMessage(date,
-            SIZE,
-            BODY_START_OCTET,
-            new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/htmlMail.eml"))),
-            new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("social", "pocket-money").build(),
-            propertyBuilder,
-            MAILBOX_ID);
+        MailboxMessage htmlMail = new SimpleMailboxMessage(MESSAGE_ID,
+                date,
+                SIZE,
+                BODY_START_OCTET,
+                new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/htmlMail.eml"))),
+                new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("social", "pocket-money").build(),
+                propertyBuilder,
+                MAILBOX_ID);
         htmlMail.setModSeq(MOD_SEQ);
         htmlMail.setUid(UID);
         assertThatJson(messageToElasticSearchJson.convertToJson(htmlMail, 
ImmutableList.of(new MockMailboxSession("username").getUser())))
@@ -134,13 +140,14 @@ public class MailboxMessageToElasticSearchJsonTest {
         MessageToElasticSearchJson messageToElasticSearchJson = new 
MessageToElasticSearchJson(
             new DefaultTextExtractor(),
             ZoneId.of("Europe/Paris"));
-        MailboxMessage pgpSignedMail = new SimpleMailboxMessage(date,
-            SIZE,
-            BODY_START_OCTET,
-            new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/pgpSignedMail.eml"))),
-            new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("debian", "security").build(),
-            propertyBuilder,
-            MAILBOX_ID);
+        MailboxMessage pgpSignedMail = new SimpleMailboxMessage(MESSAGE_ID,
+                date,
+                SIZE,
+                BODY_START_OCTET,
+                new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/pgpSignedMail.eml"))),
+                new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("debian", "security").build(),
+                propertyBuilder,
+                MAILBOX_ID);
         pgpSignedMail.setModSeq(MOD_SEQ);
         pgpSignedMail.setUid(UID);
         assertThatJson(messageToElasticSearchJson.convertToJson(pgpSignedMail, 
ImmutableList.of(new MockMailboxSession("username").getUser())))
@@ -153,13 +160,14 @@ public class MailboxMessageToElasticSearchJsonTest {
         MessageToElasticSearchJson messageToElasticSearchJson = new 
MessageToElasticSearchJson(
             new DefaultTextExtractor(),
             ZoneId.of("Europe/Paris"));
-        MailboxMessage mail = new SimpleMailboxMessage(date,
-            SIZE,
-            BODY_START_OCTET,
-            new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mail.eml"))),
-            new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("debian", "security").build(),
-            propertyBuilder,
-            MAILBOX_ID);
+        MailboxMessage mail = new SimpleMailboxMessage(MESSAGE_ID,
+                date,
+                SIZE,
+                BODY_START_OCTET,
+                new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/mail.eml"))),
+                new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("debian", "security").build(),
+                propertyBuilder,
+                MAILBOX_ID);
         mail.setModSeq(MOD_SEQ);
         mail.setUid(UID);
         assertThatJson(messageToElasticSearchJson.convertToJson(mail, 
@@ -173,13 +181,14 @@ public class MailboxMessageToElasticSearchJsonTest {
         MessageToElasticSearchJson messageToElasticSearchJson = new 
MessageToElasticSearchJson(
             new DefaultTextExtractor(),
             ZoneId.of("Europe/Paris"));
-        MailboxMessage recursiveMail = new SimpleMailboxMessage(date,
-            SIZE,
-            BODY_START_OCTET,
-            new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/recursiveMail.eml"))),
-            new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("debian", "security").build(),
-            propertyBuilder,
-            MAILBOX_ID);
+        MailboxMessage recursiveMail = new SimpleMailboxMessage(MESSAGE_ID, 
+                date,
+                SIZE,
+                BODY_START_OCTET,
+                new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/recursiveMail.eml"))),
+                new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("debian", "security").build(),
+                propertyBuilder,
+                MAILBOX_ID);
         recursiveMail.setModSeq(MOD_SEQ);
         recursiveMail.setUid(UID);
         assertThatJson(messageToElasticSearchJson.convertToJson(recursiveMail, 
ImmutableList.of(new MockMailboxSession("username").getUser())))
@@ -192,13 +201,14 @@ public class MailboxMessageToElasticSearchJsonTest {
         MessageToElasticSearchJson messageToElasticSearchJson = new 
MessageToElasticSearchJson(
             new DefaultTextExtractor(),
             ZoneId.of("Europe/Paris"));
-        MailboxMessage mailWithNoInternalDate = new SimpleMailboxMessage(null,
-            SIZE,
-            BODY_START_OCTET,
-            new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/recursiveMail.eml"))),
-            new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("debian", "security").build(),
-            propertyBuilder,
-            MAILBOX_ID);
+        MailboxMessage mailWithNoInternalDate = new 
SimpleMailboxMessage(MESSAGE_ID,
+                null,
+                SIZE,
+                BODY_START_OCTET,
+                new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/recursiveMail.eml"))),
+                new FlagsBuilder().add(Flags.Flag.DELETED, 
Flags.Flag.SEEN).add("debian", "security").build(),
+                propertyBuilder,
+                MAILBOX_ID);
         mailWithNoInternalDate.setModSeq(MOD_SEQ);
         mailWithNoInternalDate.setUid(UID);
         
assertThatJson(messageToElasticSearchJson.convertToJson(mailWithNoInternalDate, 
ImmutableList.of(new MockMailboxSession("username").getUser())))
@@ -214,7 +224,7 @@ public class MailboxMessageToElasticSearchJsonTest {
             ZoneId.of("Europe/Paris"));
         MailboxMessage mailWithNoMailboxId;
         try {
-            mailWithNoMailboxId = new SimpleMailboxMessage(date,
+            mailWithNoMailboxId = new SimpleMailboxMessage(MESSAGE_ID, date,
                 SIZE,
                 BODY_START_OCTET,
                 new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/recursiveMail.eml"))),
@@ -260,7 +270,7 @@ public class MailboxMessageToElasticSearchJsonTest {
         MessageToElasticSearchJson messageToElasticSearchJson = new 
MessageToElasticSearchJson(
             new TikaTextExtractor(),
             ZoneId.of("Europe/Paris"));
-        MailboxMessage spamMail = new SimpleMailboxMessage(date,
+        MailboxMessage spamMail = new SimpleMailboxMessage(MESSAGE_ID, date,
             SIZE,
             BODY_START_OCTET,
             new 
SharedByteArrayInputStream(IOUtils.toByteArray(ClassLoader.getSystemResourceAsStream("eml/nonTextual.eml"))),

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
index cd3ce88..baae851 100644
--- 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
+++ 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
@@ -28,6 +28,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.hbase.mail.HBaseMailboxMapper;
 import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxManager;
@@ -42,12 +43,16 @@ import 
org.apache.james.mailbox.store.transaction.TransactionalMapper;
  */
 public class HBaseMailboxManager extends StoreMailboxManager {
 
-    public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, MailboxPathLocker locker, MailboxACLResolver 
aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser 
messageParser) {
-        super(mapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver, messageParser);
+    public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, 
+            MailboxPathLocker locker, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver, 
+            MessageParser messageParser, MessageId.Factory messageIdFactory) {
+        super(mapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver, messageParser, messageIdFactory);
     }
 
-    public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver, MessageParser messageParser) {
-        super(mapperFactory, authenticator, new JVMMailboxPathLocker(), 
aclResolver, groupMembershipResolver, messageParser);
+    public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, 
+            MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, 
+            MessageParser messageParser, MessageId.Factory messageIdFactory) {
+        super(mapperFactory, authenticator, new JVMMailboxPathLocker(), 
aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
     }
 
     @Override
@@ -97,6 +102,7 @@ public class HBaseMailboxManager extends StoreMailboxManager 
{
             getGroupMembershipResolver(),
             getQuotaManager(),
             getQuotaRootResolver(),
-            getMessageParser());
+            getMessageParser(),
+            getMessageIdFactory());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
index be5fdb9..ecb3296 100644
--- 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
+++ 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
@@ -43,6 +43,8 @@ import 
org.apache.james.mailbox.exception.SubscriptionException;
 import org.apache.james.mailbox.hbase.mail.HBaseMailboxMapper;
 import org.apache.james.mailbox.hbase.mail.HBaseMessageMapper;
 import org.apache.james.mailbox.hbase.user.HBaseSubscriptionMapper;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
 import org.apache.james.mailbox.store.mail.AttachmentMapper;
@@ -62,6 +64,7 @@ public class HBaseMailboxSessionMapperFactory extends 
MailboxSessionMapperFactor
     private final Configuration conf;
     private final UidProvider uidProvider;
     private final ModSeqProvider modSeqProvider;
+    private Factory messageIdFactory;
 
     /**
      * Creates  the necessary tables in HBase if they do not exist.
@@ -73,10 +76,11 @@ public class HBaseMailboxSessionMapperFactory extends 
MailboxSessionMapperFactor
      * @throws ZooKeeperConnectionException
      * @throws IOException
      */
-    public HBaseMailboxSessionMapperFactory(Configuration conf, UidProvider 
uidProvider, ModSeqProvider modSeqProvider) {
+    public HBaseMailboxSessionMapperFactory(Configuration conf, UidProvider 
uidProvider, ModSeqProvider modSeqProvider, MessageId.Factory messageIdFactory) 
{
         this.conf = conf;
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
+        this.messageIdFactory = messageIdFactory;
 
         //TODO: add better exception handling for this
         HBaseAdmin hbaseAdmin = null;
@@ -131,7 +135,7 @@ public class HBaseMailboxSessionMapperFactory extends 
MailboxSessionMapperFactor
 
     @Override
     public MessageMapper createMessageMapper(MailboxSession session) throws 
MailboxException {
-        return new HBaseMessageMapper(session, uidProvider, modSeqProvider, 
this.conf);
+        return new HBaseMessageMapper(session, uidProvider, modSeqProvider, 
messageIdFactory, this.conf);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
index 8c6fff3..793a1cd 100644
--- 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
+++ 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
@@ -25,6 +25,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -41,8 +42,11 @@ import 
org.apache.james.mailbox.store.search.MessageSearchIndex;
 public class HBaseMessageManager extends StoreMessageManager {
 
     public HBaseMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index,
-            MailboxEventDispatcher dispatcher, MailboxPathLocker locker, 
Mailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, QuotaManager quotaManager, QuotaRootResolver 
quotaRootResolver, MessageParser messageParser) throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver, quotaManager, quotaRootResolver, messageParser);
+            MailboxEventDispatcher dispatcher, MailboxPathLocker locker, 
Mailbox mailbox, MailboxACLResolver aclResolver,
+            GroupMembershipResolver groupMembershipResolver, QuotaManager 
quotaManager, 
+            QuotaRootResolver quotaRootResolver, MessageParser messageParser, 
MessageId.Factory messageIdFactory) throws MailboxException {
+        super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver, quotaManager, 
+                quotaRootResolver, messageParser, messageIdFactory);
 
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java
index 982f035..01640d8 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java
@@ -74,6 +74,7 @@ import org.apache.james.mailbox.hbase.io.ChunkInputStream;
 import org.apache.james.mailbox.hbase.mail.HBaseMailboxMessage;
 import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
@@ -253,7 +254,7 @@ public class HBaseUtils {
      * @param result the result object containing message data
      * @return a HBaseMailboxMessage instance with message metadata.
      */
-    public static MailboxMessage messageMetaFromResult(Configuration conf, 
Result result) {
+    public static MailboxMessage messageMetaFromResult(Configuration conf, 
Result result, MessageId.Factory messageIdFactory) {
         HBaseMailboxMessage message = null;
         Flags flags = new Flags();
         List<Property> propList = new ArrayList<Property>();
@@ -323,7 +324,7 @@ public class HBaseUtils {
         PropertyBuilder props = new PropertyBuilder(propList);
         props.setMediaType(mediaType);
         props.setSubType(subType);
-        message = new HBaseMailboxMessage(conf, uuid, internalDate, flags, 
contentOctets, (int) (contentOctets - bodyOctets), props);
+        message = new HBaseMailboxMessage(conf, uuid, 
messageIdFactory.generate(), internalDate, flags, contentOctets, (int) 
(contentOctets - bodyOctets), props);
         message.setUid(uid);
         message.setModSeq(modSeq);
         message.setTextualLineCount(textualLineCount);

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
index 842b0c7..2815b61 100644
--- 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
+++ 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
@@ -42,7 +42,6 @@ import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.hbase.io.ChunkInputStream;
 import org.apache.james.mailbox.model.MessageAttachment;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.FlagsBuilder;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
@@ -95,15 +94,17 @@ public class HBaseMailboxMessage implements MailboxMessage {
     /** Meta data for this message */
     private final List<Property> properties;
     private final List<String> userFlags;
+    private final MessageId messageId;
     
     /**
      * Create a copy of the given message.
      * All properties are cloned except mailbox and UID.
      */
-    public HBaseMailboxMessage(Configuration conf, HBaseId mailboxId, 
MessageUid uid, long modSeq, MailboxMessage original) throws MailboxException {
+    public HBaseMailboxMessage(Configuration conf, HBaseId mailboxId, 
MessageUid uid, MessageId messageId, long modSeq, MailboxMessage original) 
throws MailboxException {
         this.conf = conf;
         this.mailboxId = mailboxId;
         this.uid = uid;
+        this.messageId = messageId;
         this.modSeq = modSeq;
         this.userFlags = new ArrayList<String>();
         setFlags(original.createFlags());
@@ -122,10 +123,12 @@ public class HBaseMailboxMessage implements 
MailboxMessage {
         this.properties = original.getProperties();
     }
 
-    public HBaseMailboxMessage(Configuration conf, HBaseId mailboxId, Date 
internalDate, Flags flags, long contentOctets, int bodyStartOctet, 
PropertyBuilder propertyBuilder) {
+    public HBaseMailboxMessage(Configuration conf, HBaseId mailboxId, 
MessageId messageId,
+            Date internalDate, Flags flags, long contentOctets, int 
bodyStartOctet, PropertyBuilder propertyBuilder) {
         super();
         this.conf = conf;
         this.mailboxId = mailboxId;
+        this.messageId = messageId;
         this.internalDate = internalDate;
         userFlags = new ArrayList<String>();
 
@@ -235,7 +238,7 @@ public class HBaseMailboxMessage implements MailboxMessage {
 
     @Override
     public MessageId getMessageId() {
-        return new DefaultMessageId(getMailboxId(), getUid());
+        return messageId;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
index 713f3a3..dba79fb 100644
--- 
a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
+++ 
b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
@@ -68,6 +68,8 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.hbase.io.ChunkOutputStream;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MessageRange.Type;
@@ -95,13 +97,17 @@ public class HBaseMessageMapper extends 
NonTransactionalMapper implements Messag
     private final MailboxSession mailboxSession;
     private final UidProvider uidProvider;
     private final ModSeqProvider modSeqProvider;
+    private final Factory messageIdFactory;
 
     public HBaseMessageMapper(MailboxSession session,
             final UidProvider uidProvider,
-            ModSeqProvider modSeqProvider, Configuration conf) {
+            ModSeqProvider modSeqProvider, 
+            MessageId.Factory messageIdFactory, 
+            Configuration conf) {
         this.mailboxSession = session;
         this.modSeqProvider = modSeqProvider;
         this.uidProvider = uidProvider;
+        this.messageIdFactory = messageIdFactory;
         this.conf = conf;
     }
 
@@ -159,7 +165,7 @@ public class HBaseMessageMapper extends 
NonTransactionalMapper implements Messag
         Result result;
         long count = batchSize > 0 ? batchSize : Long.MAX_VALUE;
         while (((result = scanner.next()) != null) && (count > 0)) {
-            messageList.add(messageMetaFromResult(conf, result));
+            messageList.add(messageMetaFromResult(conf, result, 
messageIdFactory));
             count--;
         }
         scanner.close();
@@ -186,7 +192,7 @@ public class HBaseMessageMapper extends 
NonTransactionalMapper implements Messag
         Result result = messages.get(get);
         MailboxMessage message = null;
         if (!result.isEmpty()) {
-            message = messageMetaFromResult(conf, result);
+            message = messageMetaFromResult(conf, result, messageIdFactory);
             messageList.add(message);
         }
         messages.close();
@@ -213,7 +219,7 @@ public class HBaseMessageMapper extends 
NonTransactionalMapper implements Messag
         Result result;
         long count = batchSize > 0 ? batchSize : Long.MAX_VALUE;
         while (((result = scanner.next()) != null) && (count > 0)) {
-            messageList.add(messageMetaFromResult(conf, result));
+            messageList.add(messageMetaFromResult(conf, result, 
messageIdFactory));
             count--;
         }
         scanner.close();
@@ -259,7 +265,7 @@ public class HBaseMessageMapper extends 
NonTransactionalMapper implements Messag
             if (count == 0) {
                 break;
             }
-            MailboxMessage message = messageMetaFromResult(conf, result);
+            MailboxMessage message = messageMetaFromResult(conf, result, 
messageIdFactory);
             messageList.add(message);
             count--;
         }
@@ -573,7 +579,7 @@ public class HBaseMessageMapper extends 
NonTransactionalMapper implements Messag
         //TODO: check if creating a HBase message is the right thing to do
         HBaseId mailboxId = (HBaseId) mailbox.getMailboxId();
         HBaseMailboxMessage message = new HBaseMailboxMessage(conf,
-                mailboxId, uid, modSeq, original);
+                mailboxId, uid, original.getMessageId(), modSeq, original);
         return save(mailboxId, message);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
index 5c161fb..7cf8f74 100644
--- 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
+++ 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxManagerTest.java
@@ -35,6 +35,8 @@ import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.hbase.mail.HBaseModSeqProvider;
 import org.apache.james.mailbox.hbase.mail.HBaseUidProvider;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.junit.runner.RunWith;
 import org.xenei.junit.contract.Contract;
@@ -58,14 +60,17 @@ public class HBaseMailboxManagerTest {
 
             HBaseUidProvider uidProvider = new 
HBaseUidProvider(CLUSTER.getConf());
             HBaseModSeqProvider modSeqProvider = new 
HBaseModSeqProvider(CLUSTER.getConf());
+            MessageId.Factory messageIdFactory = new 
DefaultMessageId.Factory();
             HBaseMailboxSessionMapperFactory mapperFactory = new 
HBaseMailboxSessionMapperFactory(CLUSTER.getConf(),
-                uidProvider, modSeqProvider);
+                uidProvider, modSeqProvider, messageIdFactory);
 
             HBaseMailboxManager manager = new 
HBaseMailboxManager(mapperFactory,
                 null,
                 new UnionMailboxACLResolver(),
                 new SimpleGroupMembershipResolver(),
-                new MessageParser());
+                new MessageParser(),
+                messageIdFactory
+                );
 
             try {
                 manager.init();

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
index c878c4a..01272b1 100644
--- 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
+++ 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
@@ -39,6 +39,7 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.hbase.mail.HBaseModSeqProvider;
 import org.apache.james.mailbox.hbase.mail.HBaseUidProvider;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
@@ -87,7 +88,8 @@ public class HBaseMailboxSessionMapperFactoryTest {
     public void testCreateMessageMapper() throws Exception {
         LOG.info("createMessageMapper");
         MailboxSession session = null;
-        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, null);
+        MessageId.Factory messageIdFactory = null;
+        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, null, messageIdFactory);
         MessageMapper messageMapper = instance.createMessageMapper(session);
         assertNotNull(messageMapper);
         assertTrue(messageMapper instanceof MessageMapper);
@@ -101,7 +103,8 @@ public class HBaseMailboxSessionMapperFactoryTest {
     public void testCreateMailboxMapper() throws Exception {
         LOG.info("createMailboxMapper");
         MailboxSession session = null;
-        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, null);
+        MessageId.Factory messageIdFactory = null;
+        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, null, messageIdFactory);
         MailboxMapper mailboxMapper = instance.createMailboxMapper(session);
         assertNotNull(mailboxMapper);
         assertTrue(mailboxMapper instanceof MailboxMapper);
@@ -115,7 +118,8 @@ public class HBaseMailboxSessionMapperFactoryTest {
     public void testCreateSubscriptionMapper() throws Exception {
         LOG.info("createSubscriptionMapper");
         MailboxSession session = null;
-        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, null);
+        MessageId.Factory messageIdFactory = null;
+        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, null, messageIdFactory);
         SubscriptionMapper subscriptionMapper = 
instance.createSubscriptionMapper(session);
         assertNotNull(subscriptionMapper);
         assertTrue(subscriptionMapper instanceof SubscriptionMapper);
@@ -129,7 +133,8 @@ public class HBaseMailboxSessionMapperFactoryTest {
     public void testGetModSeqProvider() {
         LOG.info("getModSeqProvider");
         ModSeqProvider expResult = new HBaseModSeqProvider(conf);
-        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, expResult);
+        MessageId.Factory messageIdFactory = null;
+        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, expResult, messageIdFactory);
         ModSeqProvider result = instance.getModSeqProvider();
         assertEquals(expResult, result);
     }
@@ -141,7 +146,8 @@ public class HBaseMailboxSessionMapperFactoryTest {
     public void testGetUidProvider() {
         LOG.info("getUidProvider");
         UidProvider expResult = new HBaseUidProvider(conf);
-        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, expResult, null);
+        MessageId.Factory messageIdFactory = null;
+        HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, expResult, null, messageIdFactory);
         UidProvider result = instance.getUidProvider();
         assertEquals(expResult, result);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
index d5ecb65..40458d6 100644
--- 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
+++ 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
@@ -56,6 +56,7 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.Property;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
@@ -147,7 +148,8 @@ public class HBaseUtilsTest {
         flags.add("userFlag1");
         flags.add("userFlag2");
         HBaseId uuid = HBaseId.of(UUID.randomUUID());
-        final SimpleMailboxMessage message = new SimpleMailboxMessage(new 
Date(), 100, 10, null, flags, new PropertyBuilder(), uuid);
+        DefaultMessageId messageId = new DefaultMessageId();
+        final SimpleMailboxMessage message = new 
SimpleMailboxMessage(messageId, new Date(), 100, 10, null, flags, new 
PropertyBuilder(), uuid);
         message.setUid(MessageUid.of(1));
         Put put = flagsToPut(message, flags);
         //test for the system flags

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessageMapperTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessageMapperTest.java
 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessageMapperTest.java
index 741c1fc..50b6d27 100644
--- 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessageMapperTest.java
+++ 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessageMapperTest.java
@@ -49,6 +49,7 @@ import org.apache.james.mailbox.hbase.HBaseClusterSingleton;
 import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
@@ -74,6 +75,7 @@ public class HBaseMailboxMessageMapperTest {
     private static final List<MailboxMessage> MESSAGE_NO = new 
ArrayList<MailboxMessage>();
     private static final int COUNT = 5;
     private static Configuration conf;
+    private DefaultMessageId.Factory messageIdFactory;
     /*
      * we mock a simple message content
      */
@@ -97,9 +99,10 @@ public class HBaseMailboxMessageMapperTest {
         conf = CLUSTER.getConf();
         uidProvider = new HBaseUidProvider(conf);
         modSeqProvider = new HBaseModSeqProvider(conf);
+        messageIdFactory = new DefaultMessageId.Factory();
         generateTestData();
         final MailboxSession session = new MockMailboxSession("ieugen");
-        messageMapper = new HBaseMessageMapper(session, uidProvider, 
modSeqProvider, conf);
+        messageMapper = new HBaseMessageMapper(session, uidProvider, 
modSeqProvider, messageIdFactory, conf);
         for (MailboxMessage message : MESSAGE_NO) {
             messageMapper.add(MBOXES.get(1), message);
         }
@@ -118,7 +121,7 @@ public class HBaseMailboxMessageMapperTest {
         CLUSTER.clearTable(SUBSCRIPTIONS);
     }
 
-    public static void generateTestData() {
+    public void generateTestData() {
         final Random random = new Random();
         MailboxPath mboxPath;
         final PropertyBuilder propBuilder = new PropertyBuilder();
@@ -142,7 +145,7 @@ public class HBaseMailboxMessageMapperTest {
         final Date today = new Date();
 
         for (int i = 0; i < COUNT * 2; i++) {
-            myMsg = new SimpleMailboxMessage(today, messageTemplate.length,
+            myMsg = new SimpleMailboxMessage(messageIdFactory.generate(), 
today, messageTemplate.length,
                     messageTemplate.length - 20, content, flags, propBuilder,
                     MBOXES.get(1).getMailboxId());
             if (i == COUNT * 2 - 1) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapperTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapperTest.java
 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapperTest.java
index 6d01cec..c4feb6e 100644
--- 
a/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapperTest.java
+++ 
b/mailbox/hbase/src/test/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapperTest.java
@@ -32,9 +32,11 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.james.mailbox.exception.SubscriptionException;
 import org.apache.james.mailbox.hbase.HBaseClusterSingleton;
 import org.apache.james.mailbox.hbase.HBaseMailboxSessionMapperFactory;
+import org.apache.james.mailbox.model.MessageId;
 
 import static org.apache.james.mailbox.hbase.HBaseNames.*;
 
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.user.model.Subscription;
 import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
 
@@ -65,7 +67,8 @@ public class HBaseSubscriptionMapperTest {
         ensureTables();
         clearTables();
         conf = CLUSTER.getConf();
-        mapperFactory = new HBaseMailboxSessionMapperFactory(conf, null, null);
+        MessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
+        mapperFactory = new HBaseMailboxSessionMapperFactory(conf, null, null, 
messageIdFactory);
         mapper = new HBaseSubscriptionMapper(conf);
         fillSubscriptionList();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java 
b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
index 1cb8f84..2e0c26d 100644
--- 
a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
+++ 
b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
@@ -27,6 +27,7 @@ import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jcr.mail.model.JCRMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxManager;
@@ -44,12 +45,16 @@ public class JCRMailboxManager extends StoreMailboxManager 
implements JCRImapCon
 
     private final Logger logger = 
LoggerFactory.getLogger(JCRMailboxManager.class);
     
-    public JCRMailboxManager(JCRMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver, MessageParser messageParser) {
-           this(mapperFactory, authenticator, new JVMMailboxPathLocker(), 
aclResolver, groupMembershipResolver, messageParser);
+    public JCRMailboxManager(JCRMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, 
+            MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, 
+            MessageParser messageParser, MessageId.Factory messageIdFactory) {
+           this(mapperFactory, authenticator, new JVMMailboxPathLocker(), 
aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
     }
 
-    public JCRMailboxManager(JCRMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, MailboxPathLocker locker, MailboxACLResolver 
aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser 
messageParser) {
-        super(mapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver, messageParser);
+    public JCRMailboxManager(JCRMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, 
+            MailboxPathLocker locker, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver, 
+            MessageParser messageParser, MessageId.Factory messageIdFactory) {
+        super(mapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver, messageParser, messageIdFactory);
     }
 
     @Override
@@ -69,7 +74,8 @@ public class JCRMailboxManager extends StoreMailboxManager 
implements JCRImapCon
             logger,
             getQuotaManager(),
             getQuotaRootResolver(),
-            getMessageParser());
+            getMessageParser(),
+            getMessageIdFactory());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java 
b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
index b3daebe..64dc241 100644
--- 
a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
+++ 
b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
@@ -32,6 +32,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jcr.mail.model.JCRMailbox;
 import org.apache.james.mailbox.jcr.mail.model.JCRMailboxMessage;
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -52,8 +53,12 @@ public class JCRMessageManager extends StoreMessageManager {
     private final Logger log;
 
     public JCRMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index, 
-            final MailboxEventDispatcher dispatcher, MailboxPathLocker locker, 
JCRMailbox mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, Logger log, QuotaManager quotaManager, 
QuotaRootResolver quotaRootResolver, MessageParser messageParser) throws 
MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver, quotaManager, quotaRootResolver, messageParser);
+            final MailboxEventDispatcher dispatcher, MailboxPathLocker locker, 
JCRMailbox mailbox, 
+            MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, Logger log, 
+            QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, 
MessageParser messageParser, MessageId.Factory messageIdFactory)
+                    throws MailboxException {
+        super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver, quotaManager, 
+                quotaRootResolver, messageParser, messageIdFactory);
         this.log = log;
     }
 
@@ -61,7 +66,7 @@ public class JCRMessageManager extends StoreMessageManager {
     @Override
     protected MailboxMessage createMessage(Date internalDate, int size, int 
bodyStartOctet, SharedInputStream content, Flags flags, PropertyBuilder 
propertyBuilder, List<MessageAttachment> attachments) throws MailboxException{
         JCRId mailboxId = (JCRId) getMailboxEntity().getMailboxId();
-        return new JCRMailboxMessage(mailboxId, internalDate,
+        return new JCRMailboxMessage(mailboxId, 
getMessageIdFactory().generate(), internalDate,
                 size, flags, content, bodyStartOctet, propertyBuilder, log);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
 
b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
index 4583227..d7bb123 100644
--- 
a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
+++ 
b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
@@ -46,7 +46,6 @@ import org.apache.james.mailbox.jcr.JCRImapConstants;
 import org.apache.james.mailbox.jcr.Persistent;
 import org.apache.james.mailbox.model.MessageAttachment;
 import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.FlagsBuilder;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
@@ -69,6 +68,7 @@ public class JCRMailboxMessage implements MailboxMessage, 
JCRImapConstants, Pers
     
     private JCRId mailboxUUID;
     private MessageUid uid;
+    private MessageId messageId;
     private Date internalDate;
     private long size;
     private boolean answered;
@@ -108,10 +108,11 @@ public class JCRMailboxMessage implements MailboxMessage, 
JCRImapConstants, Pers
         this.node = node;
     }
     
-    public JCRMailboxMessage(JCRId mailboxUUID, Date internalDate, int size, 
Flags flags, SharedInputStream content,
+    public JCRMailboxMessage(JCRId mailboxUUID, MessageId messageId, Date 
internalDate, int size, Flags flags, SharedInputStream content,
                              int bodyStartOctet, PropertyBuilder 
propertyBuilder, Logger logger) {
         super();
         this.mailboxUUID = mailboxUUID;
+        this.messageId = messageId;
         this.internalDate = internalDate;
         this.size = size;
         this.logger = logger;
@@ -133,8 +134,9 @@ public class JCRMailboxMessage implements MailboxMessage, 
JCRImapConstants, Pers
     /**
      * Create a copy of the given message
      */
-    public JCRMailboxMessage(JCRId mailboxUUID, MessageUid uid, long modSeq, 
JCRMailboxMessage message, Logger logger) throws MailboxException {
+    public JCRMailboxMessage(JCRId mailboxUUID, MessageUid uid, MessageId 
messageId, long modSeq, JCRMailboxMessage message, Logger logger) throws 
MailboxException {
         this.mailboxUUID = mailboxUUID;
+        this.messageId = messageId;
         this.internalDate = message.getInternalDate();
         this.size = message.getFullContentOctets();
         setFlags(message.createFlags());
@@ -376,7 +378,7 @@ public class JCRMailboxMessage implements MailboxMessage, 
JCRImapConstants, Pers
 
     @Override
     public MessageId getMessageId() {
-        return new DefaultMessageId(getMailboxId(), getUid());
+        return messageId;
     }
 
     @Override


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

Reply via email to