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]