Author: norman
Date: Sat Apr 16 17:23:27 2011
New Revision: 1094020

URL: http://svn.apache.org/viewvc?rev=1094020&view=rev
Log:
AbstractMailboxProcessor.messageRange(...) does not respect if the inbox is 
empty or not. See IMAP-301

Modified:
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
    
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
    
james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java?rev=1094020&r1=1094019&r2=1094020&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
 Sat Apr 16 17:23:27 2011
@@ -351,7 +351,7 @@ abstract public class AbstractMailboxPro
      * @param selected
      * @param range
      * @param useUids
-     * @return
+     * @return range or null
      * @throws MailboxException
      */
     protected MessageRange messageRange(SelectedMailbox selected, IdRange 
range, boolean useUids) throws MessageRangeException {
@@ -391,6 +391,9 @@ abstract public class AbstractMailboxPro
             }
             
         } else {
+            if (selected.existsCount() <= 0) {
+                return null;
+            }
             // Take care of "*" and "*:*" values by return the last message in
             // the mailbox. See IMAP-289
             if (lowVal == Long.MAX_VALUE && highVal == Long.MAX_VALUE) {

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java?rev=1094020&r1=1094019&r2=1094020&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
 Sat Apr 16 17:23:27 2011
@@ -78,15 +78,16 @@ public class CopyProcessor extends Abstr
                 List<IdRange> resultRanges = new ArrayList<IdRange>();
                 for (int i = 0; i < idSet.length; i++) {
                     MessageRange messageSet = messageRange(currentMailbox, 
idSet[i], useUids);
-
-                    List<MessageRange> copiedUids = 
mailboxManager.copyMessages(messageSet, currentMailbox.getPath(), 
targetMailbox, mailboxSession);
-                    for (MessageRange mr : copiedUids) {
-                        // Set recent flag on copied message as this SHOULD be
-                        // done.
-                        // See RFC 3501 6.4.7. COPY Command
-                        // See IMAP-287
-                        mailbox.setFlags(new Flags(Flags.Flag.RECENT), true, 
false, mr, mailboxSession);
-                        resultRanges.add(new IdRange(mr.getUidFrom(), 
mr.getUidTo()));
+                    if (messageSet != null) {
+                        List<MessageRange> copiedUids = 
mailboxManager.copyMessages(messageSet, currentMailbox.getPath(), 
targetMailbox, mailboxSession);
+                        for (MessageRange mr : copiedUids) {
+                            // Set recent flag on copied message as this 
SHOULD be
+                            // done.
+                            // See RFC 3501 6.4.7. COPY Command
+                            // See IMAP-287
+                            mailbox.setFlags(new Flags(Flags.Flag.RECENT), 
true, false, mr, mailboxSession);
+                            resultRanges.add(new IdRange(mr.getUidFrom(), 
mr.getUidTo()));
+                        }
                     }
                 }
                 IdRange[] resultUids = 
IdRange.mergeRanges(resultRanges).toArray(new IdRange[0]);

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java?rev=1094020&r1=1094019&r2=1094020&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
 Sat Apr 16 17:23:27 2011
@@ -63,7 +63,9 @@ public class ExpungeProcessor extends Ab
                     // See http://tools.ietf.org/html/rfc4315
                     for (int i = 0; i < ranges.length; i++) {
                         MessageRange mRange = 
messageRange(session.getSelected(), ranges[i], true);
-                        expunge(mailbox, mRange, session, mailboxSession);
+                        if (mRange != null) {
+                            expunge(mailbox, mRange, session, mailboxSession);
+                        }
 
                     }
 

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java?rev=1094020&r1=1094019&r2=1094020&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
 Sat Apr 16 17:23:27 2011
@@ -222,19 +222,18 @@ public class SearchProcessor extends Abs
 
     private Criterion sequence(IdRange[] sequenceNumbers, final ImapSession 
session, boolean msn) throws MessageRangeException {
         final int length = sequenceNumbers.length;
-        final SearchQuery.NumericRange[] ranges = new 
SearchQuery.NumericRange[length];
+        final List<SearchQuery.NumericRange> ranges = new 
ArrayList<SearchQuery.NumericRange>();
         for (int i = 0; i < length; i++) {
             final IdRange range = sequenceNumbers[i];
 
             // correctly calculate the ranges. See IMAP-292
             final SelectedMailbox selected = session.getSelected();
             MessageRange mRange = messageRange(selected, range, !msn);
-                 
-            ranges[i] = new SearchQuery.NumericRange(mRange.getUidFrom(), 
mRange.getUidTo());
-
-
+            if (mRange != null) {
+                ranges.add(new SearchQuery.NumericRange(mRange.getUidFrom(), 
mRange.getUidTo()));
+            }
         }
-        Criterion crit = SearchQuery.uid(ranges);
+        Criterion crit = SearchQuery.uid(ranges.toArray(new 
SearchQuery.NumericRange[0]));
         return crit;
     }
 

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java?rev=1094020&r1=1094019&r2=1094020&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
 Sat Apr 16 17:23:27 2011
@@ -71,31 +71,33 @@ public class StoreProcessor extends Abst
             for (int i = 0; i < idSet.length; i++) {
                 final SelectedMailbox selected = session.getSelected();
                 MessageRange messageSet = messageRange(selected, idSet[i], 
useUids);
+                if (messageSet != null) {
+                    final MailboxSession mailboxSession = 
ImapSessionUtils.getMailboxSession(session);
+                    final Map<Long, Flags> flagsByUid = 
mailbox.setFlags(flags, value, replace, messageSet, mailboxSession);
+                    if (!silent) {
+                        for (Map.Entry<Long, Flags> entry : 
flagsByUid.entrySet()) {
+                            final long uid = entry.getKey();
+                            final int msn = selected.msn(uid);
 
-                final MailboxSession mailboxSession = 
ImapSessionUtils.getMailboxSession(session);
-                final Map<Long, Flags> flagsByUid = mailbox.setFlags(flags, 
value, replace, messageSet, mailboxSession);
-                if (!silent) {
-                    for (Map.Entry<Long, Flags> entry : flagsByUid.entrySet()) 
{
-                        final long uid = entry.getKey();
-                        final int msn = selected.msn(uid);
+                            if (msn == SelectedMailbox.NO_SUCH_MESSAGE)
+                                throw new MailboxException("No message found 
with uid " + uid);
 
-                        if (msn == SelectedMailbox.NO_SUCH_MESSAGE)
-                            throw new MailboxException("No message found with 
uid " + uid);
-
-                        final Flags resultFlags = entry.getValue();
-                        final Long resultUid;
-                        if (useUids) {
-                            resultUid = uid;
-                        } else {
-                            resultUid = null;
-                        }
-                        if (selected.isRecent(uid)) {
-                            resultFlags.add(Flags.Flag.RECENT);
+                            final Flags resultFlags = entry.getValue();
+                            final Long resultUid;
+                            if (useUids) {
+                                resultUid = uid;
+                            } else {
+                                resultUid = null;
+                            }
+                            if (selected.isRecent(uid)) {
+                                resultFlags.add(Flags.Flag.RECENT);
+                            }
+                            final FetchResponse response = new 
FetchResponse(msn, resultFlags, resultUid, null, null, null, null, null, null);
+                            responder.respond(response);
                         }
-                        final FetchResponse response = new FetchResponse(msn, 
resultFlags, resultUid, null, null, null, null, null, null);
-                        responder.respond(response);
                     }
                 }
+                
             }
             final boolean omitExpunged = (!useUids);
             unsolicitedResponses(session, responder, omitExpunged, useUids);

Modified: 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java?rev=1094020&r1=1094019&r2=1094020&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
 (original)
+++ 
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
 Sat Apr 16 17:23:27 2011
@@ -85,9 +85,11 @@ public class FetchProcessor extends Abst
 
             for (int i = 0; i < idSet.length; i++) {
                 MessageRange messageSet = messageRange(session.getSelected(), 
idSet[i], useUids);
-                MessageRange normalizedMessageSet = 
normalizeMessageRange(session.getSelected(), messageSet);
-                MessageRange batchedMessageSet = 
MessageRange.range(normalizedMessageSet.getUidFrom(), 
normalizedMessageSet.getUidTo(), batchSize);
-                ranges.add(batchedMessageSet);
+                if (messageSet != null) {
+                    MessageRange normalizedMessageSet = 
normalizeMessageRange(session.getSelected(), messageSet);
+                    MessageRange batchedMessageSet = 
MessageRange.range(normalizedMessageSet.getUidFrom(), 
normalizedMessageSet.getUidTo(), batchSize);
+                    ranges.add(batchedMessageSet);
+                }
             }
 
             processMessageRanges(session, mailbox, ranges, fetch, useUids, 
mailboxSession, responder);

Modified: 
james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
URL: 
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java?rev=1094020&r1=1094019&r2=1094020&view=diff
==============================================================================
--- 
james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
 (original)
+++ 
james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
 Sat Apr 16 17:23:27 2011
@@ -416,6 +416,8 @@ public class SearchProcessorTest {
 
                allowing(selectedMailbox).getFirstUid();will(returnValue(1L));
                allowing(selectedMailbox).getLastUid();will(returnValue(1048L));
+            allowing(selectedMailbox).existsCount();will(returnValue(1L));
+
             }});
        
         expectsGetSelectedMailbox();            



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to