Author: rdonkin
Date: Wed Feb 6 11:58:28 2008
New Revision: 619127
URL: http://svn.apache.org/viewvc?rev=619127&view=rev
Log:
Need to expunge after response so that MSN isn't lost.
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidToMsnConverter.java
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/util/MailboxEventAnalyser.java
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidToMsnConverter.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidToMsnConverter.java?rev=619127&r1=619126&r2=619127&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidToMsnConverter.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/tracking/UidToMsnConverter.java
Wed Feb 6 11:58:28 2008
@@ -24,26 +24,13 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
import java.util.SortedMap;
-import java.util.SortedSet;
import java.util.TreeMap;
import java.util.TreeSet;
-import javax.mail.Flags;
-
import org.apache.james.mailboxmanager.MailboxListener;
-import org.apache.james.mailboxmanager.MailboxManagerException;
-import org.apache.james.mailboxmanager.impl.MessageResultImpl;
public class UidToMsnConverter implements MailboxListener {
-
- private final long sessionId;
-
- protected Map flagEventMap = new TreeMap();
-
- protected SortedSet expungedEventList = new TreeSet();
-
protected SortedMap msnToUid;
protected SortedMap uidToMsn;
@@ -52,10 +39,9 @@
protected int highestMsn = 0;
- public UidToMsnConverter(final long sessionId, final Collection uids) {
+ public UidToMsnConverter(final Collection uids) {
msnToUid = new TreeMap();
uidToMsn = new TreeMap();
- this.sessionId = sessionId;
if (uids != null) {
int msn = 1;
List uidsInOrder = new ArrayList(uids);
@@ -176,30 +162,11 @@
*/
public void event(Event event) {
if (event instanceof MessageEvent) {
- final long sessionId = event.getSessionId();
final MessageEvent messageEvent = (MessageEvent) event;
final long uid = messageEvent.getSubjectUid();
if (event instanceof Added) {
add(uid);
- } else if (event instanceof Expunged) {
- expunged(uid);
}
}
- }
-
- public void expunged(final long uid) {
- final int msn = getMsn(uid);
- if (msn >= 0) {
- expungedEventList.add(new Integer(msn));
- }
- }
-
- public synchronized Iterator getExpungedEvents(boolean reset)
- throws MailboxManagerException {
- final Collection msnExpungedEvents = expungedEventList;
- if (reset) {
- expungedEventList = new TreeSet();
- }
- return msnExpungedEvents.iterator();
}
}
Modified:
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/util/MailboxEventAnalyser.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/util/MailboxEventAnalyser.java?rev=619127&r1=619126&r2=619127&view=diff
==============================================================================
---
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/util/MailboxEventAnalyser.java
(original)
+++
james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/util/MailboxEventAnalyser.java
Wed Feb 6 11:58:28 2008
@@ -34,11 +34,13 @@
private final long sessionId;
private final Set flagUpdateUids;
private final Flags.Flag uninterestingFlag;
+ private final Set expungedUids;
public MailboxEventAnalyser(final long sessionId) {
super();
this.sessionId = sessionId;
flagUpdateUids = new HashSet();
+ expungedUids = new HashSet();
uninterestingFlag = Flags.Flag.RECENT;
}
@@ -56,6 +58,9 @@
final Long uidObject = new Long(uid);
flagUpdateUids.add(uidObject);
}
+ } else if (messageEvent instanceof Expunged) {
+ final Long uidObject = new Long(uid);
+ expungedUids.add(uidObject);
}
}
}
@@ -79,6 +84,7 @@
public void reset() {
sizeChanged = false;
flagUpdateUids.clear();
+ expungedUids.clear();
}
/**
@@ -112,6 +118,9 @@
return flagUpdateUids.iterator();
}
+ public Iterator expungedUids() {
+ return expungedUids.iterator();
+ }
public void mailboxDeleted() {
// TODO implementation
Modified:
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java?rev=619127&r1=619126&r2=619127&view=diff
==============================================================================
---
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
(original)
+++
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java
Wed Feb 6 11:58:28 2008
@@ -61,7 +61,7 @@
// Ignore events from our session
events.setSilentFlagChanges(true);
mailbox.addListener(events);
- converter = new UidToMsnConverter(sessionId, uids);
+ converter = new UidToMsnConverter(uids);
mailbox.addListener(converter);
}
@@ -113,17 +113,19 @@
}
private void addExpungedResponses(List responses, final ImapMailbox
mailbox) {
- try {
- final Iterator expunged = converter.getExpungedEvents(true);
- while (expunged.hasNext()) {
- final int msn = ((Integer) expunged.next()).intValue();
- // TODO: use factory
- ExpungeResponse response = new ExpungeResponse(msn);
- responses.add(response);
- }
- } catch (MailboxManagerException e) {
- final String message = "Failed to retrieve expunged count data";
- handleResponseException(responses, e, message);
+ for (Iterator it = events.expungedUids(); it.hasNext();) {
+ final Long uid = (Long) it.next();
+ final long uidValue = uid.longValue();
+ final int msn = msn(uidValue);
+ // TODO: use factory
+ ExpungeResponse response = new ExpungeResponse(msn);
+ responses.add(response);
+ }
+
+ for (Iterator it = events.expungedUids(); it.hasNext();) {
+ final Long uid = (Long) it.next();
+ final long uidValue = uid.longValue();
+ converter.expunge(uidValue);
}
}
Modified:
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java?rev=619127&r1=619126&r2=619127&view=diff
==============================================================================
---
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java
(original)
+++
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/ImapSessionImpl.java
Wed Feb 6 11:58:28 2008
@@ -104,7 +104,7 @@
// Expunged messages
if (!omitExpunged) {
- final Iterator expunged = selected.getExpungedEvents(true);
+ final Iterator expunged = selected.expungedMsn();
while (expunged.hasNext()) {
final int msn = ((Integer) expunged.next()).intValue();
response.expungeResponse(msn);
Modified:
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java?rev=619127&r1=619126&r2=619127&view=diff
==============================================================================
---
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java
(original)
+++
james/server/trunk/imapserver-function/src/main/java/org/apache/james/imapserver/SelectedMailboxSession.java
Wed Feb 6 11:58:28 2008
@@ -49,7 +49,7 @@
this.mailbox = mailbox;
this.mailboxSession = mailboxSession;
final long sessionId = mailboxSession.getSessionId();
- converter = new UidToMsnConverter(sessionId, uids);
+ converter = new UidToMsnConverter(uids);
events = new MailboxEventAnalyser(sessionId);
mailbox.addListener(events);
mailbox.addListener(converter);
@@ -91,8 +91,22 @@
events.setSilentFlagChanges(silent);
}
- public Iterator getExpungedEvents(boolean reset) throws
MailboxManagerException {
- return converter.getExpungedEvents(reset);
+ public Iterator expungedMsn() throws MailboxManagerException {
+ final Collection results = new ArrayList();
+ for (Iterator it = events.expungedUids(); it.hasNext();) {
+ final Long uid = (Long) it.next();
+ final long uidValue = uid.longValue();
+ final int msn = msn(uidValue);
+ final Integer msnObject = new Integer(msn);
+ results.add(msnObject);
+ }
+
+ for (Iterator it = events.expungedUids(); it.hasNext();) {
+ final Long uid = (Long) it.next();
+ final long uidValue = uid.longValue();
+ converter.expunge(uidValue);
+ }
+ return results.iterator();
}
public int msn(long uid) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]