From 6c55a09554c878a49c2137e9bfe9d464f6916cee Mon Sep 17 00:00:00 2001 From: dsyer Date: Tue, 12 May 2009 10:42:23 +0000 Subject: [PATCH] RESOLVED - issue BATCH-1238: Add ItemProcessorAdapter similar to Item*Adapter --- .../item/adapter/ItemProcessorAdapter.java | 38 +++++++++++++++++++ .../adapter/ItemProcessorAdapterTests.java | 30 +++++++++++++++ .../batch/item/sample/FooService.java | 5 +++ .../adapter/delegating-item-processor.xml | 12 ++++++ 4 files changed, 85 insertions(+) create mode 100644 spring-batch-infrastructure/src/main/java/org/springframework/batch/item/adapter/ItemProcessorAdapter.java create mode 100644 spring-batch-infrastructure/src/test/java/org/springframework/batch/item/adapter/ItemProcessorAdapterTests.java create mode 100644 spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/adapter/delegating-item-processor.xml diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/adapter/ItemProcessorAdapter.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/adapter/ItemProcessorAdapter.java new file mode 100644 index 000000000..aa58f456e --- /dev/null +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/adapter/ItemProcessorAdapter.java @@ -0,0 +1,38 @@ +/* + * Copyright 2006-2007 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.batch.item.adapter; + +import org.springframework.batch.item.ItemProcessor; + +/** + * Invokes a custom method on a delegate plain old Java object which itself + * processes an item. + * + * @author Dave Syer + */ +public class ItemProcessorAdapter extends AbstractMethodInvokingDelegator implements ItemProcessor { + + /** + * Invoke the delegate method and return the result. + * + * @see ItemProcessor#process(Object) + */ + public O process(I item) throws Exception { + return invokeDelegateMethodWithArgument(item); + } + +} diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/adapter/ItemProcessorAdapterTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/adapter/ItemProcessorAdapterTests.java new file mode 100644 index 000000000..be3379c22 --- /dev/null +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/adapter/ItemProcessorAdapterTests.java @@ -0,0 +1,30 @@ +package org.springframework.batch.item.adapter; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.batch.item.sample.Foo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * Tests for {@link ItemProcessorAdapter}. + * + * @author Dave Syer + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = "delegating-item-processor.xml") +public class ItemProcessorAdapterTests { + + @Autowired + private ItemProcessorAdapter processor; + + @Test + public void testProcess() throws Exception { + Foo item = new Foo(0,"foo",1); + assertEquals("foo", processor.process(item)); + } + +} diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/sample/FooService.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/sample/FooService.java index 2b616a788..dd357aec1 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/sample/FooService.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/sample/FooService.java @@ -33,6 +33,11 @@ public class FooService { processedFoos.add(foo); } + public String extractName(Foo foo) { + processedFoos.add(foo); + return foo.getName(); + } + public void processNameValuePair(String name, int value) { processedFooNameValuePairs.add(new Foo(0, name, value)); } diff --git a/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/adapter/delegating-item-processor.xml b/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/adapter/delegating-item-processor.xml new file mode 100644 index 000000000..8a9a14a1a --- /dev/null +++ b/spring-batch-infrastructure/src/test/resources/org/springframework/batch/item/adapter/delegating-item-processor.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + \ No newline at end of file