--- trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java 2013-02-04 12:51:13.267140542 +0100 +++ StoreMessageResultIterator.java 2013-01-18 16:00:47.000000000 +0100 @@ -38,6 +38,7 @@ import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.Message; + public class StoreMessageResultIterator implements MessageResultIterator { private Iterator> next = null; @@ -49,7 +50,6 @@ private long to; private int batchSize; private Type type; - private boolean done = false; private MessageMapper mapper; private FetchType ftype; @@ -112,15 +112,19 @@ @Override public boolean hasNext() { - if (!done && (next == null || !next.hasNext())) { + if (cursor > to) + return false; + + if (next == null || !next.hasNext()) { try { readBatch(); } catch (MailboxException e) { this.exception = e; - done = true; + return false; } } - return !done; + + return next.hasNext(); } private void readBatch() throws MailboxException { @@ -142,33 +146,24 @@ break; } next = mapper.findInMailbox(mailbox, range, ftype, batchSize); - if (!next.hasNext()) { - done = true; - } } @Override public MessageResult next() { - if (hasNext()) { - final Message message = next.next(); - MessageResult result; - try { - result = ResultUtils.loadMessageResult(message, group); - cursor = result.getUid(); - } catch (MailboxException e) { - result = new UnloadedMessageResult(message, e); - } - - cursor++; - // move the start UID behind the last fetched message UID if needed - if (hasNext()) { - if (cursor > to) { - done = true; - } - } - return result; + if (next == null || !next.hasNext()) + throw new NoSuchElementException(); + + final Message message = next.next(); + MessageResult result; + try { + result = ResultUtils.loadMessageResult(message, group); + cursor = result.getUid(); + } catch (MailboxException e) { + result = new UnloadedMessageResult(message, e); } - throw new NoSuchElementException(); + + cursor++; + return result; } @Override