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]

Reply via email to