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 no...@apache.org on 2010/08/12 20:15:36 UTC

svn commit: r984892 - in /james/imap/trunk: mailbox/src/main/java/org/apache/james/imap/mailbox/ memory/src/main/java/org/apache/james/imap/inmemory/mail/ processor/src/main/java/org/apache/james/imap/processor/

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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org