From fcdc916c729ccdb20e804bf1be7ea1fdc1435ea3 Mon Sep 17 00:00:00 2001 From: Glenn Renfro Date: Tue, 27 Jun 2017 14:30:44 -0400 Subject: [PATCH] Added AmqpItemWriterBuilder resolves BATCH-2626 --- .../amqp/builder/AmqpItemWriterBuilder.java | 58 ++++++++++++++++++ .../builder/AmqpItemWriterBuilderTests.java | 59 +++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 spring-batch-infrastructure/src/main/java/org/springframework/batch/item/amqp/builder/AmqpItemWriterBuilder.java create mode 100644 spring-batch-infrastructure/src/test/java/org/springframework/batch/item/amqp/builder/AmqpItemWriterBuilderTests.java diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/amqp/builder/AmqpItemWriterBuilder.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/amqp/builder/AmqpItemWriterBuilder.java new file mode 100644 index 000000000..83afd0d6a --- /dev/null +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/amqp/builder/AmqpItemWriterBuilder.java @@ -0,0 +1,58 @@ +/* + * Copyright 2017 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.amqp.builder; + +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.batch.item.amqp.AmqpItemWriter; +import org.springframework.util.Assert; + +/** + * A builder implementation for the {@link AmqpItemWriter} + * @author Glenn Renfro + * @since 4.0 + * @see AmqpItemWriter + */ +public class AmqpItemWriterBuilder { + + private AmqpTemplate amqpTemplate; + + /** + * Establish the amqpTemplate to be used by the AmqpItemWriter. + * @param amqpTemplate the template to be used. + * @return this instance for method chaining + * @see AmqpItemWriter#AmqpItemWriter(AmqpTemplate) + */ + public AmqpItemWriterBuilder amqpTemplate(AmqpTemplate amqpTemplate) { + this.amqpTemplate = amqpTemplate; + + return this; + } + + /** + * Validates and builds a {@link AmqpItemWriter}. + * + * @return a {@link AmqpItemWriter} + */ + public AmqpItemWriter build() { + Assert.notNull(this.amqpTemplate, "amqpTemplate is required."); + + AmqpItemWriter writer = new AmqpItemWriter<>(this.amqpTemplate); + + return writer; + } + +} diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/amqp/builder/AmqpItemWriterBuilderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/amqp/builder/AmqpItemWriterBuilderTests.java new file mode 100644 index 000000000..b062d8d42 --- /dev/null +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/amqp/builder/AmqpItemWriterBuilderTests.java @@ -0,0 +1,59 @@ +/* + * Copyright 2017 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.amqp.builder; + +import java.util.Arrays; + +import org.junit.Test; + +import org.springframework.amqp.core.AmqpTemplate; +import org.springframework.amqp.core.Message; +import org.springframework.batch.item.amqp.AmqpItemWriter; + +import static org.aspectj.bridge.MessageUtil.fail; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +/** + * @author Glenn Renfro + */ +public class AmqpItemWriterBuilderTests { + + @Test + public void testNullAmqpTemplate() { + try { + new AmqpItemWriterBuilder().build(); + fail("IllegalArgumentException should have been thrown"); + } + catch (IllegalArgumentException iae) { + assertEquals("IllegalArgumentException message did not match the expected result.", + "amqpTemplate is required.", iae.getMessage()); + } + } + + @Test + public void voidTestWrite() throws Exception { + AmqpTemplate amqpTemplate = mock(AmqpTemplate.class); + + AmqpItemWriter amqpItemWriter = + new AmqpItemWriterBuilder().amqpTemplate(amqpTemplate).build(); + amqpItemWriter.write(Arrays.asList("foo", "bar")); + verify(amqpTemplate).convertAndSend("foo"); + verify(amqpTemplate).convertAndSend("bar"); + } +}