Author: norman
Date: Thu Aug 12 18:15:36 2010
New Revision: 984892

URL: http://svn.apache.org/viewvc?rev=984892&view=rev
Log:
AbstractSelectionProcessor.createNewSelectedMailbox(..) use 
MessageMapper.search(...) now to allow Mailbox implementation to handle it with 
optimisted performance (only the uids are needed anyway) (IMAP-191)

Modified:
    
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java
    
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java

Modified: 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java?rev=984892&r1=984891&r2=984892&view=diff
==============================================================================
--- 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java
 (original)
+++ 
james/imap/trunk/mailbox/src/main/java/org/apache/james/imap/mailbox/Mailbox.java
 Thu Aug 12 18:15:36 2010
@@ -57,7 +57,7 @@ public interface Mailbox {
     boolean isWriteable(MailboxSession session);
 
     /**
-     * Searches for messages matching the given query.
+     * Searches for messages matching the given query. The result must be 
ordered 
      * @param mailboxSession not null
      * @return uid iterator
      * @throws UnsupportedCriteriaException

Modified: 
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java?rev=984892&r1=984891&r2=984892&view=diff
==============================================================================
--- 
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java
 (original)
+++ 
james/imap/trunk/memory/src/main/java/org/apache/james/imap/inmemory/mail/InMemoryMessageMapper.java
 Thu Aug 12 18:15:36 2010
@@ -174,7 +174,10 @@ public class InMemoryMessageMapper imple
      * @see 
org.apache.james.imap.store.mail.MessageMapper#searchMailbox(org.apache.james.imap.store.mail.model.Mailbox,
 org.apache.james.imap.mailbox.SearchQuery)
      */
     public Iterator<Long> searchMailbox(Mailbox<Long> mailbox, SearchQuery 
query) throws StorageException {
-        return new SearchQueryIterator(new 
ArrayList<MailboxMembership<?>>(getMembershipByUidForMailbox(mailbox).values()).iterator(),
 query);
+        List<MailboxMembership<?>> memberships = new 
ArrayList<MailboxMembership<?>>(getMembershipByUidForMailbox(mailbox).values());
+        Collections.sort(memberships, MailboxMembershipComparator.INSTANCE);
+
+        return new SearchQueryIterator(memberships.iterator(), query);
     }
 
     /**

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java?rev=984892&r1=984891&r2=984892&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
 Thu Aug 12 18:15:36 2010
@@ -38,10 +38,8 @@ import org.apache.james.imap.mailbox.Mai
 import org.apache.james.imap.mailbox.MailboxManager;
 import org.apache.james.imap.mailbox.MailboxNotFoundException;
 import org.apache.james.imap.mailbox.MailboxSession;
-import org.apache.james.imap.mailbox.MessageRange;
-import org.apache.james.imap.mailbox.MessageResult;
+import org.apache.james.imap.mailbox.SearchQuery;
 import org.apache.james.imap.mailbox.Mailbox.MetaData;
-import org.apache.james.imap.mailbox.util.FetchGroupImpl;
 import org.apache.james.imap.message.request.AbstractMailboxSelectionRequest;
 import org.apache.james.imap.message.response.ExistsResponse;
 import org.apache.james.imap.message.response.FlagsResponse;
@@ -193,23 +191,14 @@ abstract class AbstractSelectionProcesso
     private SelectedMailbox createNewSelectedMailbox(final Mailbox mailbox,
             final MailboxSession mailboxSession, ImapSession session, 
MailboxPath path)
             throws MailboxException {
-        final Iterator<MessageResult> it = 
mailbox.getMessages(MessageRange.all(),
-                FetchGroupImpl.MINIMAL, mailboxSession);
-
-        final SelectedMailbox sessionMailbox = new 
SelectedMailboxImpl(getMailboxManager(), new Iterator<Long>() {
+        SearchQuery query = new SearchQuery();
+        query.andCriteria(SearchQuery.all());
+        
+        // use search here to allow implementation a better way to improve 
selects on mailboxes. 
+        // See https://issues.apache.org/jira/browse/IMAP-192
+        final Iterator<Long> it = mailbox.search(query, mailboxSession);
 
-                       public boolean hasNext() {
-                               return it.hasNext();
-                       }
-
-                       public Long next() {
-                               return it.next().getUid();
-                       }
-
-                       public void remove() {
-                               throw new 
UnsupportedOperationException("Read-only iterator");
-                       }
-               }, mailboxSession, path);
+        final SelectedMailbox sessionMailbox = new 
SelectedMailboxImpl(getMailboxManager(), it, mailboxSession, path);
         session.selected(sessionMailbox);
         return sessionMailbox;
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to