Modified: 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
 (original)
+++ 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
 Mon Jun 29 08:21:12 2015
@@ -1,23 +1,20 @@
 package org.apache.james.mailbox.cassandra.mail;
 
-import com.datastax.driver.core.utils.UUIDs;
 import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.mailbox.cassandra.CassandraId;
 import org.apache.james.mailbox.cassandra.CassandraMailboxSessionMapperFactory;
-import org.apache.james.mailbox.cassandra.CassandraTypesProvider;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.model.MapperProvider;
 
-import java.util.UUID;
-
-public class CassandraMapperProvider implements MapperProvider<UUID> {
+public class CassandraMapperProvider implements MapperProvider<CassandraId> {
 
     private static final CassandraClusterSingleton cassandra = 
CassandraClusterSingleton.build();
 
     @Override
-    public MailboxMapper<UUID> createMailboxMapper() throws MailboxException {
+    public MailboxMapper<CassandraId> createMailboxMapper() throws 
MailboxException {
         return new CassandraMailboxSessionMapperFactory(
             new CassandraUidProvider(cassandra.getConf()),
             new CassandraModSeqProvider(cassandra.getConf()),
@@ -27,7 +24,7 @@ public class CassandraMapperProvider imp
     }
 
     @Override
-    public MessageMapper<UUID> createMessageMapper() throws MailboxException {
+    public MessageMapper<CassandraId> createMessageMapper() throws 
MailboxException {
         return new CassandraMailboxSessionMapperFactory(
             new CassandraUidProvider(cassandra.getConf()),
             new CassandraModSeqProvider(cassandra.getConf()),
@@ -37,8 +34,8 @@ public class CassandraMapperProvider imp
     }
 
     @Override
-    public UUID generateId() {
-        return UUIDs.timeBased();
+    public CassandraId generateId() {
+        return CassandraId.timeBased();
     }
 
     @Override

Modified: 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
 (original)
+++ 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.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.AbstractMessageMapperTest;
 
-import java.util.UUID;
-
-public class CassandraMessageMapperTest extends 
AbstractMessageMapperTest<UUID> {
+public class CassandraMessageMapperTest extends 
AbstractMessageMapperTest<CassandraId> {
     public CassandraMessageMapperTest() {
         super(new CassandraMapperProvider());
     }

Modified: 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java
 (original)
+++ 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidAndModSeqProviderTest.java
 Mon Jun 29 08:21:12 2015
@@ -23,12 +23,12 @@ import static org.junit.Assert.assertEqu
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.UUID;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.function.LongConsumer;
 import java.util.stream.LongStream;
 
 import org.apache.james.mailbox.cassandra.CassandraClusterSingleton;
+import org.apache.james.mailbox.cassandra.CassandraId;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
@@ -54,7 +54,7 @@ public class CassandraUidAndModSeqProvid
     private CassandraUidProvider uidProvider;
     private CassandraModSeqProvider modSeqProvider;
     private CassandraMailboxMapper mapper;
-    private List<SimpleMailbox<UUID>> mailboxList;
+    private List<SimpleMailbox<CassandraId>> mailboxList;
     private List<MailboxPath> pathsList;
 
     @Before
@@ -64,7 +64,7 @@ public class CassandraUidAndModSeqProvid
         modSeqProvider = new CassandraModSeqProvider(CASSANDRA.getConf());
         mapper = new CassandraMailboxMapper(CASSANDRA.getConf(), 
CASSANDRA.getTypesProvider(), MAX_RETRY);
         fillMailboxList();
-        for (SimpleMailbox<UUID> mailbox : mailboxList) {
+        for (SimpleMailbox<CassandraId> mailbox : mailboxList) {
             mapper.save(mailbox);
         }
     }
@@ -98,7 +98,7 @@ public class CassandraUidAndModSeqProvid
     @Test
     public void lastUidShouldRetrieveValueStoredByNextUid() throws Exception {
         MailboxPath path = new MailboxPath("gsoc", "ieugen", "Trash");
-        SimpleMailbox<UUID> newBox = new SimpleMailbox<>(path, 1234);
+        SimpleMailbox<CassandraId> newBox = new SimpleMailbox<>(path, 1234);
         mapper.save(newBox);
         mailboxList.add(newBox);
         pathsList.add(path);
@@ -115,7 +115,7 @@ public class CassandraUidAndModSeqProvid
 
     @Test
     public void nextUidShouldIncrementValueByOne() throws Exception {
-        SimpleMailbox<UUID> mailbox = mailboxList.get(mailboxList.size() / 2);
+        SimpleMailbox<CassandraId> mailbox = 
mailboxList.get(mailboxList.size() / 2);
         long lastUid = uidProvider.lastUid(null, mailbox);
         LongStream.range(lastUid + 1, lastUid + 10)
             .forEach(propagateException(value -> {
@@ -128,7 +128,7 @@ public class CassandraUidAndModSeqProvid
     @Test
     public void highestModSeqShouldRetrieveValueStoredNextModSeq() throws 
Exception {
         MailboxPath path = new MailboxPath("gsoc", "ieugen", "Trash");
-        SimpleMailbox<UUID> newBox = new SimpleMailbox<>(path, 1234);
+        SimpleMailbox<CassandraId> newBox = new SimpleMailbox<>(path, 1234);
         mapper.save(newBox);
         mailboxList.add(newBox);
         pathsList.add(path);
@@ -145,7 +145,7 @@ public class CassandraUidAndModSeqProvid
 
     @Test
     public void nextModSeqShouldIncrementValueByOne() throws Exception {
-        SimpleMailbox<UUID> mailbox = mailboxList.get(mailboxList.size() / 2);
+        SimpleMailbox<CassandraId> mailbox = 
mailboxList.get(mailboxList.size() / 2);
         long lastUid = modSeqProvider.highestModSeq(null, mailbox);
         LongStream.range(lastUid + 1, lastUid + 10)
             .forEach(propagateException(value -> {
@@ -157,7 +157,7 @@ public class CassandraUidAndModSeqProvid
 
     @Test
     public void nextModSeqShouldIncrementValueWhenParallelCalls() throws 
Exception {
-        SimpleMailbox<UUID> mailbox = mailboxList.get(mailboxList.size() / 2);
+        SimpleMailbox<CassandraId> mailbox = 
mailboxList.get(mailboxList.size() / 2);
         long lastUid = modSeqProvider.highestModSeq(null, mailbox);
         final AtomicLong previousValue = new AtomicLong();
         LongStream.range(lastUid + 1, lastUid + 10)

Modified: 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/SimpleMailboxACLJsonConverterTest.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/SimpleMailboxACLJsonConverterTest.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/SimpleMailboxACLJsonConverterTest.java
 (original)
+++ 
james/mailbox/trunk/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/SimpleMailboxACLJsonConverterTest.java
 Mon Jun 29 08:21:12 2015
@@ -22,8 +22,6 @@ package org.apache.james.mailbox.cassand
 import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
 import static net.javacrumbs.jsonunit.fluent.JsonFluentAssert.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
-import java.util.HashMap;
-import java.util.Map;
 
 import java.util.HashMap;
 import java.util.Map;

Added: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseId.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseId.java?rev=1688109&view=auto
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseId.java
 (added)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseId.java
 Mon Jun 29 08:21:12 2015
@@ -0,0 +1,80 @@
+/****************************************************************
+ * 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.hbase;
+
+import java.util.UUID;
+
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
+
+public class HBaseId implements MailboxId {
+
+    private final UUID id;
+
+    public static HBaseId of(UUID id) {
+        return new HBaseId(id);
+    }
+
+    private HBaseId(UUID id) {
+        this.id = id;
+    }
+
+    public UUID getRawId() {
+        return id;
+    }
+
+    @Override
+    public String serialize() {
+        return id.toString();
+    }
+
+    public byte[] toBytes() {
+        return Bytes.add(
+                    Bytes.toBytes(id.getMostSignificantBits()),
+                    Bytes.toBytes(id.getLeastSignificantBits()));
+    }
+
+    @Override
+    public String toString() {
+        return id.toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return (int) ((id == null) ? 0 : (id.getMostSignificantBits() ^ 
(id.getMostSignificantBits() >>> 32)));
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        HBaseId other = (HBaseId) obj;
+        if (id == null) {
+            if (other.id != null)
+                return false;
+        } else if (!id.equals(other.id))
+            return false;
+        return true;
+    }
+
+}

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
 Mon Jun 29 08:21:12 2015
@@ -39,7 +39,7 @@ import org.apache.james.mailbox.store.tr
  * HBase implementation of {@link StoreMailboxManager}
  * 
  */
-public class HBaseMailboxManager extends StoreMailboxManager<UUID> {
+public class HBaseMailboxManager extends StoreMailboxManager<HBaseId> {
 
     public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, MailboxPathLocker locker, MailboxACLResolver 
aclResolver, GroupMembershipResolver groupMembershipResolver) {
         super(mapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver);
@@ -50,7 +50,7 @@ public class HBaseMailboxManager extends
     }
 
     @Override
-    protected Mailbox<UUID> doCreateMailbox(MailboxPath mailboxPath, 
MailboxSession session) throws MailboxException {
+    protected Mailbox<HBaseId> doCreateMailbox(MailboxPath mailboxPath, 
MailboxSession session) throws MailboxException {
         return new HBaseMailbox(mailboxPath, randomUidValidity());
     }
 
@@ -81,8 +81,8 @@ public class HBaseMailboxManager extends
     }
 
     @Override
-    protected StoreMessageManager<UUID> createMessageManager(Mailbox<UUID> 
mailboxRow, MailboxSession session) throws MailboxException {
-        StoreMessageManager<UUID> result = new 
HBaseMessageManager(getMapperFactory(), getMessageSearchIndex(), 
getEventDispatcher(), getLocker(), mailboxRow, getAclResolver(), 
getGroupMembershipResolver());
+    protected StoreMessageManager<HBaseId> 
createMessageManager(Mailbox<HBaseId> mailboxRow, MailboxSession session) 
throws MailboxException {
+        StoreMessageManager<HBaseId> result = new 
HBaseMessageManager(getMapperFactory(), getMessageSearchIndex(), 
getEventDispatcher(), getLocker(), mailboxRow, getAclResolver(), 
getGroupMembershipResolver());
         return result;
     }
 }

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactory.java
 Mon Jun 29 08:21:12 2015
@@ -18,7 +18,17 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase;
 
-import java.util.UUID;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOXES_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGES_META_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGES_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_DATA_BODY_CF;
+import static 
org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_DATA_HEADERS_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.SUBSCRIPTIONS_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.SUBSCRIPTION_CF;
+
+import java.io.IOException;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HTableDescriptor;
@@ -26,8 +36,6 @@ import org.apache.hadoop.hbase.MasterNot
 import org.apache.hadoop.hbase.ZooKeeperConnectionException;
 import org.apache.hadoop.hbase.client.HBaseAdmin;
 import org.apache.james.mailbox.MailboxSession;
-import static org.apache.james.mailbox.hbase.HBaseNames.*;
-
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.SubscriptionException;
 import org.apache.james.mailbox.hbase.mail.HBaseMailboxMapper;
@@ -44,11 +52,11 @@ import org.apache.james.mailbox.store.us
  * HBase implementation of {@link MailboxSessionMapperFactory}
  *
  */
-public class HBaseMailboxSessionMapperFactory extends 
MailboxSessionMapperFactory<UUID> {
+public class HBaseMailboxSessionMapperFactory extends 
MailboxSessionMapperFactory<HBaseId> {
 
     private final Configuration conf;
-    private final UidProvider<UUID> uidProvider;
-    private final ModSeqProvider<UUID> modSeqProvider;
+    private final UidProvider<HBaseId> uidProvider;
+    private final ModSeqProvider<HBaseId> modSeqProvider;
 
     /**
      * Creates  the necessary tables in HBase if they do not exist.
@@ -60,7 +68,7 @@ public class HBaseMailboxSessionMapperFa
      * @throws ZooKeeperConnectionException
      * @throws IOException
      */
-    public HBaseMailboxSessionMapperFactory(Configuration conf, 
UidProvider<UUID> uidProvider, ModSeqProvider<UUID> modSeqProvider) {
+    public HBaseMailboxSessionMapperFactory(Configuration conf, 
UidProvider<HBaseId> uidProvider, ModSeqProvider<HBaseId> modSeqProvider) {
         this.conf = conf;
         this.uidProvider = uidProvider;
         this.modSeqProvider = modSeqProvider;
@@ -114,12 +122,12 @@ public class HBaseMailboxSessionMapperFa
     }
 
     @Override
-    public MessageMapper<UUID> createMessageMapper(MailboxSession session) 
throws MailboxException {
+    public MessageMapper<HBaseId> createMessageMapper(MailboxSession session) 
throws MailboxException {
         return new HBaseMessageMapper(session, uidProvider, modSeqProvider, 
this.conf);
     }
 
     @Override
-    public MailboxMapper<UUID> createMailboxMapper(MailboxSession session) 
throws MailboxException {
+    public MailboxMapper<HBaseId> createMailboxMapper(MailboxSession session) 
throws MailboxException {
         return new HBaseMailboxMapper(this.conf);
     }
 
@@ -140,7 +148,7 @@ public class HBaseMailboxSessionMapperFa
      * Returns the ModSeqProvider used.
      * @return The used modSeqProvider
      */
-    public ModSeqProvider<UUID> getModSeqProvider() {
+    public ModSeqProvider<HBaseId> getModSeqProvider() {
         return modSeqProvider;
     }
 
@@ -148,7 +156,7 @@ public class HBaseMailboxSessionMapperFa
      * Returns the UidProvider that generates UID's for mailboxes.
      * @return The provider that generates UID's for mailboxes
      */
-    public UidProvider<UUID> getUidProvider() {
+    public UidProvider<HBaseId> getUidProvider() {
         return uidProvider;
     }
 }

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
 Mon Jun 29 08:21:12 2015
@@ -18,8 +18,6 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase;
 
-import java.util.UUID;
-
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxPathLocker;
@@ -37,10 +35,10 @@ import org.apache.james.mailbox.store.se
  * HBase implementation of MessageManager.
  * 
  */
-public class HBaseMessageManager extends StoreMessageManager<UUID> {
+public class HBaseMessageManager extends StoreMessageManager<HBaseId> {
 
-    public HBaseMessageManager(MailboxSessionMapperFactory<UUID> 
mapperFactory, MessageSearchIndex<UUID> index,
-            MailboxEventDispatcher<UUID> dispatcher, MailboxPathLocker locker, 
Mailbox<UUID> mailbox, MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver) throws MailboxException {
+    public HBaseMessageManager(MailboxSessionMapperFactory<HBaseId> 
mapperFactory, MessageSearchIndex<HBaseId> index,
+            MailboxEventDispatcher<HBaseId> dispatcher, MailboxPathLocker 
locker, Mailbox<HBaseId> mailbox, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver) throws MailboxException {
         super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver);
 
     }

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseUtils.java
 Mon Jun 29 08:21:12 2015
@@ -18,11 +18,48 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase;
 
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_ANSWERED;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_DELETED;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_DRAFT;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_FLAGGED;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_RECENT;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_SEEN;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_USER;
+import static org.apache.james.mailbox.hbase.FlagConvertor.PREFIX_SFLAGS_B;
+import static org.apache.james.mailbox.hbase.FlagConvertor.PREFIX_UFLAGS_B;
+import static org.apache.james.mailbox.hbase.FlagConvertor.systemFlagFromBytes;
+import static org.apache.james.mailbox.hbase.FlagConvertor.userFlagFromBytes;
+import static org.apache.james.mailbox.hbase.FlagConvertor.userFlagToBytes;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_HIGHEST_MODSEQ;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_LASTUID;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_MESSAGE_COUNT;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_NAME;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_NAMESPACE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_UIDVALIDITY;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_USER;
+import static org.apache.james.mailbox.hbase.HBaseNames.MARKER_MISSING;
+import static org.apache.james.mailbox.hbase.HBaseNames.MARKER_PRESENT;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGES_META_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_BODY_OCTETS;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_CONTENT_OCTETS;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_INTERNALDATE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_MEDIA_TYPE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_MODSEQ;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_SUB_TYPE;
+import static 
org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_TEXT_LINE_COUNT;
+import static org.apache.james.mailbox.hbase.HBaseNames.SUBSCRIPTION_CF;
+import static org.apache.james.mailbox.hbase.PropertyConvertor.PREFIX_PROP_B;
+import static org.apache.james.mailbox.hbase.PropertyConvertor.getProperty;
+import static org.apache.james.mailbox.hbase.PropertyConvertor.getQualifier;
+import static org.apache.james.mailbox.hbase.PropertyConvertor.getValue;
+
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.NavigableMap;
 import java.util.UUID;
+
 import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
@@ -33,8 +70,8 @@ import org.apache.hadoop.hbase.client.Pu
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.james.mailbox.hbase.io.ChunkInputStream;
-import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.hbase.mail.HBaseMessage;
+import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.Message;
@@ -42,10 +79,6 @@ import org.apache.james.mailbox.store.ma
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.user.model.Subscription;
 
-import static org.apache.james.mailbox.hbase.FlagConvertor.*;
-import static org.apache.james.mailbox.hbase.PropertyConvertor.*;
-import static org.apache.james.mailbox.hbase.HBaseNames.*;
-
 /**
  * HBase utility classes for mailbox and message manipulation.
  * @author ieugen
@@ -58,7 +91,7 @@ public class HBaseUtils {
      * @param result a result of a HBase Get operation 
      * @return a Mailbox object
      */
-    public static Mailbox<UUID> mailboxFromResult(Result result) {
+    public static Mailbox<HBaseId> mailboxFromResult(Result result) {
         NavigableMap<byte[], byte[]> rawMailbox = 
result.getFamilyMap(MAILBOX_CF);
         //TODO: should we test for null values?
         MailboxPath path = new 
MailboxPath(Bytes.toString(rawMailbox.get(MAILBOX_NAMESPACE)),
@@ -66,7 +99,7 @@ public class HBaseUtils {
                 Bytes.toString(rawMailbox.get(MAILBOX_NAME)));
 
         HBaseMailbox mailbox = new HBaseMailbox(path, 
Bytes.toLong(rawMailbox.get(MAILBOX_UIDVALIDITY)));
-        mailbox.setMailboxId(UUIDFromRowKey(result.getRow()));
+        mailbox.setMailboxId(HBaseIdFromRowKey(result.getRow()));
         
mailbox.setHighestModSeq(Bytes.toLong(rawMailbox.get(MAILBOX_HIGHEST_MODSEQ)));
         mailbox.setLastUid(Bytes.toLong(rawMailbox.get(MAILBOX_LASTUID)));
         
mailbox.setMessageCount(Bytes.toLong(rawMailbox.get(MAILBOX_MESSAGE_COUNT)));
@@ -74,27 +107,12 @@ public class HBaseUtils {
     }
 
     /**
-     * This returns the row key needed for HBase. Having the method here 
ensure 
-     * we have a consistent way to generate the rowkey.
-     *
-     * Convenience method for generating a rowKey when you don't have a 
mailbox object.
-     * @param uuid
-     * @return rowkey byte array that can be used with HBase API
-     */
-    public static byte[] mailboxRowKey(UUID uuid) {
-        byte[] rowKey = new byte[16];
-        int offset = Bytes.putLong(rowKey, 0, uuid.getMostSignificantBits());
-        Bytes.putLong(rowKey, offset, uuid.getLeastSignificantBits());
-        return rowKey;
-    }
-
-    /**
      * Returns a UUID from the a byte array.
      * @param rowkey
      * @return UUID calculated from the byte array
      */
-    public static UUID UUIDFromRowKey(byte[] rowkey) {
-        return new UUID(Bytes.toLong(rowkey, 0), Bytes.toLong(rowkey, 8));
+    public static HBaseId HBaseIdFromRowKey(byte[] rowkey) {
+        return HBaseId.of(new UUID(Bytes.toLong(rowkey, 0), 
Bytes.toLong(rowkey, 8)));
     }
 
     /**
@@ -102,7 +120,7 @@ public class HBaseUtils {
      * @return a Put object
      */
     public static Put toPut(HBaseMailbox mailbox) {
-        Put put = new Put(mailboxRowKey(mailbox.getMailboxId()));
+        Put put = new Put(mailbox.getMailboxId().toBytes());
         // we don't store null values and we don't restore them. it's a column 
based store.
         if (mailbox.getName() != null) {
             put.add(MAILBOX_CF, MAILBOX_NAME, 
Bytes.toBytes(mailbox.getName()));
@@ -127,7 +145,7 @@ public class HBaseUtils {
      * @param message
      * @return a put that contains all metadata information.
      */
-    public static Put metadataToPut(Message<UUID> message) {
+    public static Put metadataToPut(Message<HBaseId> message) {
         Put put = new Put(messageRowKey(message));
         // we store the message uid and mailbox uid in the row key
         // store the meta data
@@ -185,7 +203,7 @@ public class HBaseUtils {
      * @param message message to get row key from
      * @return rowkey byte array that can be used with HBase API
      */
-    public static byte[] messageRowKey(Message<UUID> message) {
+    public static byte[] messageRowKey(Message<HBaseId> message) {
         return messageRowKey(message.getMailboxId(), message.getUid());
     }
 
@@ -197,26 +215,20 @@ public class HBaseUtils {
      * @param uid message uid
      * @return rowkey byte array that can be used with HBase API
      */
-    public static byte[] messageRowKey(UUID mailboxUid, long uid) {
+    public static byte[] messageRowKey(HBaseId mailboxUid, long uid) {
         /**  message uid's are stored in reverse order so we will always have 
the most recent messages first*/
-        byte[] ba = 
Bytes.add(Bytes.toBytes(mailboxUid.getMostSignificantBits()),
-                Bytes.toBytes(mailboxUid.getLeastSignificantBits()),
-                Bytes.toBytes(Long.MAX_VALUE - uid));
-        //System.out.println(Bytes.toStringBinary(ba));
-        return ba;
+        return Bytes.add(mailboxUid.toBytes(), Bytes.toBytes(Long.MAX_VALUE - 
uid));
     }
 
     /**
      * Utility to build row keys from mailboxUID and a value. The value is 
added to 
      * the key without any other operations. 
-     * @param mailboxUid mailbox UUID
+     * @param mailboxUid mailbox HBaseId
      * @param value
      * @return rowkey byte array that can be used with HBase API
      */
-    public static byte[] customMessageRowKey(UUID mailboxUid, long value) {
-        return Bytes.add(Bytes.toBytes(mailboxUid.getMostSignificantBits()),
-                Bytes.toBytes(mailboxUid.getLeastSignificantBits()),
-                Bytes.toBytes(value));
+    public static byte[] customMessageRowKey(HBaseId mailboxUid, long value) {
+        return Bytes.add(mailboxUid.toBytes(), Bytes.toBytes(value));
     }
 
     /**
@@ -228,7 +240,7 @@ public class HBaseUtils {
      * @param result the result object containing message data
      * @return a HBaseMessage instance with message metadata.
      */
-    public static Message<UUID> messageMetaFromResult(Configuration conf, 
Result result) {
+    public static Message<HBaseId> messageMetaFromResult(Configuration conf, 
Result result) {
         HBaseMessage message = null;
         Flags flags = new Flags();
         List<Property> propList = new ArrayList<Property>();
@@ -288,7 +300,7 @@ public class HBaseUtils {
             }
             i++;
         }
-        UUID uuid = UUIDFromRowKey(result.getRow());
+        HBaseId uuid = HBaseIdFromRowKey(result.getRow());
         uid = Long.MAX_VALUE - Bytes.toLong(result.getRow(), 16);
         PropertyBuilder props = new PropertyBuilder(propList);
         props.setMediaType(mediaType);
@@ -316,7 +328,7 @@ public class HBaseUtils {
      * @param flags
      * @return a put object with 
      */
-    public static Put flagsToPut(Message<UUID> message, Flags flags) {
+    public static Put flagsToPut(Message<HBaseId> message, Flags flags) {
         Put put = new Put(messageRowKey(message));
         //system flags
         if (flags.contains(Flag.ANSWERED)) {
@@ -364,7 +376,7 @@ public class HBaseUtils {
         return put;
     }
 
-    public static Delete flagsToDelete(Message<UUID> message, Flags flags) {
+    public static Delete flagsToDelete(Message<HBaseId> message, Flags flags) {
         Delete delete = new Delete(messageRowKey(message));
         //we mark for delete flags that are not present (they will be Put'ed)
         if (flags.contains(Flag.ANSWERED)) {

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java
 Mon Jun 29 08:21:12 2015
@@ -28,13 +28,11 @@ import static org.apache.james.mailbox.h
 import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGES_TABLE;
 import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_INTERNALDATE;
 import static org.apache.james.mailbox.hbase.HBaseUtils.mailboxFromResult;
-import static org.apache.james.mailbox.hbase.HBaseUtils.mailboxRowKey;
 import static org.apache.james.mailbox.hbase.HBaseUtils.toPut;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.UUID;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Delete;
@@ -52,6 +50,7 @@ import org.apache.hadoop.hbase.util.Byte
 import org.apache.hadoop.io.IOUtils;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.hbase.HBaseNonTransactionalMapper;
 import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.model.MailboxACL;
@@ -63,7 +62,7 @@ import org.apache.james.mailbox.store.ma
  * Data access management for mailbox.
  *
  */
-public class HBaseMailboxMapper extends HBaseNonTransactionalMapper implements 
MailboxMapper<UUID> {
+public class HBaseMailboxMapper extends HBaseNonTransactionalMapper implements 
MailboxMapper<HBaseId> {
 
     /**
      * Link to the HBase Configuration object and specific mailbox names
@@ -75,7 +74,7 @@ public class HBaseMailboxMapper extends
     }
     
     @Override
-    public Mailbox<UUID> findMailboxByPath(MailboxPath mailboxPath) throws 
MailboxException, MailboxNotFoundException {
+    public Mailbox<HBaseId> findMailboxByPath(MailboxPath mailboxPath) throws 
MailboxException, MailboxNotFoundException {
         HTable mailboxes = null;
         ResultScanner scanner = null;
         try {
@@ -126,7 +125,7 @@ public class HBaseMailboxMapper extends
     }
     
     @Override
-    public List<Mailbox<UUID>> findMailboxWithPathLike(MailboxPath 
mailboxPath) throws MailboxException {
+    public List<Mailbox<HBaseId>> findMailboxWithPathLike(MailboxPath 
mailboxPath) throws MailboxException {
         HTable mailboxes = null;
         ResultScanner scanner = null;
         try {
@@ -167,7 +166,7 @@ public class HBaseMailboxMapper extends
             scan.setFilter(filters);
             scanner = mailboxes.getScanner(scan);
             
-            List<Mailbox<UUID>> mailboxList = new ArrayList<Mailbox<UUID>>();
+            List<Mailbox<HBaseId>> mailboxList = new 
ArrayList<Mailbox<HBaseId>>();
             
             for (Result result : scanner) {
                 mailboxList.add(mailboxFromResult(result));
@@ -188,7 +187,7 @@ public class HBaseMailboxMapper extends
     }
     
     @Override
-    public List<Mailbox<UUID>> list() throws MailboxException {
+    public List<Mailbox<HBaseId>> list() throws MailboxException {
         HTable mailboxes = null;
         ResultScanner scanner = null;
         //TODO: possible performance isssues, we are creating an object from 
all the rows in HBase mailbox table
@@ -199,11 +198,11 @@ public class HBaseMailboxMapper extends
             scan.setCaching(mailboxes.getScannerCaching() * 2);
             scan.setMaxVersions(1);
             scanner = mailboxes.getScanner(scan);
-            List<Mailbox<UUID>> mailboxList = new ArrayList<Mailbox<UUID>>();
+            List<Mailbox<HBaseId>> mailboxList = new 
ArrayList<Mailbox<HBaseId>>();
             
             Result result;
             while ((result = scanner.next()) != null) {
-                Mailbox<UUID> mlbx = mailboxFromResult(result);
+                Mailbox<HBaseId> mlbx = mailboxFromResult(result);
                 mailboxList.add(mlbx);
             }
             return mailboxList;
@@ -226,7 +225,7 @@ public class HBaseMailboxMapper extends
     }
     
     @Override
-    public void save(Mailbox<UUID> mlbx) throws MailboxException {
+    public void save(Mailbox<HBaseId> mlbx) throws MailboxException {
         //TODO: maybe switch to checkAndPut for transactions
         HTable mailboxes = null;
         try {
@@ -250,13 +249,13 @@ public class HBaseMailboxMapper extends
     }
     
     @Override
-    public void delete(Mailbox<UUID> mlbx) throws MailboxException {
+    public void delete(Mailbox<HBaseId> mlbx) throws MailboxException {
         //TODO: maybe switch to checkAndDelete
         HTable mailboxes = null;
         try {
             mailboxes = new HTable(conf, MAILBOXES_TABLE);
             //TODO: delete all maessages from this mailbox
-            Delete delete = new Delete(mailboxRowKey(mlbx.getMailboxId()));
+            Delete delete = new Delete(mlbx.getMailboxId().toBytes());
             mailboxes.delete(delete);
         } catch (IOException ex) {
             throw new MailboxException("IOException in HBase cluster during 
delete()", ex);
@@ -272,7 +271,7 @@ public class HBaseMailboxMapper extends
     }
     
     @Override
-    public boolean hasChildren(final Mailbox<UUID> mailbox, final char c) 
throws MailboxException, MailboxNotFoundException {
+    public boolean hasChildren(final Mailbox<HBaseId> mailbox, final char c) 
throws MailboxException, MailboxNotFoundException {
         HTable mailboxes = null;
         ResultScanner scanner = null;
         try {
@@ -395,7 +394,7 @@ public class HBaseMailboxMapper extends
     }
 
     @Override
-    public void updateACL(Mailbox<UUID> mailbox, MailboxACL.MailboxACLCommand 
mailboxACLCommand) throws MailboxException {
+    public void updateACL(Mailbox<HBaseId> mailbox, 
MailboxACL.MailboxACLCommand mailboxACLCommand) throws MailboxException {
         mailbox.setACL(mailbox.getACL().apply(mailboxACLCommand));
     }
 }

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessage.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessage.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessage.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessage.java
 Mon Jun 29 08:21:12 2015
@@ -18,39 +18,41 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase.mail;
 
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGES_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_DATA_BODY_CF;
+import static 
org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_DATA_HEADERS_CF;
+import static org.apache.james.mailbox.hbase.HBaseUtils.messageRowKey;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
-import java.util.UUID;
 
 import javax.mail.Flags;
-import org.apache.hadoop.conf.Configuration;
 
+import org.apache.hadoop.conf.Configuration;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.hbase.io.ChunkInputStream;
 import org.apache.james.mailbox.store.mail.model.AbstractMessage;
 import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.mailbox.store.mail.model.Property;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 
-import static org.apache.james.mailbox.hbase.HBaseUtils.*;
-import static org.apache.james.mailbox.hbase.HBaseNames.*;
-
 /**
  * Concrete HBaseMessage implementation. This implementation does not store any
  * message content. The message content is retrieved using a ChunkedInputStream
  * directly from HBase.
  */
-public class HBaseMessage extends AbstractMessage<UUID> {
+public class HBaseMessage extends AbstractMessage<HBaseId> {
 
     private static final String TOSTRING_SEPARATOR = " ";
     /** Configuration for the HBase cluster */
     private final Configuration conf;
     /** The value for the mailboxId field */
-    private UUID mailboxId;
+    private HBaseId mailboxId;
     /** The value for the uid field */
     private long uid;
     /** The value for the modSeq field */
@@ -92,7 +94,7 @@ public class HBaseMessage extends Abstra
      * @param original
      * @throws MailboxException
      */
-    public HBaseMessage(Configuration conf, UUID mailboxId, long uid, long 
modSeq, Message<?> original) throws MailboxException {
+    public HBaseMessage(Configuration conf, HBaseId mailboxId, long uid, long 
modSeq, Message<?> original) throws MailboxException {
         super();
         this.conf = conf;
         this.mailboxId = mailboxId;
@@ -124,7 +126,7 @@ public class HBaseMessage extends Abstra
      * @param bodyStartOctet
      * @param propertyBuilder
      */
-    public HBaseMessage(Configuration conf, UUID mailboxId, Date internalDate, 
Flags flags, long contentOctets, int bodyStartOctet, PropertyBuilder 
propertyBuilder) {
+    public HBaseMessage(Configuration conf, HBaseId mailboxId, Date 
internalDate, Flags flags, long contentOctets, int bodyStartOctet, 
PropertyBuilder propertyBuilder) {
         super();
         this.conf = conf;
         this.mailboxId = mailboxId;
@@ -162,7 +164,7 @@ public class HBaseMessage extends Abstra
     public int hashCode() {
         final int PRIME = 31;
         int result = 1;
-        result = PRIME * result + (int) 
(getMailboxId().getMostSignificantBits() ^ 
(getMailboxId().getMostSignificantBits() >>> 32));
+        result = PRIME * result + mailboxId.hashCode();
         result = PRIME * result + (int) (uid ^ (uid >>> 32));
         return result;
     }
@@ -283,7 +285,7 @@ public class HBaseMessage extends Abstra
      * @see org.apache.james.mailbox.store.mail.model.Message#getMailboxId()
      */
     @Override
-    public UUID getMailboxId() {
+    public HBaseId getMailboxId() {
         return mailboxId;
     }
 

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMessageMapper.java
 Mon Jun 29 08:21:12 2015
@@ -18,9 +18,28 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase.mail;
 
-import org.apache.hadoop.conf.Configuration;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_DELETED;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_RECENT;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_SEEN;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOXES_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_HIGHEST_MODSEQ;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_MESSAGE_COUNT;
+import static org.apache.james.mailbox.hbase.HBaseNames.MARKER_MISSING;
+import static org.apache.james.mailbox.hbase.HBaseNames.MARKER_PRESENT;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAX_COLUMN_SIZE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGES_META_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGES_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_DATA_BODY_CF;
+import static 
org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_DATA_HEADERS_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGE_MODSEQ;
+import static org.apache.james.mailbox.hbase.HBaseUtils.customMessageRowKey;
+import static org.apache.james.mailbox.hbase.HBaseUtils.flagsToPut;
+import static org.apache.james.mailbox.hbase.HBaseUtils.messageMetaFromResult;
+import static org.apache.james.mailbox.hbase.HBaseUtils.messageRowKey;
+import static org.apache.james.mailbox.hbase.HBaseUtils.metadataToPut;
+
 import java.io.BufferedInputStream;
-import org.apache.hadoop.hbase.client.Put;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -28,11 +47,14 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.UUID;
+
 import javax.mail.Flags;
+
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Delete;
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ResultScanner;
 import org.apache.hadoop.hbase.client.Scan;
@@ -43,38 +65,35 @@ import org.apache.hadoop.hbase.filter.Si
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.james.mailbox.MailboxSession;
 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.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
-import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.model.MessageRange.Type;
+import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.SimpleMessageMetaData;
-import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 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.Mailbox;
 import org.apache.james.mailbox.store.mail.model.Message;
-
-import static org.apache.james.mailbox.hbase.HBaseUtils.*;
-import static org.apache.james.mailbox.hbase.HBaseNames.*;
-import static org.apache.james.mailbox.hbase.FlagConvertor.*;
+import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 
 /**
  * HBase implementation of a {@link MessageMapper}.
  * I don't know if this class is thread-safe! Asume it is not!
  *
  */
-public class HBaseMessageMapper extends NonTransactionalMapper implements 
MessageMapper<UUID> {
+public class HBaseMessageMapper extends NonTransactionalMapper implements 
MessageMapper<HBaseId> {
 
     private final Configuration conf;
     private final MailboxSession mailboxSession;
-    private final UidProvider<UUID> uidProvider;
-    private final ModSeqProvider<UUID> modSeqProvider;
+    private final UidProvider<HBaseId> uidProvider;
+    private final ModSeqProvider<HBaseId> modSeqProvider;
 
     public HBaseMessageMapper(final MailboxSession session,
-            final UidProvider<UUID> uidProvider,
-            ModSeqProvider<UUID> modSeqProvider, Configuration conf) {
+            final UidProvider<HBaseId> uidProvider,
+            ModSeqProvider<HBaseId> modSeqProvider, Configuration conf) {
         this.mailboxSession = session;
         this.modSeqProvider = modSeqProvider;
         this.uidProvider = uidProvider;
@@ -86,9 +105,9 @@ public class HBaseMessageMapper extends
     }
 
     @Override
-    public Iterator<Message<UUID>> findInMailbox(Mailbox<UUID> mailbox, 
MessageRange set, FetchType fType, int max) throws MailboxException {
+    public Iterator<Message<HBaseId>> findInMailbox(Mailbox<HBaseId> mailbox, 
MessageRange set, FetchType fType, int max) throws MailboxException {
         try {
-            List<Message<UUID>> results;
+            List<Message<HBaseId>> results;
             long from = set.getUidFrom();
             final long to = set.getUidTo();
             final Type type = set.getType();
@@ -115,12 +134,11 @@ public class HBaseMessageMapper extends
         }
     }
 
-    private List<Message<UUID>> findMessagesInMailbox(Mailbox<UUID> mailbox, 
int batchSize, boolean flaggedForDelete) throws IOException {
-        List<Message<UUID>> messageList = new ArrayList<Message<UUID>>();
+    private List<Message<HBaseId>> findMessagesInMailbox(Mailbox<HBaseId> 
mailbox, int batchSize, boolean flaggedForDelete) throws IOException {
+        List<Message<HBaseId>> messageList = new ArrayList<Message<HBaseId>>();
         HTable messages = new HTable(conf, MESSAGES_TABLE);
         Scan scan = new Scan(customMessageRowKey(mailbox.getMailboxId(), 0L),
-                new 
PrefixFilter(Bytes.add(Bytes.toBytes(mailbox.getMailboxId().getMostSignificantBits()),
-                
Bytes.toBytes(mailbox.getMailboxId().getLeastSignificantBits()))));
+                new PrefixFilter(mailbox.getMailboxId().toBytes()));
         if (flaggedForDelete) {
             SingleColumnValueFilter filter = new 
SingleColumnValueFilter(MESSAGES_META_CF, FLAGS_DELETED, CompareOp.EQUAL, 
MARKER_PRESENT);
             filter.setFilterIfMissing(true);
@@ -145,8 +163,8 @@ public class HBaseMessageMapper extends
         return messageList;
     }
 
-    private List<Message<UUID>> findMessagesInMailboxWithUID(Mailbox<UUID> 
mailbox, final long messageUid, final boolean flaggedForDelete) throws 
IOException {
-        List<Message<UUID>> messageList = new ArrayList<Message<UUID>>();
+    private List<Message<HBaseId>> 
findMessagesInMailboxWithUID(Mailbox<HBaseId> mailbox, final long messageUid, 
final boolean flaggedForDelete) throws IOException {
+        List<Message<HBaseId>> messageList = new ArrayList<Message<HBaseId>>();
         HTable messages = new HTable(conf, MESSAGES_TABLE);
         Get get = new Get(messageRowKey(mailbox.getMailboxId(), messageUid));
         get.setMaxVersions(1);
@@ -160,7 +178,7 @@ public class HBaseMessageMapper extends
         }
         get.addFamily(MESSAGES_META_CF);
         Result result = messages.get(get);
-        Message<UUID> message = null;
+        Message<HBaseId> message = null;
         if (!result.isEmpty()) {
             message = messageMetaFromResult(conf, result);
             messageList.add(message);
@@ -169,8 +187,8 @@ public class HBaseMessageMapper extends
         return messageList;
     }
 
-    private List<Message<UUID>> findMessagesInMailboxAfterUID(Mailbox<UUID> 
mailbox, final long from, final int batchSize, final boolean flaggedForDelete) 
throws IOException {
-        List<Message<UUID>> messageList = new ArrayList<Message<UUID>>();
+    private List<Message<HBaseId>> 
findMessagesInMailboxAfterUID(Mailbox<HBaseId> mailbox, final long from, final 
int batchSize, final boolean flaggedForDelete) throws IOException {
+        List<Message<HBaseId>> messageList = new ArrayList<Message<HBaseId>>();
         HTable messages = new HTable(conf, MESSAGES_TABLE);
         // uids are stored in reverse so we need to search
         Scan scan = new Scan(messageRowKey(mailbox.getMailboxId(), 
Long.MAX_VALUE),
@@ -199,8 +217,8 @@ public class HBaseMessageMapper extends
         return messageList;
     }
 
-    private List<Message<UUID>> findMessagesInMailboxBetweenUIDs(Mailbox<UUID> 
mailbox, final long from, final long to, final int batchSize, final boolean 
flaggedForDelete) throws IOException {
-        List<Message<UUID>> messageList = new ArrayList<Message<UUID>>();
+    private List<Message<HBaseId>> 
findMessagesInMailboxBetweenUIDs(Mailbox<HBaseId> mailbox, final long from, 
final long to, final int batchSize, final boolean flaggedForDelete) throws 
IOException {
+        List<Message<HBaseId>> messageList = new ArrayList<Message<HBaseId>>();
         if (from > to) {
             return messageList;
         }
@@ -227,7 +245,7 @@ public class HBaseMessageMapper extends
             if (count == 0) {
                 break;
             }
-            Message<UUID> message = messageMetaFromResult(conf, result);
+            Message<HBaseId> message = messageMetaFromResult(conf, result);
             messageList.add(message);
             count--;
         }
@@ -239,10 +257,10 @@ public class HBaseMessageMapper extends
     }
 
     @Override
-    public Map<Long, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox<UUID> mailbox, MessageRange set) 
throws MailboxException {
+    public Map<Long, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox<HBaseId> mailbox, MessageRange set) 
throws MailboxException {
         try {
             final Map<Long, MessageMetaData> data;
-            final List<Message<UUID>> results;
+            final List<Message<HBaseId>> results;
             final long from = set.getUidFrom();
             final long to = set.getUidTo();
 
@@ -277,11 +295,11 @@ public class HBaseMessageMapper extends
     }
 
     @Override
-    public long countMessagesInMailbox(Mailbox<UUID> mailbox) throws 
MailboxException {
+    public long countMessagesInMailbox(Mailbox<HBaseId> mailbox) throws 
MailboxException {
         HTable mailboxes = null;
         try {
             mailboxes = new HTable(conf, MAILBOXES_TABLE);
-            Get get = new Get(mailboxRowKey(mailbox.getMailboxId()));
+            Get get = new Get(mailbox.getMailboxId().toBytes());
             get.addColumn(MAILBOX_CF, MAILBOX_MESSAGE_COUNT);
             get.setMaxVersions(1);
             Result result = mailboxes.get(get);
@@ -301,7 +319,7 @@ public class HBaseMessageMapper extends
     }
 
     @Override
-    public long countUnseenMessagesInMailbox(Mailbox<UUID> mailbox) throws 
MailboxException {
+    public long countUnseenMessagesInMailbox(Mailbox<HBaseId> mailbox) throws 
MailboxException {
         /* TODO: see if it is possible to store the number of unseen messages 
in the mailbox table
          * and just return that value with a Get and kepp it up to date.
          */
@@ -338,7 +356,7 @@ public class HBaseMessageMapper extends
     }
 
     @Override
-    public void delete(Mailbox<UUID> mailbox, Message<UUID> message) throws 
MailboxException {
+    public void delete(Mailbox<HBaseId> mailbox, Message<HBaseId> message) 
throws MailboxException {
         //TODO: maybe switch to checkAndDelete
         HTable messages = null;
         HTable mailboxes = null;
@@ -349,7 +367,7 @@ public class HBaseMessageMapper extends
              *  and implement countMessages with get.
              */
             Delete delete = new Delete(messageRowKey(message));
-            
mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -1);
+            mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -1);
             messages.delete(delete);
 
         } catch (IOException ex) {
@@ -376,7 +394,7 @@ public class HBaseMessageMapper extends
     }
 
     @Override
-    public Long findFirstUnseenMessageUid(Mailbox<UUID> mailbox) throws 
MailboxException {
+    public Long findFirstUnseenMessageUid(Mailbox<HBaseId> mailbox) throws 
MailboxException {
         HTable messages = null;
         ResultScanner scanner = null;
         try {
@@ -415,7 +433,7 @@ public class HBaseMessageMapper extends
     }
 
     @Override
-    public List<Long> findRecentMessageUidsInMailbox(Mailbox<UUID> mailbox) 
throws MailboxException {
+    public List<Long> findRecentMessageUidsInMailbox(Mailbox<HBaseId> mailbox) 
throws MailboxException {
         /** TODO: improve performance by implementing a last seen and last 
recent value per mailbox.
          * maybe one more call to HBase is less expensive than iterating 
throgh all rows.
          */
@@ -460,7 +478,7 @@ public class HBaseMessageMapper extends
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#add(org.apache.james.mailbox.store.mail.model.Mailbox,
 org.apache.james.mailbox.store.mail.model.Message)
      */
     @Override
-    public MessageMetaData add(Mailbox<UUID> mailbox, Message<UUID> message) 
throws MailboxException {
+    public MessageMetaData add(Mailbox<HBaseId> mailbox, Message<HBaseId> 
message) throws MailboxException {
         message.setUid(uidProvider.nextUid(mailboxSession, mailbox));
         // if a mailbox does not support mod-sequences the provider may be null
         if (modSeqProvider != null) {
@@ -476,10 +494,10 @@ public class HBaseMessageMapper extends
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#updateFlags(org.apache.james.mailbox.store.mail.model.Mailbox,
 javax.mail.Flags, boolean, boolean, org.apache.james.mailbox.MessageRange)
      */
     @Override
-    public Iterator<UpdatedFlags> updateFlags(final Mailbox<UUID> mailbox, 
final Flags flags, final boolean value, final boolean replace, MessageRange 
set) throws MailboxException {
+    public Iterator<UpdatedFlags> updateFlags(final Mailbox<HBaseId> mailbox, 
final Flags flags, final boolean value, final boolean replace, MessageRange 
set) throws MailboxException {
 
         final List<UpdatedFlags> updatedFlags = new ArrayList<UpdatedFlags>();
-        Iterator<Message<UUID>> messagesFound = findInMailbox(mailbox, set, 
FetchType.Metadata, -1);
+        Iterator<Message<HBaseId>> messagesFound = findInMailbox(mailbox, set, 
FetchType.Metadata, -1);
 
         HTable messages = null;
         long modSeq = -1;
@@ -494,7 +512,7 @@ public class HBaseMessageMapper extends
             messages = new HTable(conf, MESSAGES_TABLE);
             while (messagesFound.hasNext()) {
                 Put put = null;
-                final Message<UUID> member = messagesFound.next();
+                final Message<HBaseId> member = messagesFound.next();
                 Flags originalFlags = member.createFlags();
 
                 if (replace) {
@@ -541,7 +559,7 @@ public class HBaseMessageMapper extends
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox,
 org.apache.james.mailbox.store.mail.model.Message)
      */
     @Override
-    public MessageMetaData copy(Mailbox<UUID> mailbox, Message<UUID> original) 
throws MailboxException {
+    public MessageMetaData copy(Mailbox<HBaseId> mailbox, Message<HBaseId> 
original) throws MailboxException {
         long uid = uidProvider.nextUid(mailboxSession, mailbox);
         long modSeq = -1;
         if (modSeqProvider != null) {
@@ -558,7 +576,7 @@ public class HBaseMessageMapper extends
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox,
 org.apache.james.mailbox.store.mail.model.Message)
      */
     @Override
-    public MessageMetaData move(Mailbox<UUID> mailbox, Message<UUID> original) 
throws MailboxException {
+    public MessageMetaData move(Mailbox<HBaseId> mailbox, Message<HBaseId> 
original) throws MailboxException {
        //TODO implement if possible
        throw new UnsupportedOperationException();
     }
@@ -568,7 +586,7 @@ public class HBaseMessageMapper extends
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#getLastUid(org.apache.james.mailbox.store.mail.model.Mailbox)
      */
     @Override
-    public long getLastUid(Mailbox<UUID> mailbox) throws MailboxException {
+    public long getLastUid(Mailbox<HBaseId> mailbox) throws MailboxException {
         return uidProvider.lastUid(mailboxSession, mailbox);
     }
 
@@ -577,7 +595,7 @@ public class HBaseMessageMapper extends
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#getHighestModSeq(org.apache.james.mailbox.store.mail.model.Mailbox)
      */
     @Override
-    public long getHighestModSeq(Mailbox<UUID> mailbox) throws 
MailboxException {
+    public long getHighestModSeq(Mailbox<HBaseId> mailbox) throws 
MailboxException {
         return modSeqProvider.highestModSeq(mailboxSession, mailbox);
     }
 
@@ -589,7 +607,7 @@ public class HBaseMessageMapper extends
      * @return metaData
      * @throws MailboxException
      */
-    protected MessageMetaData save(Mailbox<UUID> mailbox, Message<UUID> 
message) throws MailboxException {
+    protected MessageMetaData save(Mailbox<HBaseId> mailbox, Message<HBaseId> 
message) throws MailboxException {
         HTable messages = null;
         HTable mailboxes = null;
         BufferedInputStream in = null;
@@ -622,7 +640,7 @@ public class HBaseMessageMapper extends
             in.close();
             out.close();
             // increase the message count for the current mailbox
-            
mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, 1);
+            mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, 1);
             return new SimpleMessageMetaData(message);
         } catch (IOException ex) {
             throw new MailboxException("Error setting flags for messages in " 
+ mailbox, ex);
@@ -658,19 +676,19 @@ public class HBaseMessageMapper extends
         }
     }
 
-    private void deleteDeletedMessagesInMailboxWithUID(Mailbox<UUID> mailbox, 
long uid) throws IOException {
+    private void deleteDeletedMessagesInMailboxWithUID(Mailbox<HBaseId> 
mailbox, long uid) throws IOException {
         //TODO: do I have to check if the message is flagged for delete here?
         HTable messages = new HTable(conf, MESSAGES_TABLE);
         HTable mailboxes = new HTable(conf, MAILBOXES_TABLE);
         Delete delete = new Delete(messageRowKey(mailbox.getMailboxId(), uid));
         messages.delete(delete);
-        mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -1);
-        mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
+        mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -1);
+        mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
         mailboxes.close();
         messages.close();
     }
 
-    private void deleteDeletedMessagesInMailboxBetweenUIDs(Mailbox<UUID> 
mailbox, long fromUid, long toUid) throws IOException {
+    private void deleteDeletedMessagesInMailboxBetweenUIDs(Mailbox<HBaseId> 
mailbox, long fromUid, long toUid) throws IOException {
         HTable messages = new HTable(conf, MESSAGES_TABLE);
         HTable mailboxes = new HTable(conf, MAILBOXES_TABLE);
         List<Delete> deletes = new ArrayList<Delete>();
@@ -690,13 +708,13 @@ public class HBaseMessageMapper extends
         long totalDeletes = deletes.size();
         scanner.close();
         messages.delete(deletes);
-        mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -(totalDeletes - deletes.size()));
-        mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
+        mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -(totalDeletes - deletes.size()));
+        mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
         mailboxes.close();
         messages.close();
     }
 
-    private void deleteDeletedMessagesInMailboxAfterUID(Mailbox<UUID> mailbox, 
long fromUid) throws IOException {
+    private void deleteDeletedMessagesInMailboxAfterUID(Mailbox<HBaseId> 
mailbox, long fromUid) throws IOException {
         HTable messages = new HTable(conf, MESSAGES_TABLE);
         HTable mailboxes = new HTable(conf, MAILBOXES_TABLE);
         List<Delete> deletes = new ArrayList<Delete>();
@@ -716,13 +734,13 @@ public class HBaseMessageMapper extends
         long totalDeletes = deletes.size();
         scanner.close();
         messages.delete(deletes);
-        mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -(totalDeletes - deletes.size()));
-        mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
+        mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -(totalDeletes - deletes.size()));
+        mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
         mailboxes.close();
         messages.close();
     }
 
-    private void deleteDeletedMessagesInMailbox(Mailbox<UUID> mailbox) throws 
IOException {
+    private void deleteDeletedMessagesInMailbox(Mailbox<HBaseId> mailbox) 
throws IOException {
         HTable messages = new HTable(conf, MESSAGES_TABLE);
         HTable mailboxes = new HTable(conf, MAILBOXES_TABLE);
         List<Delete> deletes = new ArrayList<Delete>();
@@ -730,8 +748,7 @@ public class HBaseMessageMapper extends
          * HBase scan operaion are exclusive to the upper bound when providing 
stop row key.
          */
         Scan scan = new Scan(customMessageRowKey(mailbox.getMailboxId(), 0L),
-                new 
PrefixFilter(Bytes.add(Bytes.toBytes(mailbox.getMailboxId().getMostSignificantBits()),
-                
Bytes.toBytes(mailbox.getMailboxId().getLeastSignificantBits()))));
+                new PrefixFilter(mailbox.getMailboxId().toBytes()));
         scan.addColumn(MESSAGES_META_CF, FLAGS_DELETED);
         SingleColumnValueFilter filter = new 
SingleColumnValueFilter(MESSAGES_META_CF, FLAGS_DELETED, CompareOp.EQUAL, 
MARKER_PRESENT);
         scan.setFilter(filter);
@@ -744,16 +761,16 @@ public class HBaseMessageMapper extends
         long totalDeletes = deletes.size();
         scanner.close();
         messages.delete(deletes);
-        mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -(totalDeletes - deletes.size()));
-        mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
+        mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_MESSAGE_COUNT, -(totalDeletes - deletes.size()));
+        mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
         mailboxes.close();
         messages.close();
     }
 
-    private Map<Long, MessageMetaData> createMetaData(List<Message<UUID>> 
uids) {
+    private Map<Long, MessageMetaData> createMetaData(List<Message<HBaseId>> 
uids) {
         final Map<Long, MessageMetaData> data = new HashMap<Long, 
MessageMetaData>();
         for (int i = 0; i < uids.size(); i++) {
-            Message<UUID> m = uids.get(i);
+            Message<HBaseId> m = uids.get(i);
             data.put(m.getUid(), new SimpleMessageMetaData(m));
         }
         return data;

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseModSeqProvider.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseModSeqProvider.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseModSeqProvider.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseModSeqProvider.java
 Mon Jun 29 08:21:12 2015
@@ -18,8 +18,12 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase.mail;
 
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOXES_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_HIGHEST_MODSEQ;
+
 import java.io.IOException;
-import java.util.UUID;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.client.HTable;
@@ -27,16 +31,14 @@ import org.apache.hadoop.hbase.client.Re
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
-
-import static org.apache.james.mailbox.hbase.HBaseUtils.*;
-import static org.apache.james.mailbox.hbase.HBaseNames.*;
 /**
  * ModSeqProvider implementation for HBase.
  * 
  */
-public class HBaseModSeqProvider implements ModSeqProvider<UUID> {
+public class HBaseModSeqProvider implements ModSeqProvider<HBaseId> {
 
     /** Link to the HBase Configuration object and specific mailbox names */
     private final Configuration conf;
@@ -46,11 +48,11 @@ public class HBaseModSeqProvider impleme
     }
 
     @Override
-    public long highestModSeq(MailboxSession session, Mailbox<UUID> mailbox) 
throws MailboxException {
+    public long highestModSeq(MailboxSession session, Mailbox<HBaseId> 
mailbox) throws MailboxException {
         HTable mailboxes = null;
         try {
             mailboxes = new HTable(conf, MAILBOXES_TABLE);
-            Get get = new Get(mailboxRowKey(mailbox.getMailboxId()));
+            Get get = new Get(mailbox.getMailboxId().toBytes());
             get.addColumn(MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ);
             get.setMaxVersions(1);
             Result result = mailboxes.get(get);
@@ -74,11 +76,11 @@ public class HBaseModSeqProvider impleme
     }
 
     @Override
-    public long nextModSeq(MailboxSession session, Mailbox<UUID> mailbox) 
throws MailboxException {
+    public long nextModSeq(MailboxSession session, Mailbox<HBaseId> mailbox) 
throws MailboxException {
         HTable mailboxes = null;
         try {
             mailboxes = new HTable(conf, MAILBOXES_TABLE);
-            long newValue = 
mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_HIGHEST_MODSEQ, 1);
+            long newValue = 
mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), MAILBOX_CF, 
MAILBOX_HIGHEST_MODSEQ, 1);
             return newValue;
         } catch (IOException e) {
             throw new MailboxException("lastUid", e);

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseUidProvider.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseUidProvider.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseUidProvider.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseUidProvider.java
 Mon Jun 29 08:21:12 2015
@@ -18,8 +18,11 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase.mail;
 
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOXES_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_LASTUID;
+
 import java.io.IOException;
-import java.util.UUID;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Get;
@@ -28,16 +31,14 @@ import org.apache.hadoop.hbase.client.Re
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
-
-import static org.apache.james.mailbox.hbase.HBaseUtils.*;
-import static org.apache.james.mailbox.hbase.HBaseNames.*;
 /**
  * Message UidProvider for HBase.
  * 
  */
-public class HBaseUidProvider implements UidProvider<UUID> {
+public class HBaseUidProvider implements UidProvider<HBaseId> {
 
     /** Link to the HBase Configuration object and specific mailbox names */
     private final Configuration conf;
@@ -54,11 +55,11 @@ public class HBaseUidProvider implements
      * @throws MailboxException 
      */
     @Override
-    public long lastUid(MailboxSession session, Mailbox<UUID> mailbox) throws 
MailboxException {
+    public long lastUid(MailboxSession session, Mailbox<HBaseId> mailbox) 
throws MailboxException {
         HTable mailboxes = null;
         try {
             mailboxes = new HTable(conf, MAILBOXES_TABLE);
-            Get get = new Get(mailboxRowKey(mailbox.getMailboxId()));
+            Get get = new Get(mailbox.getMailboxId().toBytes());
             get.addColumn(MAILBOX_CF, MAILBOX_LASTUID);
             get.setMaxVersions(1);
             Result result = mailboxes.get(get);
@@ -90,11 +91,11 @@ public class HBaseUidProvider implements
      * @throws MailboxException 
      */
     @Override
-    public long nextUid(MailboxSession session, Mailbox<UUID> mailbox) throws 
MailboxException {
+    public long nextUid(MailboxSession session, Mailbox<HBaseId> mailbox) 
throws MailboxException {
         HTable mailboxes = null;
         try {
             mailboxes = new HTable(conf, MAILBOXES_TABLE);
-            long newValue = 
mailboxes.incrementColumnValue(mailboxRowKey(mailbox.getMailboxId()), 
MAILBOX_CF, MAILBOX_LASTUID, 1);
+            long newValue = 
mailboxes.incrementColumnValue(mailbox.getMailboxId().toBytes(), MAILBOX_CF, 
MAILBOX_LASTUID, 1);
             mailboxes.close();
             return newValue;
         } catch (IOException e) {

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/model/HBaseMailbox.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/model/HBaseMailbox.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/model/HBaseMailbox.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/model/HBaseMailbox.java
 Mon Jun 29 08:21:12 2015
@@ -20,6 +20,7 @@ package org.apache.james.mailbox.hbase.m
 
 import java.util.UUID;
 
+import org.apache.james.mailbox.hbase.HBaseId;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.SimpleMailboxACL;
@@ -30,11 +31,11 @@ import org.apache.james.mailbox.store.ma
  * implementations.
  * 
  */
-public class HBaseMailbox implements Mailbox<UUID> {
+public class HBaseMailbox implements Mailbox<HBaseId> {
 
     private static final String TAB = " ";
     /** The value for the mailboxId field */
-    private UUID mailboxId;
+    private HBaseId mailboxId;
     /** The value for the name field */
     private String name;
     /** The value for the uidValidity field */
@@ -52,18 +53,18 @@ public class HBaseMailbox implements Mai
         this.namespace = mailboxPath.getNamespace();
         this.uidValidity = uidValidity;
         //TODO: this has to change to something that can guarantee that 
mailboxId is unique
-        this.mailboxId = UUID.randomUUID();
+        this.mailboxId = HBaseId.of(UUID.randomUUID());
     }
 
     /**
      * @see org.apache.james.mailbox.store.mail.model.Mailbox#getMailboxId()
      */
     @Override
-    public UUID getMailboxId() {
+    public HBaseId getMailboxId() {
         return mailboxId;
     }
 
-    public void setMailboxId(UUID mailboxId) {
+    public void setMailboxId(HBaseId mailboxId) {
         this.mailboxId = mailboxId;
     }
     /*
@@ -143,7 +144,7 @@ public class HBaseMailbox implements Mai
     public int hashCode() {
         final int PRIME = 31;
         int result = 1;
-        result = PRIME * result + (int) (mailboxId.getMostSignificantBits() ^ 
(mailboxId.getMostSignificantBits() >>> 32));
+        result = PRIME * result + mailboxId.hashCode();
         return result;
     }
 

Modified: 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/main/java/org/apache/james/mailbox/hbase/user/HBaseSubscriptionMapper.java
 Mon Jun 29 08:21:12 2015
@@ -18,9 +18,14 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase.user;
 
+import static org.apache.james.mailbox.hbase.HBaseNames.SUBSCRIPTIONS_TABLE;
+import static org.apache.james.mailbox.hbase.HBaseNames.SUBSCRIPTION_CF;
+import static org.apache.james.mailbox.hbase.HBaseUtils.toPut;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.client.Delete;
@@ -34,9 +39,6 @@ import org.apache.james.mailbox.hbase.HB
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
 import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
-
-import static org.apache.james.mailbox.hbase.HBaseUtils.*;
-import static org.apache.james.mailbox.hbase.HBaseNames.*;
 /**
  * HBase implementation of a {@link SubscriptionMapper}. 
  * I don't know if this class is thread-safe!

Modified: 
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseMailboxSessionMapperFactoryTest.java
 Mon Jun 29 08:21:12 2015
@@ -19,7 +19,6 @@
 package org.apache.james.mailbox.hbase;
 
 import java.io.IOException;
-import java.util.UUID;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.james.mailbox.MailboxSession;
 import static org.apache.james.mailbox.hbase.HBaseNames.*;
@@ -75,7 +74,7 @@ public class HBaseMailboxSessionMapperFa
         LOG.info("createMessageMapper");
         MailboxSession session = null;
         HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, null);
-        MessageMapper<UUID> messageMapper = 
instance.createMessageMapper(session);
+        MessageMapper<HBaseId> messageMapper = 
instance.createMessageMapper(session);
         assertNotNull(messageMapper);
         assertTrue(messageMapper instanceof MessageMapper);
     }
@@ -89,7 +88,7 @@ public class HBaseMailboxSessionMapperFa
         LOG.info("createMailboxMapper");
         MailboxSession session = null;
         HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, null);
-        MailboxMapper<UUID> mailboxMapper = 
instance.createMailboxMapper(session);
+        MailboxMapper<HBaseId> mailboxMapper = 
instance.createMailboxMapper(session);
         assertNotNull(mailboxMapper);
         assertTrue(mailboxMapper instanceof MailboxMapper);
     }
@@ -115,9 +114,9 @@ public class HBaseMailboxSessionMapperFa
     @Test
     public void testGetModSeqProvider() {
         LOG.info("getModSeqProvider");
-        ModSeqProvider<UUID> expResult = new HBaseModSeqProvider(conf);
+        ModSeqProvider<HBaseId> expResult = new HBaseModSeqProvider(conf);
         HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, null, expResult);
-        ModSeqProvider<UUID> result = instance.getModSeqProvider();
+        ModSeqProvider<HBaseId> result = instance.getModSeqProvider();
         assertEquals(expResult, result);
     }
 
@@ -127,9 +126,9 @@ public class HBaseMailboxSessionMapperFa
     @Test
     public void testGetUidProvider() {
         LOG.info("getUidProvider");
-        UidProvider<UUID> expResult = new HBaseUidProvider(conf);
+        UidProvider<HBaseId> expResult = new HBaseUidProvider(conf);
         HBaseMailboxSessionMapperFactory instance = new 
HBaseMailboxSessionMapperFactory(conf, expResult, null);
-        UidProvider<UUID> result = instance.getUidProvider();
+        UidProvider<HBaseId> result = instance.getUidProvider();
         assertEquals(expResult, result);
     }
 }

Modified: 
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java?rev=1688109&r1=1688108&r2=1688109&view=diff
==============================================================================
--- 
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
 (original)
+++ 
james/mailbox/trunk/hbase/src/test/java/org/apache/james/mailbox/hbase/HBaseUtilsTest.java
 Mon Jun 29 08:21:12 2015
@@ -18,16 +18,41 @@
  ****************************************************************/
 package org.apache.james.mailbox.hbase;
 
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_ANSWERED;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_DELETED;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_DRAFT;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_FLAGGED;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_RECENT;
+import static org.apache.james.mailbox.hbase.FlagConvertor.FLAGS_SEEN;
+import static org.apache.james.mailbox.hbase.FlagConvertor.userFlagToBytes;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_HIGHEST_MODSEQ;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_LASTUID;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_MESSAGE_COUNT;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_NAME;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_NAMESPACE;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_UIDVALIDITY;
+import static org.apache.james.mailbox.hbase.HBaseNames.MAILBOX_USER;
+import static org.apache.james.mailbox.hbase.HBaseNames.MARKER_MISSING;
+import static org.apache.james.mailbox.hbase.HBaseNames.MARKER_PRESENT;
+import static org.apache.james.mailbox.hbase.HBaseNames.MESSAGES_META_CF;
+import static org.apache.james.mailbox.hbase.HBaseNames.SUBSCRIPTION_CF;
+import static org.apache.james.mailbox.hbase.HBaseUtils.HBaseIdFromRowKey;
+import static org.apache.james.mailbox.hbase.HBaseUtils.flagsToPut;
+import static org.apache.james.mailbox.hbase.HBaseUtils.toPut;
+import static org.apache.james.mailbox.hbase.PropertyConvertor.getProperty;
+import static org.apache.james.mailbox.hbase.PropertyConvertor.getValue;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Date;
 import java.util.UUID;
+
 import javax.mail.Flags;
+
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.util.Bytes;
-import static org.apache.james.mailbox.hbase.FlagConvertor.*;
-import static org.apache.james.mailbox.hbase.HBaseNames.*;
-import static org.apache.james.mailbox.hbase.HBaseUtils.*;
-import static org.apache.james.mailbox.hbase.PropertyConvertor.getProperty;
-import static org.apache.james.mailbox.hbase.PropertyConvertor.getValue;
 import org.apache.james.mailbox.hbase.mail.model.HBaseMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.mail.model.Property;
@@ -36,14 +61,13 @@ import org.apache.james.mailbox.store.ma
 import org.apache.james.mailbox.store.mail.model.impl.SimpleProperty;
 import org.apache.james.mailbox.store.user.model.Subscription;
 import org.apache.james.mailbox.store.user.model.impl.SimpleSubscription;
-import static org.junit.Assert.*;
 import org.junit.Test;
 
 /**
  * Tests for HBase Mailbox store utility methods .
  */
 public class HBaseUtilsTest {
-
+    
     /**
      * Test of mailboxRowKey method, of class HBaseMailbox.
      */
@@ -51,15 +75,15 @@ public class HBaseUtilsTest {
     public void testRowKey_All() {
         System.out.println("getRowKey and UUIDFromRowKey");
         final HBaseMailbox mailbox = new HBaseMailbox(new MailboxPath("gsoc", 
"ieugen", "INBOX"), 1234);
-        UUID uuid = mailbox.getMailboxId();
-        byte[] expResult = mailboxRowKey(uuid);
-        byte[] result = mailboxRowKey(mailbox.getMailboxId());
+        HBaseId uuid = mailbox.getMailboxId();
+        byte[] expResult = uuid.toBytes();
+        byte[] result = mailbox.getMailboxId().toBytes();
         assertArrayEquals(expResult, result);
 
-        UUID newUUID = UUIDFromRowKey(result);
+        HBaseId newUUID = HBaseIdFromRowKey(result);
         assertEquals(uuid, newUUID);
 
-        newUUID = UUIDFromRowKey(expResult);
+        newUUID = HBaseIdFromRowKey(expResult);
         assertEquals(uuid, newUUID);
     }
 
@@ -72,7 +96,7 @@ public class HBaseUtilsTest {
         final HBaseMailbox instance = new HBaseMailbox(new MailboxPath("gsoc", 
"ieugen", "INBOX"), 1234);
 
         Put result = toPut(instance);
-        assertArrayEquals(mailboxRowKey(instance.getMailboxId()), 
result.getRow());
+        assertArrayEquals(instance.getMailboxId().toBytes(), result.getRow());
         assertTrue(result.has(MAILBOX_CF, MAILBOX_USER, 
Bytes.toBytes(instance.getUser())));
         assertTrue(result.has(MAILBOX_CF, MAILBOX_NAME, 
Bytes.toBytes(instance.getName())));
         assertTrue(result.has(MAILBOX_CF, MAILBOX_NAMESPACE, 
Bytes.toBytes(instance.getNamespace())));
@@ -121,7 +145,7 @@ public class HBaseUtilsTest {
         flags.add(Flags.Flag.FLAGGED);
         flags.add("userFlag1");
         flags.add("userFlag2");
-        UUID uuid = UUID.randomUUID();
+        HBaseId uuid = HBaseId.of(UUID.randomUUID());
         final SimpleMessage message = new SimpleMessage(new Date(), 100, 10, 
null, flags, new PropertyBuilder(), uuid);
         Put put = flagsToPut(message, flags);
         //test for the system flags



---------------------------------------------------------------------
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