Author: rdonkin Date: Sun Nov 18 04:20:51 2007 New Revision: 596082 URL: http://svn.apache.org/viewvc?rev=596082&view=rev Log: Ported FetchResponse to new design pattern.
Added: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/LegacyFetchResponse.java - copied, changed from r595917, james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoderTest.java Modified: james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/ImapConstants.java james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoder.java james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/ImapResponseTest.java james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ByteImapResponseWriter.java james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/SelectedMailboxSessionImpl.java james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java Modified: james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/ImapConstants.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/ImapConstants.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/ImapConstants.java (original) +++ james/server/trunk/imap-api/src/main/java/org/apache/james/api/imap/ImapConstants.java Sun Nov 18 04:20:51 2007 @@ -31,6 +31,7 @@ String SP = " "; public static final String NIL = "NIL"; + public static final String UID = "UID"; public static final char OPENING_PARENTHESIS = '('; public static final char CLOSING_PARENTHESIS = ')'; public static final char SP_CHAR = ' '; Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java (original) +++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java Sun Nov 18 04:20:51 2007 @@ -18,26 +18,47 @@ ****************************************************************/ package org.apache.james.imap.message.response.imap4rev1; +import javax.mail.Flags; + import org.apache.james.api.imap.message.response.ImapResponseMessage; -public class FetchResponse implements ImapResponseMessage { +public final class FetchResponse implements ImapResponseMessage { - // TODO: this is not an efficient solution - // TODO: would be better to lazy load and stream on output - // TODO: this is just a transitional solution - private final int number; - private final String data; - public FetchResponse(final int number, final String data) { + private final int messageNumber; + private final Flags flags; + private final Long uid; + + public FetchResponse(final int messageNumber, final Flags flags, final Long uid) { super(); - this.number = number; - this.data = data; + this.messageNumber = messageNumber; + this.flags = flags; + this.uid = uid; } - public final String getData() { - return data; + /** + * Gets the number of the message whose details + * have been fetched. + * @return message number + */ + public final int getMessageNumber() { + return messageNumber; } - public final int getNumber() { - return number; - } + /** + * Gets the fetched flags. + * @return [EMAIL PROTECTED] Flags} fetched, + * or null if the <code>FETCH</code> did not include <code>FLAGS</code> + */ + public Flags getFlags() { + return flags; + } + + /** + * Gets the unique id for the fetched message. + * @return message uid, + * or null if the <code>FETCH</code> did not include <code>UID</code> + */ + public Long getUid() { + return uid; + } } Copied: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/LegacyFetchResponse.java (from r595917, james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java) URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/LegacyFetchResponse.java?p2=james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/LegacyFetchResponse.java&p1=james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java&r1=595917&r2=596082&rev=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/FetchResponse.java (original) +++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/LegacyFetchResponse.java Sun Nov 18 04:20:51 2007 @@ -20,14 +20,17 @@ import org.apache.james.api.imap.message.response.ImapResponseMessage; -public class FetchResponse implements ImapResponseMessage { +/** + * @deprecated data should be not be encoded in the processor + */ +public class LegacyFetchResponse implements ImapResponseMessage { // TODO: this is not an efficient solution // TODO: would be better to lazy load and stream on output // TODO: this is just a transitional solution private final int number; private final String data; - public FetchResponse(final int number, final String data) { + public LegacyFetchResponse(final int number, final String data) { super(); this.number = number; this.data = data; Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java (original) +++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java Sun Nov 18 04:20:51 2007 @@ -139,8 +139,18 @@ public abstract void untaggedNoResponse(String displayMessage, String responseCode); + /** + * Writes flags to output using standard format. + * @param flags <code>Flags</code>, not null + */ + public abstract void flags(Flags flags); + + /** + * Writes a complete FLAGS response. + * @param flags <code>Flags</code>, not null + */ public abstract void flagsResponse(Flags flags); - + public abstract void existsResponse(int count); public abstract void recentResponse(int count); @@ -149,7 +159,25 @@ public abstract void searchResponse(long[] ids); - public abstract void fetchResponse(int msn, String msgData); + /** + * Starts a FETCH response by writing the opening + * star-FETCH-number-paren sequence. + * @param msn message number + * @see #closeFetchResponse() + */ + public abstract void openFetchResponse(long msn); + + /** + * Ends a FETCH response by writing the closing + * paren-crlf sequence. + */ + public abstract void closeFetchResponse(); + + /** + * @deprecated + * @see #openFetchResponse(long) + */ + public abstract void legacyFetchResponse(int msn, String msgData); public abstract void commandResponse(ImapCommand command, String message); Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java (original) +++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java Sun Nov 18 04:20:51 2007 @@ -172,8 +172,7 @@ */ public void flagsResponse(Flags flags) { untagged(); - message(FLAGS); - message(MessageFlags.format(flags)); + flags(flags); end(); } @@ -208,9 +207,9 @@ } /** - * @see org.apache.james.imapserver.codec.encode.ImapResponseComposer#fetchResponse(int, java.lang.String) + * @see org.apache.james.imapserver.codec.encode.ImapResponseComposer#legacyFetchResponse(int, java.lang.String) */ - public void fetchResponse(int msn, String msgData) { + public void legacyFetchResponse(int msn, String msgData) { untagged(); message(msn); message(FETCH); @@ -397,5 +396,41 @@ message(id); } } + } + + public void flags(Flags flags) { + message(FLAGS); + openParen(); + if ( flags.contains(Flags.Flag.ANSWERED) ) { + message( "\\Answered" ); + } + if ( flags.contains(Flags.Flag.DELETED) ) { + message( "\\Deleted" ); + } + if ( flags.contains(Flags.Flag.DRAFT) ) { + message( "\\Draft" ); + } + if ( flags.contains(Flags.Flag.FLAGGED) ) { + message( "\\Flagged" ); + } + if ( flags.contains(Flags.Flag.RECENT) ) { + message( "\\Recent" ); + } + if ( flags.contains(Flags.Flag.SEEN) ) { + message( "\\Seen" ); + } + closeParen(); + } + + public void closeFetchResponse() { + closeParen(); + end(); + } + + public void openFetchResponse(long msn) { + untagged(); + message(msn); + message(FETCH); + openParen(); } } Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoder.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoder.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoder.java (original) +++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoder.java Sun Nov 18 04:20:51 2007 @@ -19,8 +19,12 @@ package org.apache.james.imapserver.codec.encode.imap4rev1; +import javax.mail.Flags; + +import org.apache.james.api.imap.ImapConstants; import org.apache.james.api.imap.ImapMessage; import org.apache.james.imap.message.response.imap4rev1.FetchResponse; +import org.apache.james.imap.message.response.imap4rev1.LegacyFetchResponse; import org.apache.james.imapserver.codec.encode.ImapEncoder; import org.apache.james.imapserver.codec.encode.ImapResponseComposer; import org.apache.james.imapserver.codec.encode.base.AbstractChainedImapEncoder; @@ -32,15 +36,36 @@ } public boolean isAcceptable(final ImapMessage message) { - return (message instanceof FetchResponse); + return (message instanceof LegacyFetchResponse) + || (message instanceof FetchResponse); } protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) { - final FetchResponse fetchResponse = (FetchResponse) acceptableMessage; + if (acceptableMessage instanceof FetchResponse) { + final FetchResponse fetchResponse = (FetchResponse) acceptableMessage; + final long messageNumber = fetchResponse.getMessageNumber(); + composer.openFetchResponse(messageNumber); + final Flags flags = fetchResponse.getFlags(); + if (flags != null) { + composer.flags(flags); + } + final Long uid = fetchResponse.getUid(); + if (uid != null) { + composer.message(ImapConstants.UID); + composer.message(uid.longValue()); + } + composer.closeFetchResponse(); + } else { + final LegacyFetchResponse fetchResponse = (LegacyFetchResponse) acceptableMessage; + encodeLegacy(composer, fetchResponse); + } + } + + private void encodeLegacy(ImapResponseComposer composer, final LegacyFetchResponse fetchResponse) { // TODO: this is inefficient final String data = fetchResponse.getData(); final int number = fetchResponse.getNumber(); - composer.fetchResponse(number, data); + composer.legacyFetchResponse(number, data); } } Modified: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java (original) +++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java Sun Nov 18 04:20:51 2007 @@ -22,6 +22,8 @@ import java.util.ArrayList; import java.util.List; +import javax.mail.Flags; + import junit.framework.TestCase; public abstract class AbstractTestImapResponseComposer extends TestCase { @@ -81,6 +83,35 @@ checkListResponseEncode("* LSUB (\\one \\two \\three \\four) \".\" \"#news\"\r\n", "LSUB", attributes, ".", "#news"); checkListResponseEncode("* LIST (\\one \\two \\three \\four) \".\" \"#INBOX\"\r\n", "LIST", attributes, ".", "#INBOX"); } + + public void testShouldEncodeFlagsCorrectly() throws Exception { + checkFlagsEncode(" FLAGS (\\Seen)", new Flags(Flags.Flag.SEEN)); + checkFlagsEncode(" FLAGS (\\Recent)", new Flags(Flags.Flag.RECENT)); + checkFlagsEncode(" FLAGS (\\Draft)", new Flags(Flags.Flag.DRAFT)); + checkFlagsEncode(" FLAGS (\\Answered)", new Flags(Flags.Flag.ANSWERED)); + checkFlagsEncode(" FLAGS (\\Flagged)", new Flags(Flags.Flag.FLAGGED)); + checkFlagsEncode(" FLAGS (\\Deleted)", new Flags(Flags.Flag.DELETED)); + Flags flags = new Flags(); + flags.add(Flags.Flag.SEEN); + flags.add(Flags.Flag.ANSWERED); + flags.add(Flags.Flag.FLAGGED); + flags.add(Flags.Flag.DELETED); + flags.add(Flags.Flag.SEEN); + flags.add(Flags.Flag.DRAFT); + checkFlagsEncode(" FLAGS (\\Answered \\Deleted \\Draft \\Flagged \\Seen)", flags); + } + + private void checkFlagsEncode(String expected, Flags flags) throws Exception { + StringBuffer buffer = new StringBuffer(); + byte[] output = encodeFlagsResponse(flags); + for (int i=0;i<output.length;i++) { + buffer.append((char) output[i]); + } + assertEquals(expected, buffer.toString()); + clear(); + } + + protected abstract byte[] encodeFlagsResponse(Flags flags) throws Exception; private void checkSearchResponseEncode(String expected, long[] ids) throws Exception { StringBuffer buffer = new StringBuffer(); Modified: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/ImapResponseTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/ImapResponseTest.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/ImapResponseTest.java (original) +++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/ImapResponseTest.java Sun Nov 18 04:20:51 2007 @@ -37,7 +37,7 @@ protected void setUp() throws Exception { super.setUp(); writer = new MockImapResponseWriter(); - response = new ImapResponseComposerImpl(writer);; + response = new ImapResponseComposerImpl(writer); } protected void tearDown() throws Exception { @@ -90,14 +90,16 @@ public void testFlagsResponse() { Flags flags = new Flags(); response.flagsResponse(flags); - assertEquals(4, writer.operations.size()); + assertEquals(5, writer.operations.size()); assertEquals(new MockImapResponseWriter.UntaggedOperation(), writer.operations.get(0)); assertEquals(new MockImapResponseWriter.TextMessageOperation(ImapResponseComposerImpl.FLAGS), writer.operations.get(1)); - assertEquals(new MockImapResponseWriter.TextMessageOperation(MessageFlags.format(flags)), + assertEquals(new MockImapResponseWriter.ParenOperation(true), writer.operations.get(2)); - assertEquals(new MockImapResponseWriter.EndOperation(), + assertEquals(new MockImapResponseWriter.ParenOperation(false), writer.operations.get(3)); + assertEquals(new MockImapResponseWriter.EndOperation(), + writer.operations.get(4)); } public void testExistsResponse() { @@ -142,7 +144,7 @@ public void testFetchResponse() { int count = 7; String data = "Some data"; - response.fetchResponse(count, data); + response.legacyFetchResponse(count, data); assertEquals(5, writer.operations.size()); assertEquals(new MockImapResponseWriter.UntaggedOperation(), writer.operations.get(0)); assertEquals(new MockImapResponseWriter.NumericMessageOperation(count), Modified: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ByteImapResponseWriter.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ByteImapResponseWriter.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ByteImapResponseWriter.java (original) +++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ByteImapResponseWriter.java Sun Nov 18 04:20:51 2007 @@ -41,7 +41,9 @@ clear(); } - public byte[] getBytes() { + public byte[] getBytes() throws Exception { + writer.flush(); + out.flush(); return out.toByteArray(); } Modified: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java (original) +++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java Sun Nov 18 04:20:51 2007 @@ -21,6 +21,8 @@ import java.util.List; +import javax.mail.Flags; + import org.apache.james.imapserver.codec.encode.AbstractTestImapResponseComposer; public class ImapResponseComposerImplTest extends @@ -50,6 +52,11 @@ protected byte[] encodeSearchResponse(long[] ids) throws Exception { composer.searchResponse(ids); + return writer.getBytes(); + } + + protected byte[] encodeFlagsResponse(Flags flags) throws Exception { + composer.flags(flags); return writer.getBytes(); } Added: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoderTest.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoderTest.java?rev=596082&view=auto ============================================================================== --- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoderTest.java (added) +++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/FetchResponseEncoderTest.java Sun Nov 18 04:20:51 2007 @@ -0,0 +1,89 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.imapserver.codec.encode.imap4rev1; + +import javax.mail.Flags; + +import org.apache.james.api.imap.ImapCommand; +import org.apache.james.api.imap.ImapMessage; +import org.apache.james.imap.message.response.imap4rev1.FetchResponse; +import org.apache.james.imapserver.codec.encode.ImapEncoder; +import org.apache.james.imapserver.codec.encode.ImapResponseComposer; +import org.jmock.Mock; +import org.jmock.MockObjectTestCase; + +public class FetchResponseEncoderTest extends MockObjectTestCase { + + Flags flags; + ImapResponseComposer composer; + Mock mockComposer; + Mock mockNextEncoder; + FetchResponseEncoder encoder; + Mock mockCommand; + + protected void setUp() throws Exception { + super.setUp(); + mockComposer = mock(ImapResponseComposer.class); + composer = (ImapResponseComposer) mockComposer.proxy(); + mockNextEncoder = mock(ImapEncoder.class); + encoder = new FetchResponseEncoder((ImapEncoder) mockNextEncoder.proxy()); + mockCommand = mock(ImapCommand.class); + flags = new Flags(Flags.Flag.DELETED); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testShouldNotAcceptUnknownResponse() throws Exception { + assertFalse(encoder.isAcceptable((ImapMessage)mock(ImapMessage.class).proxy())); + } + + public void testShouldAcceptFetchResponse() throws Exception { + assertTrue(encoder.isAcceptable(new FetchResponse(11, null, null))); + } + + public void testShouldEncodeFlagsResponse() throws Exception { + FetchResponse message = new FetchResponse(100, flags, null); + mockComposer.expects(once()).method("openFetchResponse").with(eq(100L)); + mockComposer.expects(once()).method("flags").with(eq(flags)); + mockComposer.expects(once()).method("closeFetchResponse"); + encoder.doEncode(message, composer); + } + + public void testShouldEncodeUidResponse() throws Exception { + FetchResponse message = new FetchResponse(100, null, new Long(72)); + mockComposer.expects(once()).method("openFetchResponse").with(eq(100L)); + mockComposer.expects(once()).method("message").with(eq("UID")); + mockComposer.expects(once()).method("message").with(eq(72L)); + mockComposer.expects(once()).method("closeFetchResponse"); + encoder.doEncode(message, composer); + } + + public void testShouldEncodeAllResponse() throws Exception { + FetchResponse message = new FetchResponse(100, flags, new Long(72)); + mockComposer.expects(once()).method("openFetchResponse").with(eq(100L)); + mockComposer.expects(once()).method("flags").with(eq(flags)); + mockComposer.expects(once()).method("message").with(eq("UID")); + mockComposer.expects(once()).method("message").with(eq(72L)); + mockComposer.expects(once()).method("closeFetchResponse"); + encoder.doEncode(message, composer); + } +} 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=596082&r1=596081&r2=596082&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 Sun Nov 18 04:20:51 2007 @@ -32,6 +32,7 @@ import org.apache.james.imap.message.response.imap4rev1.ExistsResponse; import org.apache.james.imap.message.response.imap4rev1.ExpungeResponse; import org.apache.james.imap.message.response.imap4rev1.FetchResponse; +import org.apache.james.imap.message.response.imap4rev1.LegacyFetchResponse; import org.apache.james.imap.message.response.imap4rev1.RecentResponse; import org.apache.james.imap.message.response.imap4rev1.status.UntaggedNoResponse; import org.apache.james.mailboxmanager.MailboxListener; @@ -165,15 +166,14 @@ for (int i = 0; i < flagUpdates.length; i++) { MessageResult mr = flagUpdates[i]; int msn = mr.getMsn(); - Flags updatedFlags = mr.getFlags(); - StringBuffer out = new StringBuffer("FLAGS "); - out.append(MessageFlags.format(updatedFlags)); + final Flags flags = mr.getFlags(); + final Long uid; if (useUid) { - out.append(" UID "); - out.append(mr.getUid()); + uid = new Long(mr.getUid()); + } else { + uid = null; } - // TODO: use CharSequence instead (avoid unnecessary string creation) - FetchResponse response = new FetchResponse(msn, out.toString()); + FetchResponse response = new FetchResponse(msn, flags, uid); responses.add(response); } } catch (MailboxManagerException e) { Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java?rev=596082&r1=596081&r2=596082&view=diff ============================================================================== --- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java (original) +++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/FetchProcessor.java Sun Nov 18 04:20:51 2007 @@ -41,7 +41,7 @@ import org.apache.james.api.imap.process.ImapProcessor; import org.apache.james.api.imap.process.ImapSession; import org.apache.james.imap.message.request.imap4rev1.FetchRequest; -import org.apache.james.imap.message.response.imap4rev1.FetchResponse; +import org.apache.james.imap.message.response.imap4rev1.LegacyFetchResponse; import org.apache.james.imapserver.codec.encode.EncoderUtils; import org.apache.james.imapserver.processor.base.AbstractImapRequestProcessor; import org.apache.james.imapserver.processor.base.AuthorizationException; @@ -95,7 +95,7 @@ useUids); // TODO: this is inefficient // TODO: stream output upon response - FetchResponse response = new FetchResponse(fetchResults[j].getMsn(), msgData); + LegacyFetchResponse response = new LegacyFetchResponse(fetchResults[j].getMsn(), msgData); responder.respond(response); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]