diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/OrderedComposite.java b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/OrderedComposite.java index 09c8807f7..305e80012 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/listener/OrderedComposite.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/listener/OrderedComposite.java @@ -24,6 +24,8 @@ import java.util.TreeSet; import org.springframework.core.Ordered; import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.annotation.Order; /** * @author Dave Syer @@ -62,11 +64,14 @@ class OrderedComposite { ordered.add(item); } } - else { - if (!unordered.contains(item)) { - unordered.add(item); + else if (AnnotationUtils.isAnnotationDeclaredLocally(Order.class, item.getClass())) { + if (!ordered.contains(item)) { + ordered.add(item); } } + else if (!unordered.contains(item)) { + unordered.add(item); + } list.clear(); list.addAll(ordered); list.addAll(unordered); @@ -82,8 +87,8 @@ class OrderedComposite { } /** - * Public getter for the list of items in reverse. The {@link Ordered} items come - * last, after any unordered ones. + * Public getter for the list of items in reverse. The {@link Ordered} items + * come last, after any unordered ones. * @return an iterator over the list of items */ public Iterator reverse() { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/OrderedCompositeTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/OrderedCompositeTests.java index bcdda71fb..d2c2b0852 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/listener/OrderedCompositeTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/listener/OrderedCompositeTests.java @@ -15,26 +15,24 @@ */ package org.springframework.batch.core.listener; +import static org.junit.Assert.assertEquals; + import java.util.Arrays; import java.util.Iterator; +import org.junit.Test; import org.springframework.core.Ordered; - -import junit.framework.TestCase; +import org.springframework.core.annotation.Order; /** * @author Dave Syer * */ -public class OrderedCompositeTests extends TestCase { +public class OrderedCompositeTests { private OrderedComposite list = new OrderedComposite(); - /** - * Test method for - * {@link org.springframework.batch.core.listener.OrderedComposite#setItems(java.util.List)} - * . - */ + @Test public void testSetItems() { list.setItems(Arrays.asList(new Object[] { "1", "2" })); Iterator iterator = list.iterator(); @@ -42,11 +40,7 @@ public class OrderedCompositeTests extends TestCase { assertEquals("2", iterator.next()); } - /** - * Test method for - * {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)} - * . - */ + @Test public void testAdd() { list.setItems(Arrays.asList((Object) "1")); list.add("3"); @@ -55,11 +49,7 @@ public class OrderedCompositeTests extends TestCase { assertEquals("3", iterator.next()); } - /** - * Test method for - * {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)} - * . - */ + @Test public void testAddOrdered() { list.setItems(Arrays.asList((Object) "1")); list.add(new Ordered() { @@ -72,11 +62,7 @@ public class OrderedCompositeTests extends TestCase { assertEquals("1", iterator.next()); } - /** - * Test method for - * {@link org.springframework.batch.core.listener.OrderedComposite#add(java.lang.Object)} - * . - */ + @Test public void testAddMultipleOrdered() { list.setItems(Arrays.asList((Object) "1")); list.add(new Ordered() { @@ -95,4 +81,22 @@ public class OrderedCompositeTests extends TestCase { assertEquals("1", iterator.next()); } + @Test + public void testAddAnnotationOrdered() { + list.add(new Ordered() { + public int getOrder() { + return 1; + } + }); + OrderedObject item = new OrderedObject(); + list.add(item); + Iterator iterator = list.iterator(); + assertEquals(item, iterator.next()); + } + + @Order(0) + private static class OrderedObject { + + } + }