diff options
Diffstat (limited to 'qpid/java')
| -rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java index 929045599b..43790b59d7 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/queue/SimpleAMQQueue.java @@ -852,30 +852,23 @@ public class SimpleAMQQueue implements AMQQueue, Subscription.StateListener */ public List<QueueEntry> getMessagesRangeOnTheQueue(final long fromPosition, final long toPosition) { - List<QueueEntry> queueEntries = new ArrayList<QueueEntry>(); - - QueueEntryIterator it = _entries.iterator(); - - long index = 1; - for ( ; index < fromPosition && !it.atTail(); index++) - { - it.advance(); - } - - if(index < fromPosition) - { - //The queue does not contain enough entries to reach our range. - //return the empty list. - return queueEntries; - } - - for ( ; index <= toPosition && !it.atTail(); index++) + List<QueueEntry> entries = getMessagesOnTheQueue(new QueueEntryFilter() { - it.advance(); - queueEntries.add(it.getNode()); - } + private long position = 0; + + public boolean accept(QueueEntry entry) + { + position++; + return (position >= fromPosition) && (position <= toPosition); + } - return queueEntries; + public boolean filterComplete() + { + return position >= toPosition; + } + }); + + return entries; } public void moveMessagesToAnotherQueue(final long fromMessageId, |
