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]