You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/07/29 20:43:48 UTC

svn commit: r980539 - in /james/imap/trunk: jcr/src/main/java/org/apache/james/imap/jcr/ jcr/src/main/java/org/apache/james/imap/jcr/mail/ jpa/src/main/java/org/apache/james/imap/jpa/ jpa/src/main/java/org/apache/james/imap/jpa/mail/ jpa/src/main/java/...

Author: norman
Date: Thu Jul 29 18:43:47 2010
New Revision: 980539

URL: http://svn.apache.org/viewvc?rev=980539&view=rev
Log:
 Identify mailbox by Mailbox objects instead of mailboxId (IMAP-183). Thx to Tim-Christian Mundt for the patch, I only did some small adjustments to fix a bug in the memory based backend + jpa backend

Modified:
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMessageManager.java
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMessageManager.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMessageManager.java
    james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMessageManager.java
    james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMessageManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMessageManager.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMessageManager.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/JCRMessageManager.java Thu Jul 29 18:43:47 2010
@@ -64,7 +64,7 @@ public class JCRMessageManager extends S
         for (Header header: headers) {
             jcrHeaders.add((JCRHeader) header);
         }
-        final MailboxMembership<String> message = new JCRMessage(getMailboxId(), uid, internalDate, 
+        final MailboxMembership<String> message = new JCRMessage(mailbox.getMailboxId(), uid, internalDate, 
                 size, flags, document, bodyStartOctet, jcrHeaders, propertyBuilder, log);
         return message;
     }

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java Thu Jul 29 18:43:47 2010
@@ -50,6 +50,7 @@ import org.apache.james.imap.mailbox.Mes
 import org.apache.james.imap.mailbox.SearchQuery.Criterion;
 import org.apache.james.imap.mailbox.SearchQuery.NumericRange;
 import org.apache.james.imap.store.mail.MessageMapper;
+import org.apache.james.imap.store.mail.model.Mailbox;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
 
 /**
@@ -128,13 +129,13 @@ public class JCRMessageMapper extends Ab
      * 
      * See http://wiki.apache.org/jackrabbit/EncodingAndEscaping
      * 
-     * @param uuid
+     * @param mailbox
      * @return
      * @throws ItemNotFoundException
      * @throws RepositoryException
      */
-    private String getMailboxPath(String uuid) throws ItemNotFoundException, RepositoryException {
-        return ISO9075.encodePath(getSession().getNodeByIdentifier(uuid).getPath());
+    private String getMailboxPath(Mailbox<String> mailbox) throws ItemNotFoundException, RepositoryException {
+        return ISO9075.encodePath(getSession().getNodeByIdentifier(mailbox.getMailboxId()).getPath());
     }
     /*
      * (non-Javadoc)
@@ -142,10 +143,10 @@ public class JCRMessageMapper extends Ab
      * @see
      * org.apache.james.imap.store.mail.MessageMapper#countMessagesInMailbox()
      */
-    public long countMessagesInMailbox(String uuid) throws StorageException {
+    public long countMessagesInMailbox(Mailbox<String> mailbox) throws StorageException {
         try {
             // we use order by because without it count will always be 0 in jackrabbit
-            String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message) order by @" + JCRMessage.UID_PROPERTY;
+            String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message) order by @" + JCRMessage.UID_PROPERTY;
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
             NodeIterator nodes = result.getNodes();
@@ -171,11 +172,11 @@ public class JCRMessageMapper extends Ab
      * org.apache.james.imap.store.mail.MessageMapper#countUnseenMessagesInMailbox
      * ()
      */
-    public long countUnseenMessagesInMailbox(String uuid) throws StorageException {
+    public long countUnseenMessagesInMailbox(Mailbox<String> mailbox) throws StorageException {
         
         try {
             // we use order by because without it count will always be 0 in jackrabbit
-            String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY;
+            String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY;
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
             NodeIterator nodes = result.getNodes();
@@ -199,7 +200,7 @@ public class JCRMessageMapper extends Ab
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#delete(java.lang.Object, org.apache.james.imap.store.mail.model.MailboxMembership)
      */
-    public void delete(String uuid, MailboxMembership<String> message) throws StorageException {
+    public void delete(Mailbox<String> mailbox, MailboxMembership<String> message) throws StorageException {
         JCRMessage membership = (JCRMessage) message;
         if (membership.isPersistent()) {
             try {
@@ -218,7 +219,7 @@ public class JCRMessageMapper extends Ab
      * org.apache.james.imap.store.mail.MessageMapper#findInMailbox(org.apache
      * .james.imap.mailbox.MessageRange)
      */
-    public List<MailboxMembership<String>> findInMailbox(String uuid, MessageRange set) throws StorageException {
+    public List<MailboxMembership<String>> findInMailbox(Mailbox<String> mailbox, MessageRange set) throws StorageException {
         try {
             final List<MailboxMembership<String>> results;
             final long from = set.getUidFrom();
@@ -227,16 +228,16 @@ public class JCRMessageMapper extends Ab
             switch (type) {
                 default:
                 case ALL:
-                    results = findMessagesInMailbox(uuid);
+                    results = findMessagesInMailbox(mailbox);
                     break;
                 case FROM:
-                    results = findMessagesInMailboxAfterUID(uuid, from);
+                    results = findMessagesInMailboxAfterUID(mailbox, from);
                     break;
                 case ONE:
-                    results = findMessageInMailboxWithUID(uuid, from);
+                    results = findMessageInMailboxWithUID(mailbox, from);
                     break;
                 case RANGE:
-                    results = findMessagesInMailboxBetweenUIDs(uuid, from, to);
+                    results = findMessagesInMailboxBetweenUIDs(mailbox, from, to);
                     break;       
             }
             return results;
@@ -245,9 +246,9 @@ public class JCRMessageMapper extends Ab
         }
     }
 
-    private List<MailboxMembership<String>> findMessagesInMailboxAfterUID(String uuid, long uid) throws RepositoryException {
+    private List<MailboxMembership<String>> findMessagesInMailboxAfterUID(Mailbox<String> mailbox, long uid) throws RepositoryException {
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + uid + "] order by @" + JCRMessage.UID_PROPERTY;
+        String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + uid + "] order by @" + JCRMessage.UID_PROPERTY;
 
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -259,9 +260,9 @@ public class JCRMessageMapper extends Ab
         return list;
     }
 
-    private List<MailboxMembership<String>> findMessageInMailboxWithUID(String uuid, long uid) throws RepositoryException  {
+    private List<MailboxMembership<String>> findMessageInMailboxWithUID(Mailbox<String> mailbox, long uid) throws RepositoryException  {
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + "]";
+        String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + "]";
 
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         Query query = manager.createQuery(queryString, Query.XPATH);
@@ -274,9 +275,9 @@ public class JCRMessageMapper extends Ab
         return list;
     }
 
-    private List<MailboxMembership<String>> findMessagesInMailboxBetweenUIDs(String uuid, long from, long to) throws RepositoryException {
+    private List<MailboxMembership<String>> findMessagesInMailboxBetweenUIDs(Mailbox<String> mailbox, long from, long to) throws RepositoryException {
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + from + " and @" + JCRMessage.UID_PROPERTY + "<=" + to + "] order by @" + JCRMessage.UID_PROPERTY;
+        String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + from + " and @" + JCRMessage.UID_PROPERTY + "<=" + to + "] order by @" + JCRMessage.UID_PROPERTY;
         
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -288,10 +289,10 @@ public class JCRMessageMapper extends Ab
         return list;
     }
     
-    private List<MailboxMembership<String>> findMessagesInMailbox(String uuid) throws RepositoryException {        
+    private List<MailboxMembership<String>> findMessagesInMailbox(Mailbox<String> mailbox) throws RepositoryException {        
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
         
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message) order by @" + JCRMessage.UID_PROPERTY;
+        String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message) order by @" + JCRMessage.UID_PROPERTY;
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
 
@@ -304,9 +305,9 @@ public class JCRMessageMapper extends Ab
 
     
     
-    private List<MailboxMembership<String>> findDeletedMessagesInMailboxAfterUID(String uuid, long uid) throws RepositoryException {
+    private List<MailboxMembership<String>> findDeletedMessagesInMailboxAfterUID(Mailbox<String> mailbox, long uid) throws RepositoryException {
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + uid + " and @" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
+        String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + uid + " and @" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
  
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -318,9 +319,9 @@ public class JCRMessageMapper extends Ab
         return list;
     }
 
-    private List<MailboxMembership<String>> findDeletedMessageInMailboxWithUID(String uuid, long uid) throws RepositoryException  {
+    private List<MailboxMembership<String>> findDeletedMessageInMailboxWithUID(Mailbox<String> mailbox, long uid) throws RepositoryException  {
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + " and @" + JCRMessage.DELETED_PROPERTY+ "='true']";
+        String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + " and @" + JCRMessage.DELETED_PROPERTY+ "='true']";
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         Query query = manager.createQuery(queryString, Query.XPATH);
         query.setLimit(1);
@@ -334,9 +335,9 @@ public class JCRMessageMapper extends Ab
         return list;
     }
 
-    private List<MailboxMembership<String>> findDeletedMessagesInMailboxBetweenUIDs(String uuid, long from, long to) throws RepositoryException {
+    private List<MailboxMembership<String>> findDeletedMessagesInMailboxBetweenUIDs(Mailbox<String> mailbox, long from, long to) throws RepositoryException {
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + from + " and @" + JCRMessage.UID_PROPERTY + "<=" + to + " and @" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
+        String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + from + " and @" + JCRMessage.UID_PROPERTY + "<=" + to + " and @" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
        
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -348,10 +349,10 @@ public class JCRMessageMapper extends Ab
         return list;
     }
     
-    private List<MailboxMembership<String>> findDeletedMessagesInMailbox(String uuid) throws RepositoryException {
+    private List<MailboxMembership<String>> findDeletedMessagesInMailbox(Mailbox<String> mailbox) throws RepositoryException {
         
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
+        String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
         
         QueryManager manager = getSession().getWorkspace().getQueryManager();
         QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -371,7 +372,7 @@ public class JCRMessageMapper extends Ab
      * org.apache.james.imap.store.mail.MessageMapper#findMarkedForDeletionInMailbox
      * (org.apache.james.imap.mailbox.MessageRange)
      */
-    public List<MailboxMembership<String>> findMarkedForDeletionInMailbox(String uuid, MessageRange set) throws StorageException {
+    public List<MailboxMembership<String>> findMarkedForDeletionInMailbox(Mailbox<String> mailbox, MessageRange set) throws StorageException {
         try {
             final List<MailboxMembership<String>> results;
             final long from = set.getUidFrom();
@@ -380,16 +381,16 @@ public class JCRMessageMapper extends Ab
             switch (type) {
                 default:
                 case ALL:
-                    results = findDeletedMessagesInMailbox(uuid);
+                    results = findDeletedMessagesInMailbox(mailbox);
                     break;
                 case FROM:
-                    results = findDeletedMessagesInMailboxAfterUID(uuid, from);
+                    results = findDeletedMessagesInMailboxAfterUID(mailbox, from);
                     break;
                 case ONE:
-                    results = findDeletedMessageInMailboxWithUID(uuid, from);
+                    results = findDeletedMessageInMailboxWithUID(mailbox, from);
                     break;
                 case RANGE:
-                    results = findDeletedMessagesInMailboxBetweenUIDs(uuid, from, to);
+                    results = findDeletedMessagesInMailboxBetweenUIDs(mailbox, from, to);
                     break;       
             }
             return results;
@@ -408,12 +409,12 @@ public class JCRMessageMapper extends Ab
      * org.apache.james.imap.store.mail.MessageMapper#findRecentMessagesInMailbox
      * ()
      */
-    public List<MailboxMembership<String>> findRecentMessagesInMailbox(String uuid, int limit) throws StorageException {
+    public List<MailboxMembership<String>> findRecentMessagesInMailbox(Mailbox<String> mailbox, int limit) throws StorageException {
         
         try {
  
             List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-            String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.RECENT_PROPERTY +"='true'] order by @" + JCRMessage.UID_PROPERTY;
+            String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.RECENT_PROPERTY +"='true'] order by @" + JCRMessage.UID_PROPERTY;
             
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             Query query = manager.createQuery(queryString, Query.XPATH);
@@ -440,11 +441,11 @@ public class JCRMessageMapper extends Ab
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#findUnseenMessagesInMailbox()
      */
-    public List<MailboxMembership<String>> findUnseenMessagesInMailbox(String uuid, int limit) throws StorageException {
+    public List<MailboxMembership<String>> findUnseenMessagesInMailbox(Mailbox<String> mailbox, int limit) throws StorageException {
         try {
   
             List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-            String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY;
+            String queryString = "/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)[@" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY;
 
             QueryManager manager = getSession().getWorkspace().getQueryManager();
             
@@ -471,7 +472,7 @@ public class JCRMessageMapper extends Ab
      * org.apache.james.imap.store.mail.MessageMapper#save(org.apache.james.
      * imap.store.mail.model.MailboxMembership)
      */
-    public void save(String uuid, MailboxMembership<String> message) throws StorageException {
+    public void save(Mailbox<String> mailbox, MailboxMembership<String> message) throws StorageException {
         final JCRMessage membership = (JCRMessage) message;
         try {
 
@@ -498,7 +499,7 @@ public class JCRMessageMapper extends Ab
                 final String min = convertIntToString(cal.get(Calendar.MINUTE));
 
                 Node node = null;
-                Node mailboxNode = getSession().getNodeByIdentifier(uuid);
+                Node mailboxNode = getSession().getNodeByIdentifier(mailbox.getMailboxId());
 
                 NodeLocker locker = getNodeLocker();
 
@@ -605,10 +606,10 @@ public class JCRMessageMapper extends Ab
      * org.apache.james.imap.store.mail.MessageMapper#searchMailbox(org.apache
      * .james.imap.mailbox.SearchQuery)
      */
-    public List<MailboxMembership<String>> searchMailbox(String uuid, SearchQuery query) throws StorageException {
+    public List<MailboxMembership<String>> searchMailbox(Mailbox<String> mailbox, SearchQuery query) throws StorageException {
         try {
             List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-            final Query xQuery = formulateXPath(uuid, query);
+            final Query xQuery = formulateXPath(mailbox, query);
             
             QueryResult result = xQuery.execute();
             
@@ -631,9 +632,9 @@ public class JCRMessageMapper extends Ab
      * @throws RepositoryException 
      * @throws ItemNotFoundException 
      */
-    private Query formulateXPath(String uuid, SearchQuery query) throws ItemNotFoundException, RepositoryException {
+    private Query formulateXPath(Mailbox<String> mailbox, SearchQuery query) throws ItemNotFoundException, RepositoryException {
         final StringBuilder queryBuilder = new StringBuilder();
-        queryBuilder.append("/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)");
+        queryBuilder.append("/jcr:root" + getMailboxPath(mailbox) + "//element(*,jamesMailbox:message)");
         final List<Criterion> criteria = query.getCriterias();
         boolean range = false;
         int rangeLength = -1;
@@ -684,12 +685,12 @@ public class JCRMessageMapper extends Ab
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#copy(java.lang.Object, long, org.apache.james.imap.store.mail.model.MailboxMembership)
      */
-    public MailboxMembership<String> copy(String uuid, long uid, MailboxMembership<String> oldmessage) throws StorageException{
+    public MailboxMembership<String> copy(Mailbox<String> mailbox, long uid, MailboxMembership<String> oldmessage) throws StorageException{
         try {
-            String newMessagePath = getSession().getNodeByIdentifier(uuid).getPath() + NODE_DELIMITER + String.valueOf(uid);
-            getSession().getWorkspace().copy(((JCRMessage)oldmessage).getNode().getPath(), getSession().getNodeByIdentifier(uuid).getPath() + NODE_DELIMITER + String.valueOf(uid));
+            String newMessagePath = getSession().getNodeByIdentifier(mailbox.getMailboxId()).getPath() + NODE_DELIMITER + String.valueOf(uid);
+            getSession().getWorkspace().copy(((JCRMessage)oldmessage).getNode().getPath(), getSession().getNodeByIdentifier(mailbox.getMailboxId()).getPath() + NODE_DELIMITER + String.valueOf(uid));
             Node node = getSession().getNode(newMessagePath);
-            node.setProperty(JCRMessage.MAILBOX_UUID_PROPERTY, uuid);
+            node.setProperty(JCRMessage.MAILBOX_UUID_PROPERTY, mailbox.getMailboxId());
             node.setProperty(JCRMessage.UID_PROPERTY, uid);
             return new JCRMessage(node,getLogger());
         } catch (RepositoryException e) {

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMessageManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMessageManager.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMessageManager.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/JPAMessageManager.java Thu Jul 29 18:43:47 2010
@@ -55,7 +55,7 @@ public class JPAMessageManager extends S
         for (Header header: headers) {
             jpaHeaders.add((JPAHeader) header);
         }
-        final MailboxMembership<Long> message = new JPAMailboxMembership(getMailboxId(), uid, internalDate, size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
+        final MailboxMembership<Long> message = new JPAMailboxMembership(mailbox.getMailboxId(), uid, internalDate, size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
         return message;
     }
 

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java Thu Jul 29 18:43:47 2010
@@ -37,6 +37,7 @@ import org.apache.james.imap.mailbox.Mes
 import org.apache.james.imap.mailbox.SearchQuery.Criterion;
 import org.apache.james.imap.mailbox.SearchQuery.NumericRange;
 import org.apache.james.imap.store.mail.MessageMapper;
+import org.apache.james.imap.store.mail.model.Mailbox;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
 
 
@@ -53,7 +54,7 @@ public class JPAMessageMapper extends JP
     /**
      * @see org.apache.james.imap.store.mail.MessageMapper#findInMailbox(org.apache.james.imap.mailbox.MessageRange)
      */
-    public List<MailboxMembership<Long>> findInMailbox(Long mailboxId, MessageRange set) throws StorageException {
+    public List<MailboxMembership<Long>> findInMailbox(Mailbox<Long> mailbox, MessageRange set) throws StorageException {
         try {
             final List<MailboxMembership<Long>> results;
             final long from = set.getUidFrom();
@@ -62,16 +63,16 @@ public class JPAMessageMapper extends JP
             switch (type) {
                 default:
                 case ALL:
-                    results = findMessagesInMailbox(mailboxId);
+                    results = findMessagesInMailbox(mailbox);
                     break;
                 case FROM:
-                    results = findMessagesInMailboxAfterUID(mailboxId, from);
+                    results = findMessagesInMailboxAfterUID(mailbox, from);
                     break;
                 case ONE:
-                    results = findMessagesInMailboxWithUID(mailboxId, from);
+                    results = findMessagesInMailboxWithUID(mailbox, from);
                     break;
                 case RANGE:
-                    results = findMessagesInMailboxBetweenUIDs(mailboxId, from, to);
+                    results = findMessagesInMailboxBetweenUIDs(mailbox, from, to);
                     break;       
             }
             return results;
@@ -81,53 +82,53 @@ public class JPAMessageMapper extends JP
     }
 
     @SuppressWarnings("unchecked")
-    private List<MailboxMembership<Long>> findMessagesInMailboxAfterUID(Long mailboxId, long uid) {
+    private List<MailboxMembership<Long>> findMessagesInMailboxAfterUID(Mailbox<Long> mailbox, long uid) {
         return getEntityManager().createNamedQuery("findMessagesInMailboxAfterUID")
-        .setParameter("idParam", mailboxId)
+        .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("uidParam", uid).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<MailboxMembership<Long>> findMessagesInMailboxWithUID(Long mailboxId, long uid) {
+    private List<MailboxMembership<Long>> findMessagesInMailboxWithUID(Mailbox<Long> mailbox, long uid) {
         return getEntityManager().createNamedQuery("findMessagesInMailboxWithUID")
-        .setParameter("idParam", mailboxId)
+        .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("uidParam", uid).setMaxResults(1).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<MailboxMembership<Long>> findMessagesInMailboxBetweenUIDs(Long mailboxId, long from, long to) {
+    private List<MailboxMembership<Long>> findMessagesInMailboxBetweenUIDs(Mailbox<Long> mailbox, long from, long to) {
         return getEntityManager().createNamedQuery("findMessagesInMailboxBetweenUIDs")
-        .setParameter("idParam", mailboxId)
+        .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("fromParam", from)
         .setParameter("toParam", to).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<MailboxMembership<Long>> findMessagesInMailbox(Long mailboxId) {
-        return getEntityManager().createNamedQuery("findMessagesInMailbox").setParameter("idParam", mailboxId).getResultList();
+    private List<MailboxMembership<Long>> findMessagesInMailbox(Mailbox<Long> mailbox) {
+        return getEntityManager().createNamedQuery("findMessagesInMailbox").setParameter("idParam", mailbox.getMailboxId()).getResultList();
     }
 
     /**
      * @see org.apache.james.imap.store.mail.MessageMapper#findMarkedForDeletionInMailbox(org.apache.james.imap.mailbox.MessageRange)
      */
-    public List<MailboxMembership<Long>> findMarkedForDeletionInMailbox(Long mailboxId, final MessageRange set) throws StorageException {
+    public List<MailboxMembership<Long>> findMarkedForDeletionInMailbox(Mailbox<Long> mailbox, final MessageRange set) throws StorageException {
         try {
             final List<MailboxMembership<Long>> results;
             final long from = set.getUidFrom();
             final long to = set.getUidTo();
             switch (set.getType()) {
                 case ONE:
-                    results = findDeletedMessagesInMailboxWithUID(mailboxId, from);
+                    results = findDeletedMessagesInMailboxWithUID(mailbox, from);
                     break;
                 case RANGE:
-                    results = findDeletedMessagesInMailboxBetweenUIDs(mailboxId, from, to);
+                    results = findDeletedMessagesInMailboxBetweenUIDs(mailbox, from, to);
                     break;
                 case FROM:
-                    results = findDeletedMessagesInMailboxAfterUID(mailboxId, from);
+                    results = findDeletedMessagesInMailboxAfterUID(mailbox, from);
                     break;
                 default:
                 case ALL:
-                    results = findDeletedMessagesInMailbox(mailboxId);
+                    results = findDeletedMessagesInMailbox(mailbox);
                     break;
             }
             return results;
@@ -137,28 +138,28 @@ public class JPAMessageMapper extends JP
     }
 
     @SuppressWarnings("unchecked")
-    private List<MailboxMembership<Long>> findDeletedMessagesInMailbox(Long mailboxId) {
-        return getEntityManager().createNamedQuery("findDeletedMessagesInMailbox").setParameter("idParam", mailboxId).getResultList();
+    private List<MailboxMembership<Long>> findDeletedMessagesInMailbox(Mailbox<Long> mailbox) {
+        return getEntityManager().createNamedQuery("findDeletedMessagesInMailbox").setParameter("idParam", mailbox.getMailboxId()).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<MailboxMembership<Long>> findDeletedMessagesInMailboxAfterUID(Long mailboxId, long uid) {
+    private List<MailboxMembership<Long>> findDeletedMessagesInMailboxAfterUID(Mailbox<Long> mailbox, long uid) {
         return getEntityManager().createNamedQuery("findDeletedMessagesInMailboxAfterUID")
-        .setParameter("idParam", mailboxId)
+        .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("uidParam", uid).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<MailboxMembership<Long>> findDeletedMessagesInMailboxWithUID(Long mailboxId, long uid) {
+    private List<MailboxMembership<Long>> findDeletedMessagesInMailboxWithUID(Mailbox<Long> mailbox, long uid) {
         return getEntityManager().createNamedQuery("findDeletedMessagesInMailboxWithUID")
-        .setParameter("idParam", mailboxId)
+        .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("uidParam", uid).setMaxResults(1).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<MailboxMembership<Long>> findDeletedMessagesInMailboxBetweenUIDs(Long mailboxId, long from, long to) {
+    private List<MailboxMembership<Long>> findDeletedMessagesInMailboxBetweenUIDs(Mailbox<Long> mailbox, long from, long to) {
         return getEntityManager().createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
-        .setParameter("idParam", mailboxId)
+        .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("fromParam", from)
         .setParameter("toParam", to).getResultList();
     }
@@ -166,9 +167,9 @@ public class JPAMessageMapper extends JP
     /**
      * @see org.apache.james.imap.store.mail.MessageMapper#countMessagesInMailbox()
      */
-    public long countMessagesInMailbox(Long mailboxId) throws StorageException {
+    public long countMessagesInMailbox(Mailbox<Long> mailbox) throws StorageException {
         try {
-            return (Long) getEntityManager().createNamedQuery("countMessagesInMailbox").setParameter("idParam", mailboxId).getSingleResult();
+            return (Long) getEntityManager().createNamedQuery("countMessagesInMailbox").setParameter("idParam", mailbox.getMailboxId()).getSingleResult();
         } catch (PersistenceException e) {
             throw new StorageException(HumanReadableText.COUNT_FAILED, e);
         }
@@ -177,9 +178,9 @@ public class JPAMessageMapper extends JP
     /**
      * @see org.apache.james.imap.store.mail.MessageMapper#countUnseenMessagesInMailbox()
      */
-    public long countUnseenMessagesInMailbox(Long mailboxId) throws StorageException {
+    public long countUnseenMessagesInMailbox(Mailbox<Long> mailbox) throws StorageException {
         try {
-            return (Long) getEntityManager().createNamedQuery("countUnseenMessagesInMailbox").setParameter("idParam", mailboxId).getSingleResult();
+            return (Long) getEntityManager().createNamedQuery("countUnseenMessagesInMailbox").setParameter("idParam", mailbox.getMailboxId()).getSingleResult();
         } catch (PersistenceException e) {
             throw new StorageException(HumanReadableText.COUNT_FAILED, e);
         }
@@ -189,9 +190,9 @@ public class JPAMessageMapper extends JP
      * @see org.apache.james.imap.store.mail.MessageMapper#searchMailbox(org.apache.james.imap.mailbox.SearchQuery)
      */
     @SuppressWarnings("unchecked")
-    public List<MailboxMembership<Long>> searchMailbox(Long mailboxId, SearchQuery query) throws StorageException {
+    public List<MailboxMembership<Long>> searchMailbox(Mailbox<Long> mailbox, SearchQuery query) throws StorageException {
         try {
-            final Query jQuery = formulateJQL(mailboxId, query);
+            final Query jQuery = formulateJQL(mailbox.getMailboxId(), query);
             return jQuery.getResultList();
         } catch (PersistenceException e) {
             throw new StorageException(HumanReadableText.SEARCH_FAILED, e);
@@ -246,7 +247,7 @@ public class JPAMessageMapper extends JP
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#delete(java.lang.Object, org.apache.james.imap.store.mail.model.MailboxMembership)
      */
-    public void delete(Long uid, MailboxMembership<Long> message) throws StorageException {
+    public void delete(Mailbox<Long> mailbox, MailboxMembership<Long> message) throws StorageException {
         try {
             getEntityManager().remove(message);
         } catch (PersistenceException e) {
@@ -259,9 +260,9 @@ public class JPAMessageMapper extends JP
      * @see org.apache.james.imap.store.mail.MessageMapper#findUnseenMessagesInMailbox()
      */
     @SuppressWarnings("unchecked")
-    public List<MailboxMembership<Long>> findUnseenMessagesInMailbox(Long mailboxId, int limit)  throws StorageException {
+    public List<MailboxMembership<Long>> findUnseenMessagesInMailbox(Mailbox<Long> mailbox, int limit)  throws StorageException {
         try {
-            Query query = getEntityManager().createNamedQuery("findUnseenMessagesInMailboxOrderByUid").setParameter("idParam", mailboxId);
+            Query query = getEntityManager().createNamedQuery("findUnseenMessagesInMailboxOrderByUid").setParameter("idParam", mailbox.getMailboxId());
             if (limit > 0) {
                 query = query.setMaxResults(limit);
             }
@@ -275,9 +276,9 @@ public class JPAMessageMapper extends JP
      * @see org.apache.james.imap.store.mail.MessageMapper#findRecentMessagesInMailbox()
      */
     @SuppressWarnings("unchecked")
-    public List<MailboxMembership<Long>> findRecentMessagesInMailbox(Long mailboxId, int limit) throws StorageException {
+    public List<MailboxMembership<Long>> findRecentMessagesInMailbox(Mailbox<Long> mailbox, int limit) throws StorageException {
         try {
-            Query query = getEntityManager().createNamedQuery("findRecentMessagesInMailbox").setParameter("idParam", mailboxId);
+            Query query = getEntityManager().createNamedQuery("findRecentMessagesInMailbox").setParameter("idParam", mailbox.getMailboxId());
             if (limit > 0) {
                 query = query.setMaxResults(limit);
             }
@@ -290,7 +291,7 @@ public class JPAMessageMapper extends JP
     /**
      * @see org.apache.james.imap.store.mail.MessageMapper#save(MailboxMembership)
      */
-    public void save(Long mailboxId, MailboxMembership<Long> message) throws StorageException {
+    public void save(Mailbox<Long> mailbox, MailboxMembership<Long> message) throws StorageException {
         try {
             getEntityManager().persist(message);
         } catch (PersistenceException e) {
@@ -302,15 +303,15 @@ public class JPAMessageMapper extends JP
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#copy(java.lang.Object, long, org.apache.james.imap.store.mail.model.MailboxMembership)
      */
-    public MailboxMembership<Long> copy(Long mailboxId, long uid, MailboxMembership<Long> original) throws StorageException {
+    public MailboxMembership<Long> copy(Mailbox<Long> mailbox, long uid, MailboxMembership<Long> original) throws StorageException {
         try {
             MailboxMembership<Long> copy;
             if (original instanceof JPAStreamingMailboxMembership) {
-                copy = new JPAStreamingMailboxMembership(mailboxId, uid, (AbstractJPAMailboxMembership) original);
+                copy = new JPAStreamingMailboxMembership(mailbox.getMailboxId(), uid, (AbstractJPAMailboxMembership) original);
             } else {
-                copy = new JPAMailboxMembership(mailboxId, uid, (AbstractJPAMailboxMembership)original);
+                copy = new JPAMailboxMembership(mailbox.getMailboxId(), uid, (AbstractJPAMailboxMembership)original);
             }
-            save(mailboxId, copy);
+            save(mailbox, copy);
             return copy;
         } catch (MailboxException e) {
             throw new StorageException(e.getKey(),e);

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMessageManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMessageManager.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMessageManager.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/openjpa/OpenJPAMessageManager.java Thu Jul 29 18:43:47 2010
@@ -67,7 +67,7 @@ public class OpenJPAMessageManager exten
             for (Header header: headers) {
                 jpaHeaders.add((JPAHeader) header);
             }
-            return new JPAStreamingMailboxMembership(getMailboxId(), uid, internalDate, size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
+            return new JPAStreamingMailboxMembership(mailbox.getMailboxId(), uid, internalDate, size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
         } else {
             return super.createMessage(internalDate, uid, size, bodyStartOctet, document, flags, headers, propertyBuilder);
         }

Modified: james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMessageManager.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMessageManager.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/InMemoryStoreMessageManager.java Thu Jul 29 18:43:47 2010
@@ -71,7 +71,7 @@ public class InMemoryStoreMessageManager
             e.printStackTrace();
             byteContent = new byte[0];
         }
-        return new SimpleMailboxMembership(internalDate, uid, size, bodyStartOctet, byteContent, flags, headers, propertyBuilder, getMailboxId());
+        return new SimpleMailboxMembership(internalDate, uid, size, bodyStartOctet, byteContent, flags, headers, propertyBuilder, mailbox.getMailboxId());
     }
     
 }

Modified: james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java (original)
+++ james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java Thu Jul 29 18:43:47 2010
@@ -14,6 +14,7 @@ import org.apache.james.imap.mailbox.Sea
 import org.apache.james.imap.mailbox.StorageException;
 import org.apache.james.imap.store.MailboxMembershipComparator;
 import org.apache.james.imap.store.mail.MessageMapper;
+import org.apache.james.imap.store.mail.model.Mailbox;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
 
 public class InMemoryMessageMapper implements MessageMapper<Long> {
@@ -25,11 +26,11 @@ public class InMemoryMessageMapper imple
         this.mailboxByUid = new ConcurrentHashMap<Long, Map<Long, MailboxMembership<Long>>>(INITIAL_SIZE);
     }
     
-    private Map<Long, MailboxMembership<Long>> getMembershipByUidForMailbox(Long mailboxId) {
-        Map<Long, MailboxMembership<Long>> membershipByUid = mailboxByUid.get(mailboxId);
+    private Map<Long, MailboxMembership<Long>> getMembershipByUidForMailbox(Mailbox<Long> mailbox) {
+        Map<Long, MailboxMembership<Long>> membershipByUid = mailboxByUid.get(mailbox.getMailboxId());
         if (membershipByUid == null) {
             membershipByUid = new ConcurrentHashMap<Long, MailboxMembership<Long>>(INITIAL_SIZE);
-            mailboxByUid.put(mailboxId, membershipByUid);
+            mailboxByUid.put(mailbox.getMailboxId(), membershipByUid);
         }
         return membershipByUid;
     }
@@ -38,17 +39,17 @@ public class InMemoryMessageMapper imple
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#countMessagesInMailbox()
      */
-    public long countMessagesInMailbox(Long mailboxId) throws StorageException {
-        return getMembershipByUidForMailbox(mailboxId).size();
+    public long countMessagesInMailbox(Mailbox<Long> mailbox) throws StorageException {
+        return getMembershipByUidForMailbox(mailbox).size();
     }
 
     /*
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#countUnseenMessagesInMailbox()
      */
-    public long countUnseenMessagesInMailbox(Long mailboxId) throws StorageException {
+    public long countUnseenMessagesInMailbox(Mailbox<Long> mailbox) throws StorageException {
         long count = 0;
-        for(MailboxMembership<Long> member:getMembershipByUidForMailbox(mailboxId).values()) {
+        for(MailboxMembership<Long> member:getMembershipByUidForMailbox(mailbox).values()) {
             if (!member.isSeen()) {
                 count++;
             }
@@ -60,8 +61,8 @@ public class InMemoryMessageMapper imple
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#delete(org.apache.james.imap.store.mail.model.MailboxMembership)
      */
-    public void delete(Long mailboxId, MailboxMembership<Long> message) throws StorageException {
-        getMembershipByUidForMailbox(mailboxId).remove(message.getUid());
+    public void delete(Mailbox<Long> mailbox, MailboxMembership<Long> message) throws StorageException {
+        getMembershipByUidForMailbox(mailbox).remove(message.getUid());
     }
 
     /*
@@ -69,15 +70,15 @@ public class InMemoryMessageMapper imple
      * @see org.apache.james.imap.store.mail.MessageMapper#findInMailbox(java.lang.Object, org.apache.james.imap.mailbox.MessageRange)
      */
     @SuppressWarnings("unchecked")
-    public List<MailboxMembership<Long>> findInMailbox(Long mailboxId, MessageRange set) throws StorageException {
+    public List<MailboxMembership<Long>> findInMailbox(Mailbox<Long> mailbox, MessageRange set) throws StorageException {
         final List<MailboxMembership<Long>> results;
         final MessageRange.Type type = set.getType();
         switch (type) {
             case ALL:
-                results = new ArrayList<MailboxMembership<Long>>(getMembershipByUidForMailbox(mailboxId).values());
+                results = new ArrayList<MailboxMembership<Long>>(getMembershipByUidForMailbox(mailbox).values());
                 break;
             case FROM:
-                results = new ArrayList<MailboxMembership<Long>>(getMembershipByUidForMailbox(mailboxId).values());
+                results = new ArrayList<MailboxMembership<Long>>(getMembershipByUidForMailbox(mailbox).values());
                 for (final Iterator<MailboxMembership<Long>> it=results.iterator();it.hasNext();) {
                    if (it.next().getUid()< set.getUidFrom()) {
                        it.remove(); 
@@ -85,7 +86,7 @@ public class InMemoryMessageMapper imple
                 }
                 break;
             case RANGE:
-                results = new ArrayList<MailboxMembership<Long>>(getMembershipByUidForMailbox(mailboxId).values());
+                results = new ArrayList<MailboxMembership<Long>>(getMembershipByUidForMailbox(mailbox).values());
                 for (final Iterator<MailboxMembership<Long>> it=results.iterator();it.hasNext();) {
                    final long uid = it.next().getUid();
                 if (uid<set.getUidFrom() || uid>set.getUidTo()) {
@@ -95,7 +96,7 @@ public class InMemoryMessageMapper imple
                 break;
             case ONE:
                 results  = new ArrayList<MailboxMembership<Long>>(1);
-                final MailboxMembership member = getMembershipByUidForMailbox(mailboxId).get(set.getUidFrom());
+                final MailboxMembership member = getMembershipByUidForMailbox(mailbox).get(set.getUidFrom());
                 if (member != null) {
                     results.add(member);
                 }
@@ -112,8 +113,8 @@ public class InMemoryMessageMapper imple
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#findMarkedForDeletionInMailbox(org.apache.james.imap.mailbox.MessageRange)
      */
-    public List<MailboxMembership<Long>> findMarkedForDeletionInMailbox(Long mailboxId, MessageRange set) throws StorageException {
-        final List<MailboxMembership<Long>> results = findInMailbox(mailboxId, set);
+    public List<MailboxMembership<Long>> findMarkedForDeletionInMailbox(Mailbox<Long> mailbox, MessageRange set) throws StorageException {
+        final List<MailboxMembership<Long>> results = findInMailbox(mailbox, set);
         for(final Iterator<MailboxMembership<Long>> it=results.iterator();it.hasNext();) {
             if (!it.next().isDeleted()) {
                 it.remove();
@@ -126,9 +127,9 @@ public class InMemoryMessageMapper imple
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#findRecentMessagesInMailbox()
      */
-    public List<MailboxMembership<Long>> findRecentMessagesInMailbox(Long mailboxId,int limit) throws StorageException {
+    public List<MailboxMembership<Long>> findRecentMessagesInMailbox(Mailbox<Long> mailbox,int limit) throws StorageException {
         final List<MailboxMembership<Long>> results = new ArrayList<MailboxMembership<Long>>();
-        for(MailboxMembership<Long> member:getMembershipByUidForMailbox(mailboxId).values()) {
+        for(MailboxMembership<Long> member:getMembershipByUidForMailbox(mailbox).values()) {
             if (member.isRecent()) {
                 results.add(member);
             }
@@ -144,9 +145,9 @@ public class InMemoryMessageMapper imple
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#findUnseenMessagesInMailbox()
      */
-    public List<MailboxMembership<Long>> findUnseenMessagesInMailbox(Long mailboxId, int limit) throws StorageException {
+    public List<MailboxMembership<Long>> findUnseenMessagesInMailbox(Mailbox<Long> mailbox, int limit) throws StorageException {
         final List<MailboxMembership<Long>> results = new ArrayList<MailboxMembership<Long>>();
-        for(MailboxMembership<Long> member:getMembershipByUidForMailbox(mailboxId).values()) {
+        for(MailboxMembership<Long> member:getMembershipByUidForMailbox(mailbox).values()) {
             if (!member.isSeen()) {
                 results.add(member);
             }
@@ -162,16 +163,16 @@ public class InMemoryMessageMapper imple
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#save(org.apache.james.imap.store.mail.model.MailboxMembership)
      */
-    public void save(Long mailboxId, MailboxMembership<Long> message) throws StorageException {
-        getMembershipByUidForMailbox(mailboxId).put(message.getUid(), message);
+    public void save(Mailbox<Long> mailbox, MailboxMembership<Long> message) throws StorageException {
+        getMembershipByUidForMailbox(mailbox).put(message.getUid(), message);
     }
 
     /*
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#searchMailbox(org.apache.james.imap.mailbox.SearchQuery)
      */
-    public List<MailboxMembership<Long>> searchMailbox(Long mailboxId, SearchQuery query) throws StorageException {
-        return new ArrayList<MailboxMembership<Long>>(getMembershipByUidForMailbox(mailboxId).values());
+    public List<MailboxMembership<Long>> searchMailbox(Mailbox<Long> mailbox, SearchQuery query) throws StorageException {
+        return new ArrayList<MailboxMembership<Long>>(getMembershipByUidForMailbox(mailbox).values());
     }
 
     /**
@@ -196,9 +197,9 @@ public class InMemoryMessageMapper imple
      * (non-Javadoc)
      * @see org.apache.james.imap.store.mail.MessageMapper#copy(java.lang.Object, long, org.apache.james.imap.store.mail.model.MailboxMembership)
      */
-    public MailboxMembership<Long> copy(Long mailboxId, long uid, MailboxMembership<Long> original) throws StorageException {
-        SimpleMailboxMembership membership = new SimpleMailboxMembership(mailboxId, uid, (SimpleMailboxMembership) original);
-        save(mailboxId, membership);
+    public MailboxMembership<Long> copy(Mailbox<Long> mailbox, long uid, MailboxMembership<Long> original) throws StorageException {
+        SimpleMailboxMembership membership = new SimpleMailboxMembership(mailbox.getMailboxId(), uid, (SimpleMailboxMembership) original);
+        save(mailbox, membership);
         return membership;
     }
     

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java Thu Jul 29 18:43:47 2010
@@ -80,7 +80,7 @@ public abstract class StoreMessageManage
     
     private MessageMapper<Id> messageMapper;
 
-    private final Mailbox<Id> mailbox;
+    protected final Mailbox<Id> mailbox;
     
     private MailboxEventDispatcher dispatcher;
 
@@ -119,21 +119,12 @@ public abstract class StoreMessageManage
         return mailbox;
     }
 
-    /**
-     * Return the Id of the wrapped {@link Mailbox}
-     * 
-     * @return id
-     */
-    protected Id getMailboxId() {
-        return mailbox.getMailboxId();
-    }
-
     /*
      * (non-Javadoc)
      * @see org.apache.james.imap.mailbox.Mailbox#getMessageCount(org.apache.james.imap.mailbox.MailboxSession)
      */
     public int getMessageCount(MailboxSession mailboxSession) throws MailboxException {
-        return (int) messageMapper.countMessagesInMailbox(getMailboxId());
+        return (int) messageMapper.countMessagesInMailbox(mailbox);
     }
 
     /*
@@ -269,7 +260,7 @@ public abstract class StoreMessageManage
             messageMapper.execute(new TransactionalMapper.Transaction() {
                 
                 public void run() throws MailboxException {
-                    messageMapper.save(getMailboxId(), message);
+                    messageMapper.save(mailbox, message);
                 }
             });
            
@@ -371,7 +362,7 @@ public abstract class StoreMessageManage
     public Iterator<MessageResult> getMessages(final MessageRange set, FetchGroup fetchGroup,
             MailboxSession mailboxSession) throws MailboxException {
         UidRange range = uidRangeForMessageSet(set);
-        final List<MailboxMembership<Id>> rows = new ArrayList<MailboxMembership<Id>>(messageMapper.findInMailbox(getMailboxId(), set));
+        final List<MailboxMembership<Id>> rows = new ArrayList<MailboxMembership<Id>>(messageMapper.findInMailbox(mailbox, set));
         return getMessages(fetchGroup, range, rows);
     }
 
@@ -409,7 +400,7 @@ public abstract class StoreMessageManage
         messageMapper.execute(new TransactionalMapper.Transaction() {
 
             public void run() throws MailboxException {
-                final List<MailboxMembership<Id>> members = messageMapper.findRecentMessagesInMailbox(getMailboxId(), -1);
+                final List<MailboxMembership<Id>> members = messageMapper.findRecentMessagesInMailbox(mailbox, -1);
 
                 for (MailboxMembership<Id> member:members) {
                     results.add(member.getUid());
@@ -417,7 +408,7 @@ public abstract class StoreMessageManage
                         member.unsetRecent();
                         
                         // only call save if we need to
-                        messageMapper.save(getMailboxId(), member);
+                        messageMapper.save(mailbox, member);
                     }
                 }
             }
@@ -429,7 +420,7 @@ public abstract class StoreMessageManage
 
     private Long getFirstUnseen(MailboxSession mailboxSession) throws MailboxException {
         try {
-            final List<MailboxMembership<Id>> members = messageMapper.findUnseenMessagesInMailbox(getMailboxId(),1);
+            final List<MailboxMembership<Id>> members = messageMapper.findUnseenMessagesInMailbox(mailbox,1);
             final Iterator<MailboxMembership<Id>> it = members.iterator();
             final Long result;
             if (it.hasNext()) {
@@ -445,7 +436,7 @@ public abstract class StoreMessageManage
     }
 
     private int getUnseenCount(MailboxSession mailboxSession) throws MailboxException {
-        final int count = (int) messageMapper.countUnseenMessagesInMailbox(getMailboxId());
+        final int count = (int) messageMapper.countUnseenMessagesInMailbox(mailbox);
         return count;
     }
 
@@ -464,10 +455,10 @@ public abstract class StoreMessageManage
         messageMapper.execute(new TransactionalMapper.Transaction() {
 
             public void run() throws MailboxException {
-                final List<MailboxMembership<Id>> members = messageMapper.findMarkedForDeletionInMailbox(getMailboxId(), set);
+                final List<MailboxMembership<Id>> members = messageMapper.findMarkedForDeletionInMailbox(mailbox, set);
                 for (MailboxMembership<Id> message:members) {
                     uids.add(message.getUid());
-                    messageMapper.delete(getMailboxId(), message);
+                    messageMapper.delete(mailbox, message);
                 }  
             }
             
@@ -496,7 +487,7 @@ public abstract class StoreMessageManage
         messageMapper.execute(new TransactionalMapper.Transaction(){
 
             public void run() throws MailboxException {
-                final List<MailboxMembership<Id>> members = messageMapper.findInMailbox(getMailboxId(), set);
+                final List<MailboxMembership<Id>> members = messageMapper.findInMailbox(mailbox, set);
                 for (final MailboxMembership<Id> member:members) {
                     originalFlagsByUid.put(member.getUid(), member.createFlags());
                     if (replace) {
@@ -511,7 +502,7 @@ public abstract class StoreMessageManage
                         member.setFlags(current);
                     }
                     newFlagsByUid.put(member.getUid(), member.createFlags());
-                    messageMapper.save(getMailboxId(), member);
+                    messageMapper.save(mailbox, member);
                 }
             }
             
@@ -550,7 +541,7 @@ public abstract class StoreMessageManage
      * @see org.apache.james.imap.mailbox.Mailbox#search(org.apache.james.imap.mailbox.SearchQuery, org.apache.james.imap.mailbox.MailboxSession)
      */
     public Iterator<Long> search(SearchQuery query, MailboxSession mailboxSession) throws MailboxException {
-        final List<MailboxMembership<Id>> members = messageMapper.searchMailbox(getMailboxId(), query);
+        final List<MailboxMembership<Id>> members = messageMapper.searchMailbox(mailbox, query);
         final Set<Long> uids = new TreeSet<Long>();
         for (MailboxMembership<Id> member:members) {
             try {
@@ -588,7 +579,7 @@ public abstract class StoreMessageManage
                 messageMapper.execute(new TransactionalMapper.Transaction() {
 
                     public void run() throws MailboxException {
-                        final MailboxMembership<Id> newRow = messageMapper.copy(getMailboxId(), uid, originalMessage);
+                        final MailboxMembership<Id> newRow = messageMapper.copy(mailbox, uid, originalMessage);
                         copiedRows.add(newRow);
                     }
                     
@@ -613,7 +604,7 @@ public abstract class StoreMessageManage
      */
     public void copyTo(MessageRange set, StoreMessageManager<Id> toMailbox, MailboxSession session) throws MailboxException {
         try {
-            final List<MailboxMembership<Id>> originalRows = messageMapper.findInMailbox(getMailboxId(), set);
+            final List<MailboxMembership<Id>> originalRows = messageMapper.findInMailbox(mailbox, set);
             toMailbox.copy(originalRows, session);
 
         } catch (MessagingException e) {

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java?rev=980539&r1=980538&r2=980539&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MessageMapper.java Thu Jul 29 18:43:47 2010
@@ -20,16 +20,16 @@ package org.apache.james.imap.store.mail
 
 import java.util.List;
 
-import org.apache.james.imap.mailbox.Mailbox;
 import org.apache.james.imap.mailbox.MessageRange;
 import org.apache.james.imap.mailbox.SearchQuery;
 import org.apache.james.imap.mailbox.StorageException;
 import org.apache.james.imap.store.mail.model.Document;
+import org.apache.james.imap.store.mail.model.Mailbox;
 import org.apache.james.imap.store.mail.model.MailboxMembership;
 import org.apache.james.imap.store.transaction.TransactionalMapper;
 
 /**
- * Maps {@link Document} in a {@link Mailbox}. A {@link MessageMapper} has a lifecycle from the start of a request 
+ * Maps {@link Document} in a {@link org.apache.james.imap.mailbox.Mailbox}. A {@link MessageMapper} has a lifecycle from the start of a request 
  * to the end of the request.
  */
 public interface MessageMapper<Id> extends TransactionalMapper {
@@ -38,58 +38,64 @@ public interface MessageMapper<Id> exten
      * Return a List of {@link MailboxMembership} which represent the given {@link MessageRange}
      * The list must be ordered by the {@link Document} uid
      * 
+     * @param mailbox The mailbox to search
      * @param set
      * @return list
      * @throws StorageException
      */
-    public abstract List<MailboxMembership<Id>> findInMailbox(Id mailboxId, MessageRange set)
+    public abstract List<MailboxMembership<Id>> findInMailbox(Mailbox<Id> mailbox, MessageRange set)
             throws StorageException;
 
     /**
      * Return a List of {@link MailboxMembership} for the given {@link MessageRange} which are marked for deletion
      * The list must be ordered by the {@link Document} uid
+     * @param mailbox
      * @param set 
      * @return list
      * @throws StorageException
      */
     public abstract List<MailboxMembership<Id>> findMarkedForDeletionInMailbox(
-            Id mailboxId, final MessageRange set)
+            Mailbox<Id> mailbox, final MessageRange set)
             throws StorageException;
 
     /**
      * Return the count of messages in the mailbox
      * 
+     * @param mailbox
      * @return count
      * @throws StorageException
      */
-    public abstract long countMessagesInMailbox(Id mailboxId)
+    public abstract long countMessagesInMailbox(Mailbox<Id> mailbox)
             throws StorageException;
 
     /**
      * Return the count of unseen messages in the mailbox
      * 
+     * @param mailbox
      * @return unseenCount
      * @throws StorageException
      */
-    public abstract long countUnseenMessagesInMailbox(Id mailboxId)
+    public abstract long countUnseenMessagesInMailbox(Mailbox<Id> mailbox)
             throws StorageException;
 
     /**
      * Return a List of {@link MailboxMembership} which matched the {@link SearchQuery}
      * The list must be ordered by the {@link Document} uid
+     * @param mailbox
      * @param query
      * @return
      * @throws StorageException
      */
-    public abstract List<MailboxMembership<Id>> searchMailbox(Id mailboxId, SearchQuery query) throws StorageException;
+    public abstract List<MailboxMembership<Id>> searchMailbox(Mailbox<Id> mailbox, SearchQuery query) throws StorageException;
 
     /**
      * Delete the given {@link MailboxMembership}
      * 
+     * @param mailbox
      * @param message
      * @throws StorageException
      */
-    public abstract void delete(Id mailboxId, MailboxMembership<Id> message) throws StorageException;
+    public abstract void delete(Mailbox<Id> mailbox, MailboxMembership<Id> message) throws StorageException;
 
     /**
      * Return a List of {@link MailboxMembership} which are unseen. 
@@ -97,12 +103,12 @@ public interface MessageMapper<Id> exten
      * If a limit was given the list will maximal be the size of the limit. Id a 
      * limit smaller then 1 is given the List must contain all messages
      * 
-     * @param mailboxId
+     * @param mailbox
      * @param limit
      * @return list
      * @throws StorageException
      */
-    public abstract List<MailboxMembership<Id>> findUnseenMessagesInMailbox(Id mailboxId, int limit) throws StorageException;
+    public abstract List<MailboxMembership<Id>> findUnseenMessagesInMailbox(Mailbox<Id> mailbox, int limit) throws StorageException;
 
     /**
      * Return a List of {@link MailboxMembership} which are recent.
@@ -110,32 +116,33 @@ public interface MessageMapper<Id> exten
      * If a limit was given the list will maximal be the size of the limit. Id a 
      * limit smaller then 1 is given the List must contain all messages
      * 
-     * @param mailboxId
+     * @param mailbox
      * @param limit
      * @return recentList
      * @throws StorageException
      */
-    public abstract List<MailboxMembership<Id>> findRecentMessagesInMailbox(Id mailboxId, int limit) throws StorageException;
+    public abstract List<MailboxMembership<Id>> findRecentMessagesInMailbox(Mailbox<Id> mailbox, int limit) throws StorageException;
 
 
     /**
      * Save the given {@link MailboxMembership} to the underlying storage
      * 
+     * @param mailbox
      * @param message
      * @throws StorageException
      */
-    public abstract void save(Id mailboxId, MailboxMembership<Id> message) throws StorageException;
+    public abstract void save(Mailbox<Id> mailbox, MailboxMembership<Id> message) throws StorageException;
     
     
     /**
      * Copy the given {@link MailboxMembership} to a new mailbox
      * 
-     * @param mailboxId the id of the mailbox to copy to
-     * @param uid the uid to use for the new mailboxmembership
+     * @param mailbox the Mailbox to copy to
+     * @param uid the uid to use for the new MailboxMembership
      * @param original the original to copy
-     * @return membership. The copied instance
+     * @return The copied instance
      * @throws StorageException
      */
-    public abstract MailboxMembership<Id> copy(Id mailboxId, long uid, MailboxMembership<Id> original) throws StorageException;
+    public abstract MailboxMembership<Id> copy(Mailbox<Id> mailbox, long uid, MailboxMembership<Id> original) throws StorageException;
 
 }
\ No newline at end of file



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