@Override public void remove() { synchronized (QueueImpl.this) { iter.remove(); } } }
protected void removeMessageReference(ConsumerHolder<? extends Consumer> holder, MessageReference ref) { if (!nonDestructive) { holder.iter.remove(); refRemoved(ref); } }
@Override public synchronized MessageReference removeReferenceWithID(final long id1) throws Exception { try (LinkedListIterator<MessageReference> iterator = iterator()) { MessageReference removed = null; while (iterator.hasNext()) { MessageReference ref = iterator.next(); if (ref.getMessage().getMessageID() == id1) { iterator.remove(); refRemoved(ref); removed = ref; break; } } if (removed == null) { // Look in scheduled deliveries removed = scheduledDeliveryHandler.removeReferenceWithID(id1); } return removed; } }
@Override public synchronized boolean sendMessageToDeadLetterAddress(final long messageID) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { incDelivering(ref); sendToDeadLetterAddress(null, ref); iter.remove(); refRemoved(ref); return true; } } return false; } }
@Override public synchronized int sendMessagesToDeadLetterAddress(Filter filter) throws Exception { int count = 0; try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { incDelivering(ref); sendToDeadLetterAddress(null, ref); iter.remove(); refRemoved(ref); count++; } } return count; } }
@Override public synchronized int changeReferencesPriority(final Filter filter, final byte newPriority) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { int count = 0; while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { count++; iter.remove(); refRemoved(ref); ref.getMessage().setPriority(newPriority); addTail(ref, false); } } return count; } }
@Override public synchronized boolean changeReferencePriority(final long messageID, final byte newPriority) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { iter.remove(); refRemoved(ref); ref.getMessage().setPriority(newPriority); addTail(ref, false); return true; } } return false; } }
@Test public void testRemoveHeadAndTail1() { LinkedListIterator<Integer> iter = list.iterator(); int num = 10; for (int i = 0; i < num; i++) { list.addTail(i); assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } }
@Test public void testIterateNoElements() { LinkedListIterator<Integer> iter = list.iterator(); assertNotNull(iter); assertNoSuchElementIsThrown(iter); try { iter.remove(); fail("Should throw NoSuchElementException"); } catch (NoSuchElementException e) { // OK } }
@Override public synchronized boolean expireReference(final long messageID) throws Exception { if (isExpirationRedundant()) { return false; } try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { incDelivering(ref); expire(ref); iter.remove(); refRemoved(ref); return true; } } return false; } }
@Override public synchronized boolean moveReference(final long messageID, final SimpleString toAddress, final Binding binding, final boolean rejectDuplicate) throws Exception { try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (ref.getMessage().getMessageID() == messageID) { iter.remove(); refRemoved(ref); incDelivering(ref); try { move(null, toAddress, binding, ref, rejectDuplicate, AckReason.NORMAL, null); } catch (Exception e) { decDelivering(ref); throw e; } return true; } } return false; } }
@Test public void testRemoveHead3() { int num = 10; LinkedListIterator<Integer> iter = list.iterator(); for (int i = 0; i < num; i++) { list.addTail(i); } for (int i = 0; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } for (int i = num; i < num * 2; i++) { list.addTail(i); } for (int i = num; i < num * 2; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } }
@Test public void testRemoveHeadAndTail2() { LinkedListIterator<Integer> iter = list.iterator(); int num = 10; for (int i = 0; i < num; i++) { list.addHead(i); assertEquals(1, list.size()); assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } }
@Override public synchronized int expireReferences(final Filter filter) throws Exception { if (isExpirationRedundant()) { return 0; } Transaction tx = new TransactionImpl(storageManager); int count = 0; try (LinkedListIterator<MessageReference> iter = iterator()) { while (iter.hasNext()) { MessageReference ref = iter.next(); if (filter == null || filter.match(ref.getMessage())) { incDelivering(ref); expire(tx, ref); iter.remove(); refRemoved(ref); count++; } } tx.commit(); return count; } }
@Test public void testRemoveHead1() { int num = 10; LinkedListIterator<Integer> iter = list.iterator(); for (int i = 0; i < num; i++) { list.addTail(i); } iter.next(); iter.remove(); for (int i = 1; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } assertFalse(iter.hasNext()); }
@Test public void testRemoveHeadAndTail3() { LinkedListIterator<Integer> iter = list.iterator(); int num = 10; for (int i = 0; i < num; i++) { if (i % 2 == 0) { list.addHead(i); } else { list.addTail(i); } assertEquals(1, list.size()); assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } }
@Test public void testRemoveInTurn() { LinkedListIterator<Integer> iter = list.iterator(); int num = 10; for (int i = 0; i < num; i++) { list.addTail(i); } for (int i = 0; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); iter.remove(); } assertFalse(iter.hasNext()); assertEquals(0, list.size()); }
@Test public void testRemoveHead2() { int num = 10; for (int i = 0; i < num; i++) { list.addTail(i); } LinkedListIterator<Integer> iter = list.iterator(); iter.next(); iter.remove(); iter = list.iterator(); for (int i = 1; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } assertFalse(iter.hasNext()); }
@Test public void testRemoveMiddle() { int num = 10; for (int i = 0; i < num; i++) { list.addTail(i); } LinkedListIterator<Integer> iter = list.iterator(); for (int i = 0; i < num / 2; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } // Remove the 4th element iter.remove(); iter = list.iterator(); for (int i = 0; i < num; i++) { if (i != num / 2 - 1) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } } assertFalse(iter.hasNext()); }
@Test public void testRemoveTail1() { int num = 10; LinkedListIterator<Integer> iter = list.iterator(); for (int i = 0; i < num; i++) { list.addTail(i); } for (int i = 0; i < num; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } assertFalse(iter.hasNext()); // Remove the last one, that's element 9 iter.remove(); iter = list.iterator(); for (int i = 0; i < num - 1; i++) { assertTrue(iter.hasNext()); assertEquals(i, iter.next().intValue()); } assertFalse(iter.hasNext()); }