Author: norman
Date: Thu Mar 24 12:57:55 2011
New Revision: 1084940

URL: http://svn.apache.org/viewvc?rev=1084940&view=rev
Log:
Make it easier to override how MessageRanges are processed in the 
FetchProcessor. This will be used later as part of IMAP-265 

Modified:
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeBuilder.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeBuilder.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeBuilder.java?rev=1084940&r1=1084939&r2=1084940&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeBuilder.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeBuilder.java
 Thu Mar 24 12:57:55 2011
@@ -39,7 +39,7 @@ import org.apache.james.mime4j.field.add
 import org.apache.james.mime4j.util.MimeUtil;
 import org.slf4j.Logger;
 
-final class EnvelopeBuilder {
+public final class EnvelopeBuilder {
     private final Logger logger;
 
     public EnvelopeBuilder(final Logger logger) {

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java?rev=1084940&r1=1084939&r2=1084940&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
 Thu Mar 24 12:57:55 2011
@@ -19,8 +19,10 @@
 
 package org.apache.james.imap.processor.fetch;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapSessionUtils;
@@ -71,7 +73,6 @@ public class FetchProcessor extends Abst
         final IdRange[] idSet = request.getIdSet();
         final FetchData fetch = request.getFetch();
         try {
-            FetchGroup resultToFetch = getFetchGroup(fetch);
             final MessageManager mailbox = getSelectedMailbox(session);
 
             if (mailbox == null) {
@@ -79,34 +80,17 @@ public class FetchProcessor extends Abst
             }
             
             final MailboxSession mailboxSession = 
ImapSessionUtils.getMailboxSession(session);
-            final FetchResponseBuilder builder = new FetchResponseBuilder(new 
EnvelopeBuilder(session.getLog()));
+            List<MessageRange> ranges = new ArrayList<MessageRange>();
             
             for (int i = 0; i < idSet.length; i++) {
                 MessageRange messageSet = messageRange(session.getSelected(), 
idSet[i], useUids);
                 MessageRange normalizedMessageSet = 
normalizeMessageRange(session.getSelected(), messageSet);
                 MessageRange batchedMessageSet = 
MessageRange.range(normalizedMessageSet.getUidFrom(), 
normalizedMessageSet.getUidTo(), batchSize);
-                mailbox.getMessages(batchedMessageSet, resultToFetch, 
mailboxSession, new MessageCallback() {
-
-                    public void onMessages(Iterator<MessageResult> it) throws 
MailboxException {
-                        while (it.hasNext()) {
-                            final MessageResult result = it.next();
-                            try {
-                                final FetchResponse response = 
builder.build(fetch, result, mailbox, session, useUids);
-                                responder.respond(response);
-                            } catch (ParseException e) {
-                                // we can't for whatever reason parse the
-                                // message so just skip it and log it to debug
-                                session.getLog().debug("Unable to parse 
message with uid " + result.getUid(), e);
-                            } catch (MessageRangeException e) {
-                                // we can't for whatever reason find the 
message
-                                // so just skip it and log it to debug
-                                session.getLog().debug("Unable to find message 
with uid " + result.getUid(), e);
-                            }
-                        }
-                    }
-                });
+                ranges.add(batchedMessageSet);
             }
             
+            processMessageRanges(session, mailbox, ranges, fetch, useUids, 
mailboxSession, responder);
+
             unsolicitedResponses(session, responder, useUids);
             okComplete(command, tag, responder);
         } catch (UnsupportedCriteriaException e) {
@@ -120,6 +104,47 @@ public class FetchProcessor extends Abst
     }
     
     /**
+     * Process the given message ranges by fetch them and pass them to the 
{@link Responder}
+     * 
+     * @param session
+     * @param mailbox
+     * @param range
+     * @param fetch
+     * @param useUids
+     * @param mailboxSession
+     * @param responder
+     * @throws MailboxException
+     */
+    protected void processMessageRanges(final ImapSession session, final 
MessageManager mailbox, final List<MessageRange> ranges, final FetchData fetch, 
final boolean useUids, final MailboxSession mailboxSession, final Responder 
responder) throws MailboxException {
+        final FetchResponseBuilder builder = new FetchResponseBuilder(new 
EnvelopeBuilder(session.getLog()));
+        FetchGroup  resultToFetch = getFetchGroup(fetch); 
+        
+        for (int i = 0; i < ranges.size(); i++) {
+            mailbox.getMessages(ranges.get(i), resultToFetch, mailboxSession, 
new MessageCallback() {
+
+                public void onMessages(Iterator<MessageResult> it) throws 
MailboxException {
+                    while (it.hasNext()) {
+                        final MessageResult result = it.next();
+                        try {
+                            final FetchResponse response = 
builder.build(fetch, result, mailbox, session, useUids);
+                            responder.respond(response);
+                        } catch (ParseException e) {
+                            // we can't for whatever reason parse the
+                            // message so just skip it and log it to debug
+                            session.getLog().debug("Unable to parse message 
with uid " + result.getUid(), e);
+                        } catch (MessageRangeException e) {
+                            // we can't for whatever reason find the message
+                            // so just skip it and log it to debug
+                            session.getLog().debug("Unable to find message 
with uid " + result.getUid(), e);
+                        }
+                    }
+                }
+            });        
+        }
+        
+    }
+    
+    /**
      * Format MessageRange to RANGE format applying selected folder min & max 
UIDs constraints
      * 
      * @param selected currently selected mailbox

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java?rev=1084940&r1=1084939&r2=1084940&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
 Thu Mar 24 12:57:55 2011
@@ -46,7 +46,7 @@ import org.apache.james.mailbox.MessageR
 import org.apache.james.mailbox.MimeDescriptor;
 import org.apache.james.mime4j.field.address.parser.ParseException;
 
-final class FetchResponseBuilder {
+public final class FetchResponseBuilder {
 
     private final EnvelopeBuilder envelopeBuilder;
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to