Index: api/src/main/java/org/apache/james/mailbox/MailboxManager.java =================================================================== --- api/src/main/java/org/apache/james/mailbox/MailboxManager.java (revision 1065029) +++ api/src/main/java/org/apache/james/mailbox/MailboxManager.java (working copy) @@ -126,8 +126,9 @@ * name of the destination mailbox * @param session * MailboxSession, 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 copyMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException; /** * Searches for mailboxes matching the given query. Index: store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java =================================================================== --- store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java (revision 1065029) +++ store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java (working copy) @@ -21,6 +21,7 @@ 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 @@ * @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 copyMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException { StoreMessageManager toMailbox = (StoreMessageManager) getMailbox(to, session); StoreMessageManager fromMailbox = (StoreMessageManager) getMailbox(from, session); - fromMailbox.copyTo(set, toMailbox, session); - + return fromMailbox.copyTo(set, toMailbox, session); } /* Index: store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java =================================================================== --- store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java (revision 1065029) +++ store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java (working copy) @@ -433,17 +433,16 @@ * @param session * @throws MailboxException */ - public void copyTo(MessageRange set, StoreMessageManager toMailbox, MailboxSession session) throws MailboxException { + public List copyTo(MessageRange set, StoreMessageManager toMailbox, MailboxSession session) throws MailboxException { try { + List result=new ArrayList(); Iterator 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(toMailbox.getMailboxEntity())); } + return result; } catch (MailboxException e) { throw new MailboxException("Unable to parse message", e); } Index: torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java =================================================================== --- torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java (revision 1065029) +++ torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailbox.java (working copy) @@ -713,7 +713,7 @@ return true; } - public void copyTo(MessageRange set, TorqueMailbox toMailbox, + public List copyTo(MessageRange set, TorqueMailbox toMailbox, MailboxSession session) throws MailboxException { final List rows; lockForReading(); @@ -734,7 +734,13 @@ unlockAfterReading(); } // Release read lock before copying - toMailbox.copy(rows, session); + Iterator iterator=toMailbox.copy(rows, session); + List result=new ArrayList(); + while (iterator.hasNext()) + { + result.add(MessageRange.one(iterator.next())); + } + return result; } private void unlockAfterReading() { @@ -745,9 +751,10 @@ } } - private void copy(List rows, MailboxSession session) + private Iterator copy(List rows, MailboxSession session) throws MailboxException { try { + List copiedEmailsUids = new ArrayList(); for (Iterator iter = rows.iterator(); iter.hasNext();) { MessageRow fromRow = (MessageRow) iter.next(); final MailboxRow mailbox = reserveNextUid(); @@ -762,6 +769,7 @@ // 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 @@ getUidChangeTracker().found(messageResult.getUid(), messageResult.getFlags(), session.getSessionId()); } } + return copiedEmailsUids.iterator(); } catch (TorqueException e) { throw new MailboxException("save failed"); } catch (InterruptedException e) { Index: torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java =================================================================== --- torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java (revision 1065029) +++ torque/src/main/java/org/apache/james/mailbox/torque/TorqueMailboxManager.java (working copy) @@ -345,11 +345,12 @@ } } - public void copyMessages(MessageRange set, MailboxPath from, MailboxPath to, + public List 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 result=new ArrayList(); + return fromMailbox.copyTo(set, toMailbox, session); } @SuppressWarnings("unchecked")