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