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 rd...@apache.org on 2008/03/19 20:12:12 UTC
svn commit: r638976 - in /james/server/trunk:
imap-codec-library/src/test/java/org/apache/james/imapserver/codec/decode/imap4rev1/
imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/
Author: rdonkin
Date: Wed Mar 19 12:12:06 2008
New Revision: 638976
URL: http://svn.apache.org/viewvc?rev=638976&view=rev
Log:
Ensure that results are sorted and each ID only returned once.
Modified:
james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/decode/imap4rev1/SearchCommandParserAndParenthesesTest.java
james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/SearchProcessor.java
Modified: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/decode/imap4rev1/SearchCommandParserAndParenthesesTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/decode/imap4rev1/SearchCommandParserAndParenthesesTest.java?rev=638976&r1=638975&r2=638976&view=diff
==============================================================================
--- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/decode/imap4rev1/SearchCommandParserAndParenthesesTest.java (original)
+++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/decode/imap4rev1/SearchCommandParserAndParenthesesTest.java Wed Mar 19 12:12:06 2008
@@ -34,7 +34,6 @@
import org.apache.james.api.imap.message.request.DayMonthYear;
import org.apache.james.api.imap.message.request.SearchKey;
import org.apache.james.imapserver.codec.decode.ImapRequestLineReader;
-import org.apache.james.imapserver.codec.decode.imap4rev1.SearchCommandParserTopLevelAndTest.Input;
import org.jmock.Mock;
import org.jmock.MockObjectTestCase;
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=638976&r1=638975&r2=638976&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 Wed Mar 19 12:12:06 2008
@@ -20,8 +20,10 @@
package org.apache.james.imapserver.processor.imap4rev1;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.TreeSet;
import javax.mail.Flags.Flag;
@@ -79,6 +81,27 @@
final SearchQuery query = toQuery(searchKey, session);
+ final Collection results = findIds(useUids, session, mailbox, fetchGroup, query);
+ final long[] ids = toArray(results);
+
+ final SearchResponse response = new SearchResponse(ids);
+ responder.respond(response);
+ boolean omitExpunged = (!useUids);
+ unsolicitedResponses(session, responder, omitExpunged, useUids);
+ okComplete(command, tag, responder);
+ }
+
+ private long[] toArray(final Collection results) {
+ final Iterator it = results.iterator();
+ final int length = results.size();
+ long[] ids = new long[length];
+ for (int i = 0; i < length; i++) {
+ ids[i] = ((Long) it.next()).longValue();
+ }
+ return ids;
+ }
+
+ private Collection findIds(final boolean useUids, final ImapSession session, ImapMailbox mailbox, final FetchGroup fetchGroup, final SearchQuery query) throws MailboxException {
final Iterator it;
try {
@@ -87,7 +110,7 @@
throw new MailboxException(e);
}
- final List results = new ArrayList();
+ final Collection results = new TreeSet();
while (it.hasNext()) {
final MessageResult result = (MessageResult) it.next();
final Long number;
@@ -99,18 +122,7 @@
}
results.add(number);
}
-
- final int length = results.size();
- long[] ids = new long[length];
- for (int i = 0; i < length; i++) {
- ids[i] = ((Long) results.get(i)).longValue();
- }
-
- final SearchResponse response = new SearchResponse(ids);
- responder.respond(response);
- boolean omitExpunged = (!useUids);
- unsolicitedResponses(session, responder, omitExpunged, useUids);
- okComplete(command, tag, responder);
+ return results;
}
private SearchQuery toQuery(final SearchKey key, final ImapSession session) {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org