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]