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]