You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rd...@apache.org on 2009/01/03 13:54:24 UTC

svn commit: r730981 - /james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/AbstractMailboxAwareProcessor.java

Author: rdonkin
Date: Sat Jan  3 04:54:24 2009
New Revision: 730981

URL: http://svn.apache.org/viewvc?rev=730981&view=rev
Log:
Write responses when they are available.

Modified:
    james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/AbstractMailboxAwareProcessor.java

Modified: james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/AbstractMailboxAwareProcessor.java
URL: http://svn.apache.org/viewvc/james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/AbstractMailboxAwareProcessor.java?rev=730981&r1=730980&r2=730981&view=diff
==============================================================================
--- james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/AbstractMailboxAwareProcessor.java (original)
+++ james/protocols/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/AbstractMailboxAwareProcessor.java Sat Jan  3 04:54:24 2009
@@ -20,11 +20,8 @@
 
 import static org.apache.james.api.imap.ImapConstants.NAMESPACE_PREFIX;
 
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Iterator;
-import java.util.List;
 
 import javax.mail.Flags;
 import javax.mail.MessagingException;
@@ -68,7 +65,6 @@
             final StatusResponseFactory factory) {
         super(next);
         this.mailboxManagerProvider = mailboxManagerProvider;
-        
         this.factory = factory;
     }
 
@@ -119,80 +115,64 @@
     }
 
     protected void unsolicitedResponses(final ImapSession session,
-            final ImapProcessor.Responder responder, boolean omitExpunged,
-            boolean useUids) {
-        final List responses = unsolicitedResponses(session, omitExpunged, useUids);
-        respond(responder, responses);
-    }
-
-    protected void unsolicitedResponses(final ImapSession session,
             final ImapProcessor.Responder responder, boolean useUids) {
-        final List responses = unsolicitedResponses(session, useUids);
-        respond(responder, responses);
-    }
-
-    protected List unsolicitedResponses(final ImapSession session, boolean useUid) {
-        return unsolicitedResponses(session, false, useUid);
+        unsolicitedResponses(session, responder, false, useUids);
     }
 
     /**
      * Sends any unsolicited responses to the client, such as EXISTS and FLAGS
      * responses when the selected mailbox is modified by another user.
-     * 
-     * @return <code>List</code> of {@link ImapResponseMessage}'s
      */
-    protected List unsolicitedResponses(final ImapSession session, boolean omitExpunged, boolean useUid) {
-        final List results;
+    protected void unsolicitedResponses(final ImapSession session, final ImapProcessor.Responder responder, 
+            boolean omitExpunged, boolean useUid) {
         final SelectedImapMailbox selected = session.getSelected();
         if (selected == null) {
-            results = Collections.EMPTY_LIST;
+            getLog().debug("No mailbox selected");
         } else {
-            results = unsolicitedResponses(session, selected, omitExpunged, useUid);
+            unsolicitedResponses(session, responder, selected, omitExpunged, useUid);
         }
-        return results;
     }
 
     /**
      * @see org.apache.james.api.imap.process.SelectedImapMailbox#unsolicitedResponses(boolean,
      *      boolean)
      */
-    public List unsolicitedResponses(final ImapSession session, final SelectedImapMailbox selected, boolean omitExpunged, boolean useUid) {
-        final List results = new ArrayList();
+    public void unsolicitedResponses(final ImapSession session, final ImapProcessor.Responder responder, 
+            final SelectedImapMailbox selected, boolean omitExpunged, boolean useUid) {
         final boolean sizeChanged = selected.isSizeChanged();
         // New message response
             if (sizeChanged) {
-                addExistsResponses(session, selected, results);
+                addExistsResponses(session, selected, responder);
             }
             // Expunged messages
             if (!omitExpunged) {
-                addExpungedResponses(selected, results);
+                addExpungedResponses(selected, responder);
             }
             if (sizeChanged || (selected.isRecentUidRemoved() && !omitExpunged)) {
-                addRecentResponses(selected, results);
+                addRecentResponses(selected, responder);
                 selected.resetRecentUidRemoved();
             }
     
             // Message updates
-            addFlagsResponses(session, selected, results, useUid);
+            addFlagsResponses(session, selected, responder, useUid);
     
             selected.resetEvents();
-
-        return results;
     }
 
-    private void addExpungedResponses(final SelectedImapMailbox selected, List responses) {
+    private void addExpungedResponses(final SelectedImapMailbox selected, final ImapProcessor.Responder responder) {
         final Collection<Long> expungedUids = selected.expungedUids();
         for (final Long uid: expungedUids) {
             final long uidValue = uid.longValue();
             final int msn = selected.msn(uidValue);
             // TODO: use factory
             ExpungeResponse response = new ExpungeResponse(msn);
-            responses.add(response);
+            responder.respond(response);
         }
         selected.expunged(expungedUids);
     }
 
-    private void addFlagsResponses(final ImapSession session, final SelectedImapMailbox selected, final List responses, boolean useUid) {
+    private void addFlagsResponses(final ImapSession session, final SelectedImapMailbox selected, 
+            final ImapProcessor.Responder responder, boolean useUid) {
         try {
             final Collection<Long> flagUpdateUids = selected.flagUpdateUids();
             if (!flagUpdateUids.isEmpty()) {
@@ -200,17 +180,17 @@
                 final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
                 for (final Long uid: flagUpdateUids) {
                     MessageRange messageSet = MessageRangeImpl.oneUid(uid.longValue());
-                    addFlagsResponses(session, selected, responses, useUid, messageSet, mailbox, mailboxSession);
+                    addFlagsResponses(session, selected, responder, useUid, messageSet, mailbox, mailboxSession);
                 }
             }
         } catch (MessagingException e) {
             final String message = "Failed to retrieve flags data";
-            handleResponseException(responses, e, message);
+            handleResponseException(responder, e, message);
         }
     }
 
     private void addFlagsResponses(final ImapSession session, final SelectedImapMailbox selected, 
-            final List responses, boolean useUid, MessageRange messageSet, Mailbox mailbox, MailboxSession mailboxSession)
+            final ImapProcessor.Responder responder, boolean useUid, MessageRange messageSet, Mailbox mailbox, MailboxSession mailboxSession)
     throws MailboxException {
         final Iterator it = mailbox.getMessages(messageSet, FetchGroupImpl.FLAGS, mailboxSession);
         while (it.hasNext()) {
@@ -229,9 +209,9 @@
             } else {
                 flags.remove(Flags.Flag.RECENT);
             }
-            FetchResponse response = new FetchResponse(msn, flags, uidOut,
+            final FetchResponse response = new FetchResponse(msn, flags, uidOut,
                     null, null, null, null, null, null);
-            responses.add(response);
+            responder.respond(response);
         }
     }
 
@@ -242,42 +222,35 @@
         return mailbox;
     }
 
-    private void addRecentResponses(final SelectedImapMailbox selected, final List responses) {
+    private void addRecentResponses(final SelectedImapMailbox selected, final ImapProcessor.Responder responder) {
         final int recentCount = selected.recentCount();
 //      TODO: use factory
         RecentResponse response = new RecentResponse(recentCount);
-        responses.add(response);
+        responder.respond(response);
     }
 
-    private void addExistsResponses(final ImapSession session, final SelectedImapMailbox selected, final List responses) {
+    private void addExistsResponses(final ImapSession session, final SelectedImapMailbox selected, 
+            final ImapProcessor.Responder responder) {
         try {
             final Mailbox mailbox = getMailbox(session, selected);
             final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
             final int messageCount = mailbox.getMessageCount(mailboxSession);
             // TODO: use factory
-            ExistsResponse response = new ExistsResponse(messageCount);
-            responses.add(response);
+            final ExistsResponse response = new ExistsResponse(messageCount);
+            responder.respond(response);
         } catch (MailboxException e) {
             final String message = "Failed to retrieve exists count data";
-            handleResponseException(responses, e, message);
+            handleResponseException(responder, e, message);
         }
     }
 
-    private void handleResponseException(final List responses,
+    private void handleResponseException(final ImapProcessor.Responder responder,
             MessagingException e, final String message) {
         getLog().info(message);
         getLog().debug(message, e);
         // TODO: consider whether error message should be passed to the user
-        UntaggedNoResponse response = new UntaggedNoResponse(message, null);
-        responses.add(response);
-    }
-    
-    private void respond(final ImapProcessor.Responder responder,
-            final List responses) {
-        for (final Iterator it = responses.iterator(); it.hasNext();) {
-            ImapResponseMessage message = (ImapResponseMessage) it.next();
-            responder.respond(message);
-        }
+        final UntaggedNoResponse response = new UntaggedNoResponse(message, null);
+        responder.respond(response);
     }
 
     protected void okComplete(final ImapCommand command, final String tag,



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org