From 95e1230238f1e211b0857fd50ddd36b102390438 Mon Sep 17 00:00:00 2001 From: Iwein Fuld Date: Mon, 13 Sep 2010 22:06:56 +0200 Subject: [PATCH] QUALITY: Reorder code in AbstractMessageSplitter --- .../splitter/AbstractMessageSplitter.java | 84 +++++++++++-------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/splitter/AbstractMessageSplitter.java b/spring-integration-core/src/main/java/org/springframework/integration/splitter/AbstractMessageSplitter.java index 161c6c8b47..0aa6a116c6 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/splitter/AbstractMessageSplitter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/splitter/AbstractMessageSplitter.java @@ -25,7 +25,7 @@ import java.util.*; /** * Base class for Message-splitting handlers. - * + * * @author Mark Fisher * @author Dave Syer * @author Iwein Fuld @@ -43,51 +43,61 @@ public abstract class AbstractMessageSplitter extends AbstractReplyProducingMess } MessageHeaders headers = message.getHeaders(); Object incomingCorrelationId = headers.getCorrelationId(); - List incomingSequenceDetails = headers.get(SEQUENCE_DETAILS, List.class); - if (incomingCorrelationId != null) { - if (incomingSequenceDetails == null) { - incomingSequenceDetails = new ArrayList(); - } - else { - incomingSequenceDetails = new ArrayList(incomingSequenceDetails); - } - incomingSequenceDetails.add(new Object[] { - incomingCorrelationId, headers.getSequenceNumber(), headers.getSequenceSize() }); - incomingSequenceDetails = Collections.unmodifiableList(incomingSequenceDetails); - } + List incomingSequenceDetails = extractSequenceDetails(headers, incomingCorrelationId); Object correlationId = headers.getId(); - List> messageBuilders = new ArrayList>(); + List messageBuilders; if (result instanceof Collection) { - Collection items = (Collection) result; - //TODO put this return statement in a more obvious place - if(items.isEmpty()){ - return null; - } - int sequenceNumber = 0; - int sequenceSize = items.size(); - for (Object item : items) { - messageBuilders.add(this.createBuilder( - item, incomingSequenceDetails, correlationId, ++sequenceNumber, sequenceSize)); - } + messageBuilders = messageBuildersForCollection(result, incomingSequenceDetails, correlationId); + } else if (result.getClass().isArray()) { + messageBuilders = messageBuildersForArray(result, incomingSequenceDetails, correlationId); + } else { + messageBuilders = Collections.singletonList(this.createBuilder(result, incomingSequenceDetails, correlationId, 1, 1)); } - else if (result.getClass().isArray()) { - Object[] items = (Object[]) result; - int sequenceNumber = 0; - int sequenceSize = items.length; - for (Object item : items) { - messageBuilders.add(this.createBuilder( - item, incomingSequenceDetails, correlationId, ++sequenceNumber, sequenceSize)); - } - } - else { - messageBuilders.add(this.createBuilder(result, incomingSequenceDetails, correlationId, 1, 1)); + return messageBuilders.isEmpty() ? null : messageBuilders; + } + + private List messageBuildersForArray(Object result, List incomingSequenceDetails, Object correlationId) { + List messageBuilders = new ArrayList(); + Object[] items = (Object[]) result; + int sequenceNumber = 0; + int sequenceSize = items.length; + for (Object item : items) { + messageBuilders.add(this.createBuilder( + item, incomingSequenceDetails, correlationId, ++sequenceNumber, sequenceSize)); } return messageBuilders; } + private List messageBuildersForCollection(Object result, List incomingSequenceDetails, Object correlationId) { + List messageBuilders = new ArrayList(); + Collection items = (Collection) result; + int sequenceNumber = 0; + int sequenceSize = items.size(); + for (Object item : items) { + messageBuilders.add(this.createBuilder( + item, incomingSequenceDetails, correlationId, ++sequenceNumber, sequenceSize)); + } + return messageBuilders; + } + + private List extractSequenceDetails(MessageHeaders headers, Object incomingCorrelationId) { + List incomingSequenceDetails = headers.get(SEQUENCE_DETAILS, List.class); + if (incomingCorrelationId != null) { + if (incomingSequenceDetails == null) { + incomingSequenceDetails = new ArrayList(); + } else { + incomingSequenceDetails = new ArrayList(incomingSequenceDetails); + } + incomingSequenceDetails.add(new Object[]{ + incomingCorrelationId, headers.getSequenceNumber(), headers.getSequenceSize()}); + incomingSequenceDetails = Collections.unmodifiableList(incomingSequenceDetails); + } + return incomingSequenceDetails; + } + @SuppressWarnings({"unchecked", "rawtypes"}) private MessageBuilder createBuilder(Object item, List incomingSequenceDetails, Object correlationId, - int sequenceNumber, int sequenceSize) { + int sequenceNumber, int sequenceSize) { MessageBuilder builder = (item instanceof Message) ? MessageBuilder.fromMessage((Message) item) : MessageBuilder.withPayload(item); builder.setCorrelationId(correlationId).setSequenceNumber(sequenceNumber).setSequenceSize(sequenceSize)