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