Author: rdonkin
Date: Fri Nov 9 22:28:44 2007
New Revision: 593739
URL: http://svn.apache.org/viewvc?rev=593739&view=rev
Log:
Ported search encoding to new architecture.
Added:
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/SearchResponse.java
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java
- copied, changed from r593640,
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/SearchResponseEncoder.java
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoderTest.java
Removed:
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/SearchResponseEncoder.java
Modified:
james/server/trunk/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/writer/OutputStreamImapResponseWriter.java
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/imapserver/codec/encode/ImapResponseComposer.java
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseWriter.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/main/DefaultImapEncoderFactory.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/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-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/MockImapResponseWriter.java
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/ListResponseEncoderTest.java
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessor.java
Modified:
james/server/trunk/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/writer/OutputStreamImapResponseWriter.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/writer/OutputStreamImapResponseWriter.java?rev=593739&r1=593738&r2=593739&view=diff
==============================================================================
---
james/server/trunk/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/writer/OutputStreamImapResponseWriter.java
(original)
+++
james/server/trunk/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/writer/OutputStreamImapResponseWriter.java
Fri Nov 9 22:28:44 2007
@@ -77,7 +77,7 @@
}
}
- public void message( int number )
+ public void message( long number )
{
space();
writer.print( number );
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=593739&r1=593738&r2=593739&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
Fri Nov 9 22:28:44 2007
@@ -81,6 +81,7 @@
public static final String LIST_RESPONSE_NAME = "LIST";
public static final String LSUB_RESPONSE_NAME = "LSUB";
+ public static final String SEARCH_RESPONSE_NAME = "SEARCH";
public static final String NAME_ATTRIBUTE_NOINFERIORS = "\\Noinferiors";
public static final String NAME_ATTRIBUTE_NOSELECT = "\\Noselect";
Added:
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/SearchResponse.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/SearchResponse.java?rev=593739&view=auto
==============================================================================
---
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/SearchResponse.java
(added)
+++
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/SearchResponse.java
Fri Nov 9 22:28:44 2007
@@ -0,0 +1,47 @@
+/****************************************************************
+ * 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.imap.message.response.imap4rev1.server;
+
+import org.apache.james.api.imap.message.response.ImapResponseMessage;
+
+/**
+ * A <code>SEARCH</code> response.
+ */
+public class SearchResponse implements ImapResponseMessage {
+ private final long ids[];
+
+ /**
+ * Constructs a <code>SEARCH</code> response.
+ * @param ids ids, not null
+ */
+ public SearchResponse(final long[] ids) {
+ super();
+ this.ids = ids;
+ }
+
+ /**
+ * Gets the ids returned by this search.
+ * @return the ids, not null
+ */
+ public final long[] getIds() {
+ return ids;
+ }
+
+}
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=593739&r1=593738&r2=593739&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
Fri Nov 9 22:28:44 2007
@@ -146,6 +146,8 @@
public abstract void recentResponse(int count);
public abstract void expungeResponse(int msn);
+
+ public abstract void searchResponse(long[] ids);
public abstract void fetchResponse(int msn, String msgData);
@@ -188,7 +190,7 @@
public abstract void message(final String message);
- public abstract void message(final int number);
+ public abstract void message(final long number);
public abstract void responseCode(final String responseCode);
Modified:
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseWriter.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseWriter.java?rev=593739&r1=593738&r2=593739&view=diff
==============================================================================
---
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseWriter.java
(original)
+++
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseWriter.java
Fri Nov 9 22:28:44 2007
@@ -50,7 +50,7 @@
*/
void message( String message );
- void message( int number );
+ void message( long number );
/**
* Writes a response code.
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=593739&r1=593738&r2=593739&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
Fri Nov 9 22:28:44 2007
@@ -285,9 +285,9 @@
}
/**
- * @see
org.apache.james.imapserver.codec.encode.ImapResponseComposer#message(int)
+ * @see
org.apache.james.imapserver.codec.encode.ImapResponseComposer#message(long)
*/
- public void message(final int number) {
+ public void message(final long number) {
writer.message(number);
}
@@ -380,5 +380,22 @@
public void openParen() {
writer.openParen();
+ }
+
+ public void searchResponse(long[] ids) {
+ untagged();
+ message(ImapConstants.SEARCH_RESPONSE_NAME);
+ message(ids);
+ end();
+ }
+
+ private void message(long[] ids) {
+ if (ids != null) {
+ final int length = ids.length;
+ for (int i=0;i<length; i++) {
+ final long id = ids[i];
+ message(id);
+ }
+ }
}
}
Copied:
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java
(from r593640,
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/SearchResponseEncoder.java)
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java?p2=james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java&p1=james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/SearchResponseEncoder.java&r1=593640&r2=593739&rev=593739&view=diff
==============================================================================
---
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/SearchResponseEncoder.java
(original)
+++
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java
Fri Nov 9 22:28:44 2007
@@ -16,19 +16,19 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-package org.apache.james.imapserver.codec.encode.imap4rev1.legacy;
+package org.apache.james.imapserver.codec.encode.imap4rev1.server;
import java.util.List;
import org.apache.james.api.imap.ImapCommand;
import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.imap.message.response.imap4rev1.legacy.SearchResponse;
+import org.apache.james.imap.message.response.imap4rev1.server.SearchResponse;
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;
/**
- * @deprecated responses should correspond directly to the specification
+ * Encoders IMAP4rev1 <code>SEARCH</code> responses.
*/
public class SearchResponseEncoder extends AbstractChainedImapEncoder {
@@ -38,20 +38,11 @@
protected void doEncode(ImapMessage acceptableMessage,
ImapResponseComposer composer) {
SearchResponse response = (SearchResponse) acceptableMessage;
- final ImapCommand command = response.getCommand();
- final String idList = response.getIdList();
- composer.commandResponse( command, idList );
-
- List unsolicitedResponses = response.getUnsolicatedResponses();
- chainEncodeAll(unsolicitedResponses, composer);
-
- final String tag = response.getTag();
- composer.commandComplete( command, tag );
-
+ final long[] ids = response.getIds();
+ composer.searchResponse(ids);
}
protected boolean isAcceptable(ImapMessage message) {
return (message instanceof SearchResponse);
- }
-
+ }
}
Modified:
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java?rev=593739&r1=593738&r2=593739&view=diff
==============================================================================
---
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java
(original)
+++
james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java
Fri Nov 9 22:28:44 2007
@@ -34,10 +34,10 @@
import
org.apache.james.imapserver.codec.encode.imap4rev1.legacy.ErrorResponseEncoder;
import
org.apache.james.imapserver.codec.encode.imap4rev1.legacy.ExamineAndSelectResponseEncoder;
import
org.apache.james.imapserver.codec.encode.imap4rev1.legacy.LogoutResponseEncoder;
-import
org.apache.james.imapserver.codec.encode.imap4rev1.legacy.SearchResponseEncoder;
import
org.apache.james.imapserver.codec.encode.imap4rev1.legacy.StatusCommandResponseEncoder;
import
org.apache.james.imapserver.codec.encode.imap4rev1.server.LSubResponseEncoder;
import
org.apache.james.imapserver.codec.encode.imap4rev1.server.ListResponseEncoder;
+import
org.apache.james.imapserver.codec.encode.imap4rev1.server.SearchResponseEncoder;
import
org.apache.james.imapserver.codec.encode.imap4rev1.status.UntaggedNoResponseEncoder;
/**
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=593739&r1=593738&r2=593739&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
Fri Nov 9 22:28:44 2007
@@ -26,6 +26,10 @@
public abstract class AbstractTestImapResponseComposer extends TestCase {
+ private static final long[] ONE_TWO_THREE = {1, 2, 3};
+ private static final long[] FIBS = {1, 1, 2, 3, 5, 8, 13, 21, 34, 65, 99};
+ private static final long[] EMPTY = {};
+
protected void setUp() throws Exception {
super.setUp();
}
@@ -34,6 +38,12 @@
super.tearDown();
}
+ public void testSearch() throws Exception {
+ checkSearchResponseEncode("* SEARCH 1 2 3\r\n", ONE_TWO_THREE);
+ checkSearchResponseEncode("* SEARCH 1 1 2 3 5 8 13 21 34 65 99\r\n",
FIBS);
+ checkSearchResponseEncode("* SEARCH\r\n", EMPTY);
+ }
+
public void testQuotedDelimiter() throws Exception {
checkListResponseEncode("* LSUB () \"\\\"\" \"#news\"\r\n", "LSUB",
null, "\"", "#news");
checkListResponseEncode("* LIST () \"\\\"\" \"#INBOX\"\r\n", "LIST",
null, "\"", "#INBOX");
@@ -71,6 +81,19 @@
checkListResponseEncode("* LSUB (\\one \\two \\three \\four) \".\"
\"#news\"\r\n", "LSUB", attributes, ".", "#news");
checkListResponseEncode("* LIST (\\one \\two \\three \\four) \".\"
\"#INBOX\"\r\n", "LIST", attributes, ".", "#INBOX");
}
+
+ private void checkSearchResponseEncode(String expected, long[] ids) throws
Exception {
+ StringBuffer buffer = new StringBuffer();
+ byte[] output = encodeSearchResponse(ids);
+ for (int i=0;i<output.length;i++) {
+ buffer.append((char) output[i]);
+ }
+ assertEquals(expected, buffer.toString());
+ clear();
+ }
+
+ protected abstract byte[] encodeSearchResponse(long[] ids) throws
Exception;
+
private void checkListResponseEncode(String expected, String typeName,
List attributes,
String hierarchyDelimiter, String name) throws Exception {
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=593739&r1=593738&r2=593739&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
Fri Nov 9 22:28:44 2007
@@ -80,7 +80,7 @@
}
}
- public void message( int number )
+ public void message( long number )
{
space();
writer.print( number );
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=593739&r1=593738&r2=593739&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
Fri Nov 9 22:28:44 2007
@@ -48,4 +48,9 @@
writer.clear();
}
+ protected byte[] encodeSearchResponse(long[] ids) throws Exception {
+ composer.searchResponse(ids);
+ return writer.getBytes();
+ }
+
}
Modified:
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/MockImapResponseWriter.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/MockImapResponseWriter.java?rev=593739&r1=593738&r2=593739&view=diff
==============================================================================
---
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/MockImapResponseWriter.java
(original)
+++
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/MockImapResponseWriter.java
Fri Nov 9 22:28:44 2007
@@ -41,7 +41,7 @@
operations.add(new TextMessageOperation(message));
}
- public void message(int number) {
+ public void message(long number) {
operations.add(new NumericMessageOperation(number));
}
@@ -132,14 +132,14 @@
}
public static class NumericMessageOperation {
- public final int number;
- public NumericMessageOperation(int number) {
+ public final long number;
+ public NumericMessageOperation(long number) {
this.number = number;
}
public int hashCode() {
final int PRIME = 31;
int result = 1;
- result = PRIME * result + number;
+ result = (int) (PRIME * result + number);
return result;
}
public boolean equals(Object obj) {
Modified:
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/ListResponseEncoderTest.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/ListResponseEncoderTest.java?rev=593739&r1=593738&r2=593739&view=diff
==============================================================================
---
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/ListResponseEncoderTest.java
(original)
+++
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/ListResponseEncoderTest.java
Fri Nov 9 22:28:44 2007
@@ -19,12 +19,8 @@
package org.apache.james.imapserver.codec.encode.imap4rev1.server;
-import java.util.Arrays;
-
-import org.apache.james.api.imap.ImapConstants;
import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.imap.message.response.imap4rev1.server.LSubResponse;
-import org.apache.james.imap.message.response.imap4rev1.server.ListResponse;
+import org.apache.james.imap.message.response.imap4rev1.server.SearchResponse;
import org.apache.james.imapserver.codec.encode.ImapEncoder;
import org.apache.james.imapserver.codec.encode.ImapResponseComposer;
import org.jmock.Mock;
@@ -32,7 +28,10 @@
public class ListResponseEncoderTest extends MockObjectTestCase {
- ListResponseEncoder encoder;
+ private static final long[] IDS = {1, 4, 9, 16};
+
+ SearchResponse response;
+ SearchResponseEncoder encoder;
Mock mockNextEncoder;
Mock composer;
@@ -40,7 +39,8 @@
super.setUp();
mockNextEncoder = mock(ImapEncoder.class);
composer = mock(ImapResponseComposer.class);
- encoder = new ListResponseEncoder((ImapEncoder)
mockNextEncoder.proxy());
+ response = new SearchResponse(IDS);
+ encoder = new SearchResponseEncoder((ImapEncoder)
mockNextEncoder.proxy());
}
protected void tearDown() throws Exception {
@@ -48,55 +48,13 @@
}
public void testIsAcceptable() {
- assertTrue(encoder.isAcceptable(new ListResponse(true, true, true,
true, ".", "name")));
- assertFalse(encoder.isAcceptable(new LSubResponse(true, true, true,
true, ".", "name")));
+ assertTrue(encoder.isAcceptable(response));
assertFalse(encoder.isAcceptable((ImapMessage)
mock(ImapMessage.class).proxy()));
assertFalse(encoder.isAcceptable(null));
}
- public void testName() throws Exception {
- composer.expects(once()).method("listResponse").with(same("LIST"),
NULL, same("."), same("INBOX.name"));
- encoder.encode(new ListResponse(false, false, false, false, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
- }
-
- public void testDelimiter() throws Exception {
- composer.expects(once()).method("listResponse").with(same("LIST"),
NULL, same("@"), same("INBOX.name"));
- encoder.encode(new ListResponse(false, false, false, false, "@",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
- }
-
- public void testNoDelimiter() throws Exception {
- composer.expects(once()).method("listResponse").with(same("LIST"),
NULL, NULL, same("INBOX.name"));
- encoder.encode(new ListResponse(false, false, false, false, null,
"INBOX.name"), (ImapResponseComposer) composer.proxy());
- }
-
- public void testAllAttributes() throws Exception {
- String[] all = {ImapConstants.NAME_ATTRIBUTE_NOINFERIORS,
ImapConstants.NAME_ATTRIBUTE_NOSELECT,
- ImapConstants.NAME_ATTRIBUTE_MARKED,
ImapConstants.NAME_ATTRIBUTE_UNMARKED};
- composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(all)), same("."), same("INBOX.name"));
- encoder.encode(new ListResponse(true, true, true, true, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
- }
-
- public void testNoInferiors() throws Exception {
- String[] values = {ImapConstants.NAME_ATTRIBUTE_NOINFERIORS};
- composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(values)), same("."), same("INBOX.name"));
- encoder.encode(new ListResponse(true, false, false, false, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
- }
-
- public void testNoSelect() throws Exception {
- String[] values = {ImapConstants.NAME_ATTRIBUTE_NOSELECT};
- composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(values)), same("."), same("INBOX.name"));
- encoder.encode(new ListResponse(false, true, false, false, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
- }
-
- public void testMarked() throws Exception {
- String[] values = {ImapConstants.NAME_ATTRIBUTE_MARKED};
- composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(values)), same("."), same("INBOX.name"));
- encoder.encode(new ListResponse(false, false, true, false, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
- }
-
- public void testUnmarked() throws Exception {
- String[] values = {ImapConstants.NAME_ATTRIBUTE_UNMARKED};
- composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(values)), same("."), same("INBOX.name"));
- encoder.encode(new ListResponse(false, false, false, true, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ public void testEncode() throws Exception {
+ composer.expects(once()).method("searchResponse").with(same(IDS));
+ encoder.encode(response, (ImapResponseComposer) composer.proxy());
}
}
Added:
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoderTest.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoderTest.java?rev=593739&view=auto
==============================================================================
---
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoderTest.java
(added)
+++
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoderTest.java
Fri Nov 9 22:28:44 2007
@@ -0,0 +1,102 @@
+/****************************************************************
+ * 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.server;
+
+import java.util.Arrays;
+
+import org.apache.james.api.imap.ImapConstants;
+import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.imap.message.response.imap4rev1.server.LSubResponse;
+import org.apache.james.imap.message.response.imap4rev1.server.ListResponse;
+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 SearchResponseEncoderTest extends MockObjectTestCase {
+
+ ListResponseEncoder encoder;
+ Mock mockNextEncoder;
+ Mock composer;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ mockNextEncoder = mock(ImapEncoder.class);
+ composer = mock(ImapResponseComposer.class);
+ encoder = new ListResponseEncoder((ImapEncoder)
mockNextEncoder.proxy());
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ public void testIsAcceptable() {
+ assertTrue(encoder.isAcceptable(new ListResponse(true, true, true,
true, ".", "name")));
+ assertFalse(encoder.isAcceptable(new LSubResponse(true, true, true,
true, ".", "name")));
+ assertFalse(encoder.isAcceptable((ImapMessage)
mock(ImapMessage.class).proxy()));
+ assertFalse(encoder.isAcceptable(null));
+ }
+
+ public void testName() throws Exception {
+ composer.expects(once()).method("listResponse").with(same("LIST"),
NULL, same("."), same("INBOX.name"));
+ encoder.encode(new ListResponse(false, false, false, false, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ }
+
+ public void testDelimiter() throws Exception {
+ composer.expects(once()).method("listResponse").with(same("LIST"),
NULL, same("@"), same("INBOX.name"));
+ encoder.encode(new ListResponse(false, false, false, false, "@",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ }
+
+ public void testNoDelimiter() throws Exception {
+ composer.expects(once()).method("listResponse").with(same("LIST"),
NULL, NULL, same("INBOX.name"));
+ encoder.encode(new ListResponse(false, false, false, false, null,
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ }
+
+ public void testAllAttributes() throws Exception {
+ String[] all = {ImapConstants.NAME_ATTRIBUTE_NOINFERIORS,
ImapConstants.NAME_ATTRIBUTE_NOSELECT,
+ ImapConstants.NAME_ATTRIBUTE_MARKED,
ImapConstants.NAME_ATTRIBUTE_UNMARKED};
+ composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(all)), same("."), same("INBOX.name"));
+ encoder.encode(new ListResponse(true, true, true, true, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ }
+
+ public void testNoInferiors() throws Exception {
+ String[] values = {ImapConstants.NAME_ATTRIBUTE_NOINFERIORS};
+ composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(values)), same("."), same("INBOX.name"));
+ encoder.encode(new ListResponse(true, false, false, false, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ }
+
+ public void testNoSelect() throws Exception {
+ String[] values = {ImapConstants.NAME_ATTRIBUTE_NOSELECT};
+ composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(values)), same("."), same("INBOX.name"));
+ encoder.encode(new ListResponse(false, true, false, false, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ }
+
+ public void testMarked() throws Exception {
+ String[] values = {ImapConstants.NAME_ATTRIBUTE_MARKED};
+ composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(values)), same("."), same("INBOX.name"));
+ encoder.encode(new ListResponse(false, false, true, false, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ }
+
+ public void testUnmarked() throws Exception {
+ String[] values = {ImapConstants.NAME_ATTRIBUTE_UNMARKED};
+ composer.expects(once()).method("listResponse").with(same("LIST"),
eq(Arrays.asList(values)), same("."), same("INBOX.name"));
+ encoder.encode(new ListResponse(false, false, false, true, ".",
"INBOX.name"), (ImapResponseComposer) composer.proxy());
+ }
+}
Modified:
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessor.java
URL:
http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessor.java?rev=593739&r1=593738&r2=593739&view=diff
==============================================================================
---
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessor.java
(original)
+++
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessor.java
Fri Nov 9 22:28:44 2007
@@ -34,7 +34,7 @@
import org.apache.james.api.imap.process.ImapSession;
import org.apache.james.api.imap.process.ImapProcessor.Responder;
import org.apache.james.imap.message.request.imap4rev1.SearchRequest;
-import org.apache.james.imap.message.response.imap4rev1.legacy.SearchResponse;
+import org.apache.james.imap.message.response.imap4rev1.server.SearchResponse;
import org.apache.james.imapserver.processor.base.AbstractImapRequestProcessor;
import org.apache.james.imapserver.processor.base.AuthorizationException;
import org.apache.james.imapserver.processor.base.ImapSessionUtils;
@@ -59,24 +59,14 @@
ImapSession session, String tag, ImapCommand command, Responder
responder)
throws MailboxException, AuthorizationException, ProtocolException
{
final SearchRequest request = (SearchRequest) message;
- final ImapResponseMessage result = doProcess(request, session, tag,
- command);
- responder.respond(result);
- }
-
- private ImapResponseMessage doProcess(SearchRequest request,
- ImapSession session, String tag, ImapCommand command)
- throws MailboxException, AuthorizationException, ProtocolException
{
final SearchTerm searchTerm = request.getSearchTerm();
final boolean useUids = request.isUseUids();
- final ImapResponseMessage result = doProcess(searchTerm, useUids,
- session, tag, command);
- return result;
+ doProcess(searchTerm, useUids, session, tag, command, responder);
}
- private ImapResponseMessage doProcess(final SearchTerm searchTerm,
- final boolean useUids, ImapSession session, String tag,
- ImapCommand command) throws MailboxException,
+ private void doProcess(final SearchTerm searchTerm,
+ final boolean useUids, final ImapSession session, final String tag,
+ final ImapCommand command, final Responder responder) throws
MailboxException,
AuthorizationException, ProtocolException {
ImapMailboxSession mailbox = ImapSessionUtils.getMailbox(session);
final int resultCode;
@@ -85,6 +75,7 @@
} else {
resultCode = MessageResult.MSN;
}
+
MessageResult[] messageResults;
try {
// TODO: implementation
@@ -93,25 +84,20 @@
} catch (MailboxManagerException e) {
throw new MailboxException(e);
}
- // TODO: probably more efficient to stream data
- // TODO: directly to response
- StringBuffer idList = new StringBuffer();
- for (int i = 0; i < messageResults.length; i++) {
- if (i > 0) {
- idList.append(ImapConstants.SP);
- }
+
+ final int length = messageResults.length;
+ long[] ids = new long[length];
+ for (int i = 0; i < length; i++) {
if (useUids) {
- idList.append(messageResults[i].getUid());
+ ids[i] = messageResults[i].getUid();
} else {
- idList.append(messageResults[i].getMsn());
+ ids[i] = messageResults[i].getMsn();
}
}
- final SearchResponse result = new SearchResponse(command, idList
- .toString(), tag);
+ final SearchResponse response = new SearchResponse(ids);
+ responder.respond(response);
boolean omitExpunged = (!useUids);
- List unsolicitedResponses = session.unsolicitedResponses(omitExpunged,
- useUids);
- result.addUnsolicitedResponses(unsolicitedResponses);
- return result;
+ unsolicitedResponses(session, responder, omitExpunged, useUids);
+ okComplete(command, tag, responder);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]