/** * Returns a fully constructed {@link CompositeItemProcessor}. * * @return a new {@link CompositeItemProcessor} */ public CompositeItemProcessor<I, O> build() { Assert.notNull(delegates, "A list of delegates is required."); Assert.notEmpty(delegates, "The delegates list must have one or more delegates."); CompositeItemProcessor<I, O> processor = new CompositeItemProcessor<>(); processor.setDelegates(this.delegates); return processor; } }
@SuppressWarnings({ "unchecked", "serial" }) @Before public void setUp() throws Exception { processor1 = mock(ItemProcessor.class); processor2 = mock(ItemProcessor.class); composite.setDelegates(new ArrayList<ItemProcessor<Object,Object>>() {{ add(processor1); add(processor2); }}); composite.afterPropertiesSet(); }
/** * The list of transformers must not be null or empty and * can contain only instances of {@link ItemProcessor}. */ @Test public void testAfterPropertiesSet() throws Exception { // value not set composite.setDelegates(null); try { composite.afterPropertiesSet(); fail(); } catch (IllegalArgumentException e) { // expected } // empty list composite.setDelegates(new ArrayList<ItemProcessor<Object,Object>>()); try { composite.afterPropertiesSet(); fail(); } catch (IllegalArgumentException e) { // expected } }
/** * Test that the CompositeItemProcessor can work with generic types for the ItemProcessor delegates. */ @Test @SuppressWarnings({"unchecked", "serial"}) public void testItemProcessorGenerics() throws Exception { CompositeItemProcessor<String, String> composite = new CompositeItemProcessor<>(); final ItemProcessor<String, Integer> processor1 = mock(ItemProcessor.class); final ItemProcessor<Integer, String> processor2 = mock(ItemProcessor.class); composite.setDelegates(new ArrayList<ItemProcessor<?,?>>() {{ add(processor1); add(processor2); }}); composite.afterPropertiesSet(); when(processor1.process("input")).thenReturn(5); when(processor2.process(5)).thenReturn("output"); assertEquals("output", composite.process("input")); }
/** * Returns a fully constructed {@link CompositeItemProcessor}. * * @return a new {@link CompositeItemProcessor} */ public CompositeItemProcessor<I, O> build() { Assert.notNull(delegates, "A list of delegates is required."); Assert.notEmpty(delegates, "The delegates list must have one or more delegates."); CompositeItemProcessor<I, O> processor = new CompositeItemProcessor<>(); processor.setDelegates(this.delegates); return processor; } }
@Bean public CompositeItemProcessor<Customer, Customer> itemProcessor() throws Exception { List<ItemProcessor<Customer, Customer>> delegates = new ArrayList<>(2); delegates.add(new FilteringItemProcessor()); delegates.add(new UpperCaseItemProcessor()); CompositeItemProcessor<Customer, Customer> compositeItemProcessor = new CompositeItemProcessor<>(); compositeItemProcessor.setDelegates(delegates); compositeItemProcessor.afterPropertiesSet(); return compositeItemProcessor; }