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 2011/04/16 19:23:28 UTC
svn commit: r1094020 - in /james/imap/trunk/processor/src:
main/java/org/apache/james/imap/processor/
main/java/org/apache/james/imap/processor/fetch/
test/java/org/apache/james/imap/processor/
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org