made the 'determineTargetChannels' private in AbstractMessageRouter

This commit is contained in:
Mark Fisher
2010-11-10 08:23:35 -05:00
parent 9aad89a7c0
commit 0a82438e2e
2 changed files with 26 additions and 25 deletions

View File

@@ -57,7 +57,7 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
private volatile boolean applySequence;
private final MessagingTemplate messagingTemplate = new MessagingTemplate();
private volatile String prefix;
private volatile String suffix;
@@ -65,9 +65,10 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
private volatile ChannelResolver channelResolver;
private volatile boolean ignoreChannelNameResolutionFailures;
protected volatile Map<String, String> channelIdentifierMap = new ConcurrentHashMap<String, String>();
/**
* Specify the {@link ChannelResolver} strategy to use.
* The default is a BeanFactoryChannelResolver.
@@ -98,6 +99,7 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
public void setIgnoreChannelNameResolutionFailures(boolean ignoreChannelNameResolutionFailures) {
this.ignoreChannelNameResolutionFailures = ignoreChannelNameResolutionFailures;
}
/**
* Allows you to set the map which will map channel identifiers to channel names.
* Channel names will be resolve via {@link ChannelResolver}
@@ -107,10 +109,11 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
this.channelIdentifierMap.clear();
this.channelIdentifierMap.putAll(channelIdentifierMap);
}
public void setChannelMapping(String channelIdentifier, String channelName){
this.channelIdentifierMap.put(channelIdentifier, channelName);
}
/**
* Removes channel mapping for a give channel identifier
* @param channelIdentifier
@@ -175,7 +178,7 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
protected MessagingTemplate getMessagingTemplate() {
return this.messagingTemplate;
}
@Override
public void onInit() {
BeanFactory beanFactory = this.getBeanFactory();
@@ -183,26 +186,28 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
this.channelResolver = new BeanFactoryChannelResolver(beanFactory);
}
}
protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
private Collection<MessageChannel> determineTargetChannels(Message<?> message) {
this.afterPropertiesSet();
Collection<MessageChannel> channels = new ArrayList<MessageChannel>();
Collection<Object> channelsReturned = this.getChannelIndicatorList(message);
addToCollection(channels, channelsReturned, message);
return channels;
}
protected ConversionService getRequiredConversionService() {
if (this.getConversionService() == null) {
this.setConversionService(ConversionServiceFactory.createDefaultConversionService());
}
return this.getConversionService();
}
/**
* Subclasses must implement this method to return the channel indicators.
* Subclasses must implement this method to return the channel identifiers.
*/
protected abstract List<Object> getChannelIndicatorList(Message<?> message);
@Override
protected void handleMessageInternal(Message<?> message) {
boolean sent = false;
@@ -259,7 +264,7 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
}
return channel;
}
private void addChannelFromString(Collection<MessageChannel> channels, String channelIdentifier, Message<?> message) {
if (channelIdentifier.indexOf(',') != -1) {
for (String name : StringUtils.commaDelimitedListToStringArray(channelIdentifier)) {
@@ -278,10 +283,9 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
* to 'channelName' (e.g., PTR, EMETR)
*/
String channelName = channelIdentifier;
if (!CollectionUtils.isEmpty(channelIdentifierMap) && channelIdentifierMap.containsKey(channelIdentifier)){
if (!CollectionUtils.isEmpty(channelIdentifierMap) && channelIdentifierMap.containsKey(channelIdentifier)) {
channelName = channelIdentifierMap.get(channelIdentifier);
}
if (this.channelResolver != null){
MessageChannel channel = resolveChannelForName(channelName, message);
if (channel != null) {
@@ -289,7 +293,7 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
}
}
}
private void addToCollection(Collection<MessageChannel> channels, Collection<?> channelIndicators, Message<?> message) {
if (channelIndicators == null) {
return;
@@ -325,4 +329,5 @@ public abstract class AbstractMessageRouter extends AbstractMessageHandler {
}
}
}
}

View File

@@ -28,7 +28,6 @@ import java.util.concurrent.ConcurrentHashMap;
import org.junit.Test;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.MessageHandlingException;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.message.GenericMessage;
@@ -57,20 +56,17 @@ public class PayloadTypeRouterTests {
Message<String> message1 = new GenericMessage<String>("test");
Message<Integer> message2 = new GenericMessage<Integer>(123);
assertEquals(1, router.determineTargetChannels(message1).size());
MessageChannel result1 = router.determineTargetChannels(message1).iterator().next();
assertEquals(1, router.determineTargetChannels(message2).size());
MessageChannel result2 = router.determineTargetChannels(message2).iterator().next();
assertEquals(1, router.getChannelIndicatorList(message1).size());
assertEquals("stringChannel", router.getChannelIndicatorList(message1).iterator().next());
assertEquals(1, router.getChannelIndicatorList(message2).size());
assertEquals("integerChannel", router.getChannelIndicatorList(message2).iterator().next());
assertEquals(stringChannel, result1);
assertEquals(integerChannel, result2);
// validate dynamics
QueueChannel newChannel = new QueueChannel();
beanFactory.registerSingleton("newChannel", newChannel);
router.setChannelMapping(String.class.getName(), "newChannel");
assertEquals(1, router.determineTargetChannels(message1).size());
result1 = router.determineTargetChannels(message1).iterator().next();
assertEquals(newChannel, result1);
assertEquals(1, router.getChannelIndicatorList(message1).size());
assertEquals("newChannel", router.getChannelIndicatorList(message1).iterator().next());
// validate nothing happens if mappings were removed and resolutionRequires = false
router.removeChannelMapping(String.class.getName());
router.removeChannelMapping(Integer.class.getName());
@@ -112,7 +108,7 @@ public class PayloadTypeRouterTests {
QueueChannel newChannel = new QueueChannel();
beanFactory.registerSingleton("newChannel", newChannel);
router.setChannelMapping(Integer.class.getName(), "newChannel");
assertEquals(1, router.determineTargetChannels(message).size());
assertEquals(1, router.getChannelIndicatorList(message).size());
router.handleMessage(message);
result = newChannel.receive(10);
assertNotNull(result);
@@ -212,7 +208,7 @@ public class PayloadTypeRouterTests {
QueueChannel newChannel = new QueueChannel();
beanFactory.registerSingleton("newChannel", newChannel);
router.setChannelMapping(Integer.class.getName(), "newChannel");
assertEquals(1, router.determineTargetChannels(message).size());
assertEquals(1, router.getChannelIndicatorList(message).size());
router.handleMessage(message);
result = newChannel.receive(10);
assertNotNull(result);