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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to