Author: norman
Date: Sun Jan 30 12:37:13 2011
New Revision: 1065256

URL: http://svn.apache.org/viewvc?rev=1065256&view=rev
Log:
Add better support for UIDPLUS. See IMAP-252. Thanks to Wojtek Strzalka for the 
patch

Modified:
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
    
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java
    
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java?rev=1065256&r1=1065255&r2=1065256&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
 Sun Jan 30 12:37:13 2011
@@ -126,8 +126,9 @@ public interface MailboxManager extends 
      *            name of the destination mailbox
      * @param session
      *            <code>MailboxSession</code>, not null
+     * @return a list of MessageRange - uids assigned to copied messages
      */
-    void copyMessages(MessageRange set, MailboxPath from, MailboxPath to, 
MailboxSession session) throws MailboxException;
+    List<MessageRange> copyMessages(MessageRange set, MailboxPath from, 
MailboxPath to, MailboxSession session) throws MailboxException;
 
     /**
      * Searches for mailboxes matching the given query.

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java?rev=1065256&r1=1065255&r2=1065256&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 Sun Jan 30 12:37:13 2011
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.store;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Random;
@@ -367,11 +368,10 @@ public abstract class StoreMailboxManage
      * @see 
org.apache.james.mailbox.MailboxManager#copyMessages(org.apache.james.mailbox.MessageRange,
 org.apache.james.imap.api.MailboxPath, org.apache.james.imap.api.MailboxPath, 
org.apache.james.mailbox.MailboxSession)
      */
     @SuppressWarnings("unchecked")
-       public void copyMessages(MessageRange set, MailboxPath from, 
MailboxPath to, MailboxSession session) throws MailboxException {
+       public List<MessageRange> copyMessages(MessageRange set, MailboxPath 
from, MailboxPath to, MailboxSession session) throws MailboxException {
         StoreMessageManager<Id> toMailbox = (StoreMessageManager<Id>) 
getMailbox(to, session);
         StoreMessageManager<Id> fromMailbox = (StoreMessageManager<Id>) 
getMailbox(from, session);
-        fromMailbox.copyTo(set, toMailbox, session);
-
+        return fromMailbox.copyTo(set, toMailbox, session);
     }
 
     /*

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1065256&r1=1065255&r2=1065256&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 Sun Jan 30 12:37:13 2011
@@ -433,17 +433,16 @@ public abstract class StoreMessageManage
      * @param session
      * @throws MailboxException
      */
-    public void copyTo(MessageRange set, StoreMessageManager<Id> toMailbox, 
MailboxSession session) throws MailboxException {
+    public List<MessageRange> copyTo(MessageRange set, StoreMessageManager<Id> 
toMailbox, MailboxSession session) throws MailboxException {
         try {
+            List<MessageRange> result=new ArrayList<MessageRange>();
             Iterator<Long> copiedUids = copy(set, toMailbox, session);
-            long highest = 0;
             while(copiedUids.hasNext()) {
                 long uid = copiedUids.next();
-                if (highest < uid) {
-                    highest = uid;
-                }
+                result.add(MessageRange.one(uid));
                 dispatcher.added(uid, session.getSessionId(), new 
StoreMailboxPath<Id>(toMailbox.getMailboxEntity()));
             }
+            return result;
         } catch (MailboxException e) {
             throw new MailboxException("Unable to parse message", e);
         }

Modified: 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java?rev=1065256&r1=1065255&r2=1065256&view=diff
==============================================================================
--- 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java
 (original)
+++ 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java
 Sun Jan 30 12:37:13 2011
@@ -713,7 +713,7 @@ public class TorqueMailbox implements Me
         return true;
     }
 
-    public void copyTo(MessageRange set, TorqueMailbox toMailbox,
+    public List<MessageRange> copyTo(MessageRange set, TorqueMailbox toMailbox,
             MailboxSession session) throws MailboxException {
         final List rows;
         lockForReading();
@@ -734,7 +734,13 @@ public class TorqueMailbox implements Me
             unlockAfterReading();
         }
         // Release read lock before copying
-        toMailbox.copy(rows, session);
+        Iterator<Long> iterator=toMailbox.copy(rows, session);
+        List<MessageRange> result=new ArrayList<MessageRange>();
+         while (iterator.hasNext())
+        {
+            result.add(MessageRange.one(iterator.next()));
+        }
+        return result;
     }
 
     private void unlockAfterReading() {
@@ -745,9 +751,10 @@ public class TorqueMailbox implements Me
         }
     }
 
-    private void copy(List rows, MailboxSession session)
+    private Iterator<Long> copy(List rows, MailboxSession session)
     throws MailboxException {
         try {
+            List<Long> copiedEmailsUids = new ArrayList<Long>();
             for (Iterator iter = rows.iterator(); iter.hasNext();) {
                 MessageRow fromRow = (MessageRow) iter.next();
                 final MailboxRow mailbox = reserveNextUid();
@@ -762,6 +769,7 @@ public class TorqueMailbox implements Me
                     // inserted long before 4, when
                     // mail 4 is big and comes over a slow connection.
                     long uid = mailbox.getLastUid();
+                    copiedEmailsUids.add(uid);
                     this.mailboxRow = mailbox;
 
                     MessageRow newRow = new MessageRow();
@@ -792,6 +800,7 @@ public class TorqueMailbox implements Me
                     getUidChangeTracker().found(messageResult.getUid(), 
messageResult.getFlags(), session.getSessionId());
                 }
             }
+            return copiedEmailsUids.iterator();
         } catch (TorqueException e) {
             throw new MailboxException("save failed");
         } catch (InterruptedException e) {

Modified: 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java?rev=1065256&r1=1065255&r2=1065256&view=diff
==============================================================================
--- 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java
 (original)
+++ 
james/mailbox/trunk/torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java
 Sun Jan 30 12:37:13 2011
@@ -345,11 +345,12 @@ public class TorqueMailboxManager implem
         }
     }
 
-    public void copyMessages(MessageRange set, MailboxPath from, MailboxPath 
to,
+    public List<MessageRange> copyMessages(MessageRange set, MailboxPath from, 
MailboxPath to,
             MailboxSession session) throws MailboxException {
         TorqueMailbox toMailbox = doGetMailbox(getName(to), session);
         TorqueMailbox fromMailbox = doGetMailbox(getName(from), session);
-        fromMailbox.copyTo(set, toMailbox, session);
+        List<MessageRange> result=new ArrayList<MessageRange>();
+        return fromMailbox.copyTo(set, toMailbox, session);       
     }
 
     @SuppressWarnings("unchecked")



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to