package com.mossle.simulator.jms; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.jms.Message; public class MemoryMessageHandler extends DefaultMessageHandler { private Map<String, List<Message>> queueMessages = new HashMap<String, List<Message>>(); private Map<String, Map<String, List<Message>>> topicMessages = new HashMap<String, Map<String, List<Message>>>(); public void sendMessageToQueue(MessageContext messageContext, String name, Message message) { List<Message> list = queueMessages.get(name); if (list == null) { list = new ArrayList<Message>(); queueMessages.put(name, list); } list.add(message); } public void sendMessageToTopic(MessageContext messageContext, String name, Message message) { Map<String, List<Message>> consumerMap = topicMessages.get(name); if (consumerMap == null) { return; } for (List<Message> list : consumerMap.values()) { if (list == null) { continue; } list.add(message); } } public Message consumeMessageFromQueue(MessageContext messageContext, String name) { List<Message> list = queueMessages.get(name); if (list == null) { return null; } if (list.isEmpty()) { return null; } return list.remove(0); } public Message consumeMessageFromTopic(MessageContext messageContext, String name, String consumerName) { Map<String, List<Message>> consumerMap = topicMessages.get(name); if (consumerMap == null) { return null; } List<Message> list = consumerMap.get(consumerName); if (list == null) { return null; } if (list.isEmpty()) { return null; } return list.remove(0); } public void registerToTopic(String topicName, String consumerName) { Map<String, List<Message>> consumerMap = topicMessages.get(topicName); if (consumerMap == null) { consumerMap = new HashMap<String, List<Message>>(); topicMessages.put(topicName, consumerMap); } if (!consumerMap.containsKey(consumerName)) { consumerMap.put(consumerName, new ArrayList<Message>()); } } public void unregisterFromTopic(String topicName, String consumerName) { Map<String, List<Message>> consumerMap = topicMessages.get(topicName); if (consumerMap == null) { return; } if (consumerMap.containsKey(consumerName)) { consumerMap.remove(consumerMap); } } }