001 package com.mockrunner.jms;
002
003 import java.io.Serializable;
004 import java.util.ArrayList;
005 import java.util.List;
006
007 import com.mockrunner.mock.jms.MockMessageConsumer;
008 import com.mockrunner.mock.jms.MockMessageProducer;
009 import com.mockrunner.mock.jms.MockQueueSender;
010 import com.mockrunner.mock.jms.MockTopicPublisher;
011
012 /**
013 * A wrapper around {@link QueueTransmissionManager} and
014 * {@link TopicTransmissionManager} and {@link GenericTransmissionManager}.
015 * Can be used to access all senders, publishers, receivers and subscribers
016 * transparently.
017 */
018 public class TransmissionManagerWrapper implements Serializable
019 {
020 private QueueTransmissionManager queueManager;
021 private TopicTransmissionManager topicManager;
022 private GenericTransmissionManager genericManager;
023
024 public TransmissionManagerWrapper(QueueTransmissionManager queueManager, TopicTransmissionManager topicManager, GenericTransmissionManager genericManager)
025 {
026 this.queueManager = queueManager;
027 this.topicManager = topicManager;
028 this.genericManager = genericManager;
029 }
030
031 /**
032 * Returns the underlying {@link QueueTransmissionManager}.
033 * @return the {@link QueueTransmissionManager}
034 */
035 public QueueTransmissionManager getQueueTransmissionManager()
036 {
037 return queueManager;
038 }
039
040 /**
041 * Returns the underlying {@link TopicTransmissionManager}.
042 * @return the {@link TopicTransmissionManager}
043 */
044 public TopicTransmissionManager getTopicTransmissionManager()
045 {
046 return topicManager;
047 }
048
049 /**
050 * Returns the underlying {@link GenericTransmissionManager}.
051 * @return the {@link GenericTransmissionManager}
052 */
053 public GenericTransmissionManager getGenericTransmissionManager()
054 {
055 return genericManager;
056 }
057
058 /**
059 * Returns the {@link com.mockrunner.mock.jms.MockMessageProducer} object
060 * with the specified index or <code>null</code>, if no such
061 * {@link com.mockrunner.mock.jms.MockMessageProducer} exists.
062 * @param index the index
063 * @return the {@link com.mockrunner.mock.jms.MockMessageProducer} object
064 */
065 public MockMessageProducer getMessageProducer(int index)
066 {
067 List messageProducerList = getMessageProducerList();
068 if(messageProducerList.size() <= index || index < 0) return null;
069 return (MockMessageProducer)messageProducerList.get(index);
070 }
071
072 /**
073 * Returns a list of all producer objects.
074 * @return the list of {@link com.mockrunner.mock.jms.MockMessageProducer} objects
075 */
076 public List getMessageProducerList()
077 {
078 List resultList = new ArrayList();
079 resultList.addAll(queueManager.getQueueSenderList());
080 resultList.addAll(topicManager.getTopicPublisherList());
081 resultList.addAll(genericManager.getMessageProducerList());
082 return resultList;
083 }
084
085 /**
086 * Returns a list of all queue senders, i.e. all producer objects,
087 * that are an instance of <code>QueueSender</code>. In
088 * contrast to {@link QueueTransmissionManager#getQueueSenderList},
089 * this methods also includes the senders that were created without
090 * specifying an explicit queue (these senders are collected using
091 * {@link GenericTransmissionManager}).
092 * @return the list of {@link com.mockrunner.mock.jms.MockQueueSender} objects
093 */
094 public List getQueueSenderList()
095 {
096 List resultList = new ArrayList();
097 resultList.addAll(queueManager.getQueueSenderList());
098 List genericList = genericManager.getMessageProducerList();
099 for(int ii = 0; ii < genericList.size(); ii++)
100 {
101 Object next = genericList.get(ii);
102 if(next instanceof MockQueueSender)
103 {
104 resultList.add(next);
105 }
106 }
107 return resultList;
108 }
109
110 /**
111 * Returns the {@link com.mockrunner.mock.jms.MockQueueSender} object
112 * with the specified index or <code>null</code>, if no such
113 * {@link com.mockrunner.mock.jms.MockQueueSender} exists.
114 * In contrast to {@link QueueTransmissionManager#getQueueSender},
115 * this methods also recognizes the senders that were created without
116 * specifying an explicit queue (these senders are collected using
117 * {@link GenericTransmissionManager}).
118 * @param index the index
119 * @return the {@link com.mockrunner.mock.jms.MockQueueSender} object
120 */
121 public MockQueueSender getQueueSender(int index)
122 {
123 List queueSenderList = getQueueSenderList();
124 if(queueSenderList.size() <= index || index < 0) return null;
125 return (MockQueueSender)queueSenderList.get(index);
126 }
127
128 /**
129 * Returns a list of all topic publishers, i.e. all producer objects,
130 * that are an instance of <code>TopicPublisher</code>. In
131 * contrast to {@link TopicTransmissionManager#getTopicPublisherList},
132 * this methods also includes the publishers that were created without
133 * specifying an explicit topic (these publishers are collected using
134 * {@link GenericTransmissionManager}).
135 * @return the list of {@link com.mockrunner.mock.jms.MockTopicPublisher} objects
136 */
137 public List getTopicPublisherList()
138 {
139 List resultList = new ArrayList();
140 resultList.addAll(topicManager.getTopicPublisherList());
141 List genericList = genericManager.getMessageProducerList();
142 for(int ii = 0; ii < genericList.size(); ii++)
143 {
144 Object next = genericList.get(ii);
145 if(next instanceof MockTopicPublisher)
146 {
147 resultList.add(next);
148 }
149 }
150 return resultList;
151 }
152
153 /**
154 * Returns the {@link com.mockrunner.mock.jms.MockTopicPublisher} object
155 * with the specified index or <code>null</code>, if no such
156 * {@link com.mockrunner.mock.jms.MockTopicPublisher} exists.
157 * In contrast to {@link TopicTransmissionManager#getTopicPublisher},
158 * this methods also recognizes the publishers that were created without
159 * specifying an explicit queue (these publishers are collected using
160 * {@link GenericTransmissionManager}).
161 * @param index the index
162 * @return the {@link com.mockrunner.mock.jms.MockTopicPublisher} object
163 */
164 public MockTopicPublisher getTopicPublisher(int index)
165 {
166 List topicPublisherList = getTopicPublisherList();
167 if(topicPublisherList.size() <= index || index < 0) return null;
168 return (MockTopicPublisher)topicPublisherList.get(index);
169 }
170
171 /**
172 * Returns the {@link com.mockrunner.mock.jms.MockMessageConsumer} object
173 * with the specified index or <code>null</code>, if no such
174 * {@link com.mockrunner.mock.jms.MockMessageConsumer} exists.
175 * @param index the index
176 * @return the {@link com.mockrunner.mock.jms.MockMessageConsumer} object
177 */
178 public MockMessageConsumer getMessageConsumer(int index)
179 {
180 List messageConsumerList = getMessageConsumerList();
181 if(messageConsumerList.size() <= index || index < 0) return null;
182 return (MockMessageConsumer)messageConsumerList.get(index);
183 }
184
185 /**
186 * Returns a list of all consumer objects. Includes durable subscribers.
187 * @return the list of {@link com.mockrunner.mock.jms.MockMessageConsumer} objects
188 */
189 public List getMessageConsumerList()
190 {
191 List resultList = new ArrayList();
192 resultList.addAll(queueManager.getQueueReceiverList());
193 resultList.addAll(topicManager.getTopicSubscriberList());
194 resultList.addAll(topicManager.getDurableTopicSubscriberMap().values());
195 return resultList;
196 }
197 }