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/04 13:28:57 UTC

svn commit: r982216 - in /james/imap/trunk: processor/src/main/java/org/apache/james/imap/processor/ processor/src/main/java/org/apache/james/imap/processor/base/ store/src/main/java/org/apache/james/imap/store/

Author: norman
Date: Wed Aug  4 11:28:57 2010
New Revision: 982216

URL: http://svn.apache.org/viewvc?rev=982216&view=rev
Log:
Make some performance improvements by remove some unneeded copy operations

Modified:
    james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
    james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
    james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java
    james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java

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=982216&r1=982215&r2=982216&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 Wed Aug  4 11:28:57 2010
@@ -19,9 +19,7 @@
 
 package org.apache.james.imap.processor;
 
-import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.List;
 
 import javax.mail.Flags;
 
@@ -198,14 +196,20 @@ abstract class AbstractSelectionProcesso
         final Iterator<MessageResult> it = mailbox.getMessages(MessageRange.all(),
                 FetchGroupImpl.MINIMAL, mailboxSession);
 
-        final List<Long> uids = new ArrayList<Long>();
-        while (it.hasNext()) {
-            final MessageResult result = it.next();
-            uids.add(result.getUid());
-        }
-        
-        final SelectedMailbox sessionMailbox = new SelectedMailboxImpl(getMailboxManager(), uids,
-                                                                        mailboxSession, path);
+        final SelectedMailbox sessionMailbox = new SelectedMailboxImpl(getMailboxManager(), new Iterator<Long>() {
+
+			public boolean hasNext() {
+				return it.hasNext();
+			}
+
+			public Long next() {
+				return it.next().getUid();
+			}
+
+			public void remove() {
+				throw new UnsupportedOperationException("Read-only iterator");
+			}
+		}, mailboxSession, path);
         session.selected(sessionMailbox);
         return sessionMailbox;
     }

Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java?rev=982216&r1=982215&r2=982216&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java Wed Aug  4 11:28:57 2010
@@ -21,7 +21,7 @@ package org.apache.james.imap.processor.
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
+import java.util.Iterator;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -45,7 +45,7 @@ public class SelectedMailboxImpl impleme
 
     private boolean recentUidRemoved;
 
-    public SelectedMailboxImpl(final MailboxManager mailboxManager, final List<Long> uids,
+    public SelectedMailboxImpl(final MailboxManager mailboxManager, final Iterator<Long> uids,
             final MailboxSession mailboxSession, final MailboxPath path) throws MailboxException {
         recentUids = new TreeSet<Long>();
         recentUidRemoved = false;

Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java?rev=982216&r1=982215&r2=982216&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/base/UidToMsnConverter.java Wed Aug  4 11:28:57 2010
@@ -20,8 +20,7 @@
 package org.apache.james.imap.processor.base;
 
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 import java.util.SortedMap;
 import java.util.TreeMap;
@@ -41,14 +40,15 @@ public class UidToMsnConverter implement
 
     private boolean closed = false;
 
-    public UidToMsnConverter(final Collection<Long> uids) {
+    public UidToMsnConverter(final Iterator<Long> uids) {
+    	
         msnToUid = new TreeMap<Integer, Long>();
         uidToMsn = new TreeMap<Long, Integer>();
         if (uids != null) {
             int msn = 1;
-            final List<Long> uidsInOrder = new ArrayList<Long>(uids);
-            Collections.sort(uidsInOrder);
-            for (final Long uid:uidsInOrder) {
+            while (uids.hasNext()) {
+            	final Long uid = uids.next();
+            	
                 highestUid = uid.longValue();
                 highestMsn = msn;
                 final Integer msnInteger = new Integer(msn);
@@ -138,6 +138,10 @@ public class UidToMsnConverter implement
         closed = true;
     }
     
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.imap.mailbox.MailboxListener#isClosed()
+     */
     public boolean isClosed() {
         return closed;
     }

Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java?rev=982216&r1=982215&r2=982216&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMessageManager.java Wed Aug  4 11:28:57 2010
@@ -51,7 +51,6 @@ import org.apache.james.imap.mailbox.Mes
 import org.apache.james.imap.mailbox.SearchQuery;
 import org.apache.james.imap.mailbox.MessageResult.FetchGroup;
 import org.apache.james.imap.mailbox.util.MailboxEventDispatcher;
-import org.apache.james.imap.mailbox.util.UidRange;
 import org.apache.james.imap.store.mail.MessageMapper;
 import org.apache.james.imap.store.mail.model.Header;
 import org.apache.james.imap.store.mail.model.Mailbox;
@@ -361,29 +360,11 @@ public abstract class StoreMessageManage
      */
     public Iterator<MessageResult> getMessages(final MessageRange set, FetchGroup fetchGroup,
             MailboxSession mailboxSession) throws MailboxException {
-        UidRange range = uidRangeForMessageSet(set);
-        final List<MailboxMembership<Id>> rows = new ArrayList<MailboxMembership<Id>>(messageMapper.findInMailbox(mailbox, set));
-        return getMessages(fetchGroup, range, rows);
-    }
-
-    private ResultIterator<Id> getMessages(FetchGroup result, UidRange range, List<MailboxMembership<Id>> messages) {
-        final ResultIterator<Id> results = getResults(result, messages);
-        return results;
-    }
-
-    private ResultIterator<Id> getResults(FetchGroup result, List<MailboxMembership<Id>> messages) {
-        final ResultIterator<Id> results = new ResultIterator<Id>(messages,result);
-        return results;
-    }
-
-    private static UidRange uidRangeForMessageSet(MessageRange set) throws MailboxException {
-        if (set.getType().equals(MessageRange.Type.ALL)) {
-            return new UidRange(1, -1);
-        } else {
-            return new UidRange(set.getUidFrom(), set.getUidTo());
-        }
+        final List<MailboxMembership<Id>> rows = messageMapper.findInMailbox(mailbox, set);
+        return new ResultIterator<Id>(rows, fetchGroup);
     }
 
+ 
     private Flags getPermanentFlags() {
         Flags permanentFlags = new Flags();
         permanentFlags.add(Flags.Flag.ANSWERED);
@@ -608,7 +589,6 @@ public abstract class StoreMessageManage
             toMailbox.copy(originalRows, session);
 
         } catch (MessagingException e) {
-            e.printStackTrace();
             throw new MailboxException(HumanReadableText.FAILURE_MAIL_PARSE, e);
         }
     }



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