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 no...@apache.org on 2011/08/23 13:03:51 UTC

svn commit: r1160623 - /james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java

Author: norman
Date: Tue Aug 23 11:03:50 2011
New Revision: 1160623

URL: http://svn.apache.org/viewvc?rev=1160623&view=rev
Log:
Only create MimeDescriptorStructure if really needed. See IMAP-333

Modified:
    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/FetchResponseBuilder.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java?rev=1160623&r1=1160622&r2=1160623&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 Tue Aug 23 11:03:50 2011
@@ -44,7 +44,6 @@ import org.apache.james.mailbox.MessageM
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.MessageRangeException;
 import org.apache.james.mailbox.MessageResult;
-import org.apache.james.mailbox.MimeDescriptor;
 
 public final class FetchResponseBuilder {
 
@@ -150,18 +149,33 @@ public final class FetchResponseBuilder 
             this.envelope = buildEnvelope(result);
         }
 
+
+        // BODY part responses.
+        Collection<BodyFetchElement> elements = fetch.getBodyElements();
+        this.elements = new ArrayList<FetchResponse.BodyElement>();
+        for (Iterator<BodyFetchElement> iterator = elements.iterator(); iterator.hasNext();) {
+            BodyFetchElement fetchElement = iterator.next();
+            final FetchResponse.BodyElement element = bodyFetch(result, fetchElement);
+            if (element != null) {
+                this.elements.add(element);
+            }
+        }
+        
         // Only create when needed
         if (fetch.isBody() || fetch.isBodyStructure()) {
-            final MimeDescriptor descriptor = result.getMimeDescriptor();
-
             // BODY response
-            if (fetch.isBody()) {
-                body = new MimeDescriptorStructure(false, descriptor, envelopeBuilder);
+            //
+            // the STRUCTURE is only needed when no specific element is requested otherwise we don't need 
+            // to access it and may be able to not parse the message
+            //
+            // See IMAP-333
+            if (fetch.isBody() && this.elements.isEmpty()) {
+                body = new MimeDescriptorStructure(false, result.getMimeDescriptor(), envelopeBuilder);
             }
 
             // BODYSTRUCTURE response
             if (fetch.isBodyStructure()) {
-                bodystructure = new MimeDescriptorStructure(true, descriptor, envelopeBuilder);
+                bodystructure = new MimeDescriptorStructure(true, result.getMimeDescriptor(), envelopeBuilder);
             }
         }
         // UID response
@@ -169,16 +183,6 @@ public final class FetchResponseBuilder 
             setUid(resultUid);
         }
 
-        // BODY part responses.
-        Collection<BodyFetchElement> elements = fetch.getBodyElements();
-        this.elements = new ArrayList<FetchResponse.BodyElement>();
-        for (Iterator<BodyFetchElement> iterator = elements.iterator(); iterator.hasNext();) {
-            BodyFetchElement fetchElement = iterator.next();
-            final FetchResponse.BodyElement element = bodyFetch(result, fetchElement);
-            if (element != null) {
-                this.elements.add(element);
-            }
-        }
         
         if (fetch.isModSeq()) {
             long changedSince = fetch.getChangedSince();



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