From a7afdd7be6280406ecff2f6250f44a6c44f0abd1 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Tue, 4 May 2010 16:28:20 +0000 Subject: [PATCH] INT-8 refactored single claim check transformer into separate in/out implementations --- ...rmer.java => ClaimCheckInTransformer.java} | 34 ++++------- .../transformer/ClaimCheckOutTransformer.java | 60 +++++++++++++++++++ .../ClaimCheckTransformerTests.java | 6 +- 3 files changed, 73 insertions(+), 27 deletions(-) rename org.springframework.integration/src/main/java/org/springframework/integration/transformer/{ClaimCheckTransformer.java => ClaimCheckInTransformer.java} (65%) create mode 100644 org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckOutTransformer.java diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckTransformer.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckInTransformer.java similarity index 65% rename from org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckTransformer.java rename to org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckInTransformer.java index a2fb3f804d..5a3a72bfe4 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckTransformer.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckInTransformer.java @@ -16,23 +16,27 @@ package org.springframework.integration.transformer; -import java.util.UUID; - import org.springframework.integration.core.Message; import org.springframework.integration.message.MessageBuilder; import org.springframework.integration.store.MessageStore; import org.springframework.util.Assert; /** + * Transformer that stores a Message and returns a new Message whose payload + * is the id of the stored Message. + * * @author Mark Fisher * @since 2.0 */ -public class ClaimCheckTransformer extends AbstractTransformer { +public class ClaimCheckInTransformer extends AbstractTransformer { private final MessageStore messageStore; - public ClaimCheckTransformer(MessageStore messageStore) { + /** + * Create a claim check-in transformer that will delegate to the provided MessageStore. + */ + public ClaimCheckInTransformer(MessageStore messageStore) { Assert.notNull(messageStore, "MessageStore must not be null"); this.messageStore = messageStore; } @@ -43,29 +47,11 @@ public class ClaimCheckTransformer extends AbstractTransformer { Assert.notNull(message, "message must not be null"); Object payload = message.getPayload(); Assert.notNull(payload, "payload must not be null"); - MessageBuilder responseBuilder = null; - if (payload instanceof UUID) { - Message original = this.retrieveMessage((UUID) payload); - responseBuilder = MessageBuilder.fromMessage(original); - } - else { - this.storeMessage(message); - responseBuilder = MessageBuilder.withPayload(message.getHeaders().getId()); - } + Message storedMessage = this.messageStore.addMessage(message); + MessageBuilder responseBuilder = MessageBuilder.withPayload(storedMessage.getHeaders().getId()); // headers on the 'current' message take precedence responseBuilder.copyHeaders(message.getHeaders()); return responseBuilder.build(); } - - private Message retrieveMessage(UUID id) { - Message result = this.messageStore.getMessage(id); - Assert.notNull(result, "unable to locate Message for claim check ID: " + id); - return result; - } - - private void storeMessage(Message message) { - this.messageStore.addMessage(message); - } - } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckOutTransformer.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckOutTransformer.java new file mode 100644 index 0000000000..ebc44bb529 --- /dev/null +++ b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/ClaimCheckOutTransformer.java @@ -0,0 +1,60 @@ +/* + * Copyright 2002-2010 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.integration.transformer; + +import java.util.UUID; + +import org.springframework.integration.core.Message; +import org.springframework.integration.message.MessageBuilder; +import org.springframework.integration.store.MessageStore; +import org.springframework.util.Assert; + +/** + * Transformer that accepts a Message whose payload is a UUID and retrieves the + * Message associated with that id from a MessageStore if available (else null). + * + * @author Mark Fisher + * @since 2.0 + */ +public class ClaimCheckOutTransformer extends AbstractTransformer { + + private final MessageStore messageStore; + + + /** + * Create a claim check-out transformer that will delegate to the provided MessageStore. + */ + public ClaimCheckOutTransformer(MessageStore messageStore) { + Assert.notNull(messageStore, "MessageStore must not be null"); + this.messageStore = messageStore; + } + + + @Override + protected Object doTransform(Message message) throws Exception { + Assert.notNull(message, "message must not be null"); + Assert.isTrue(message.getPayload() instanceof UUID, "payload must be a UUID"); + UUID id = (UUID) message.getPayload(); + Message retrievedMessage = this.messageStore.getMessage(id); + Assert.notNull(retrievedMessage, "unable to locate Message for ID: " + id); + MessageBuilder responseBuilder = MessageBuilder.fromMessage(retrievedMessage); + // headers on the 'current' message take precedence + responseBuilder.copyHeaders(message.getHeaders()); + return responseBuilder.build(); + } + +} diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/ClaimCheckTransformerTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/ClaimCheckTransformerTests.java index e1e2d0773f..3080cd090a 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/ClaimCheckTransformerTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/ClaimCheckTransformerTests.java @@ -36,7 +36,7 @@ public class ClaimCheckTransformerTests { @Test public void store() { MessageStore store = new SimpleMessageStore(10); - ClaimCheckTransformer transformer = new ClaimCheckTransformer(store); + ClaimCheckInTransformer transformer = new ClaimCheckInTransformer(store); Message input = MessageBuilder.withPayload("test").build(); Message output = transformer.transform(input); assertEquals(input.getHeaders().getId(), output.getPayload()); @@ -48,7 +48,7 @@ public class ClaimCheckTransformerTests { Message message = MessageBuilder.withPayload("test").build(); UUID storedId = message.getHeaders().getId(); store.addMessage(message); - ClaimCheckTransformer transformer = new ClaimCheckTransformer(store); + ClaimCheckOutTransformer transformer = new ClaimCheckOutTransformer(store); Message input = MessageBuilder.withPayload(storedId).build(); Message output = transformer.transform(input); assertEquals("test", output.getPayload()); @@ -57,7 +57,7 @@ public class ClaimCheckTransformerTests { @Test(expected = MessageTransformationException.class) public void unknown() { MessageStore store = new SimpleMessageStore(10); - ClaimCheckTransformer transformer = new ClaimCheckTransformer(store); + ClaimCheckOutTransformer transformer = new ClaimCheckOutTransformer(store); transformer.transform(MessageBuilder.withPayload(UUID.randomUUID()).build()); }