001 package com.mockrunner.jms;
002
003 import java.util.ArrayList;
004 import java.util.Collections;
005 import java.util.List;
006
007 import javax.jms.JMSException;
008 import javax.jms.MessageProducer;
009
010 import com.mockrunner.mock.jms.MockConnection;
011 import com.mockrunner.mock.jms.MockMessageProducer;
012 import com.mockrunner.mock.jms.MockQueueSender;
013 import com.mockrunner.mock.jms.MockSession;
014 import com.mockrunner.mock.jms.MockTopicPublisher;
015
016 /**
017 * This class is used to create generic producers that are not
018 * associated with a destination.
019 * If you create a <code>MessageProducer</code> with a <code>null</code>
020 * destination, this class is used to create a <code>MessageProducer</code>
021 * which is not associated with any destination.
022 * If the session used to create the producer is a <code>QueueSession</code>,
023 * you'll get a <code>QueueSender</code>. For a <code>TopicSession</code>,
024 * you'll get a <code>TopicPublisher</code>. For a generic session,
025 * you'll get a generic instance of <code>MessageProducer</code>.
026 */
027 public class GenericTransmissionManager
028 {
029 private MockConnection connection;
030 private MockSession session;
031 private List messageProducerList;
032
033 public GenericTransmissionManager(MockConnection connection, MockSession session)
034 {
035 this.connection = connection;
036 this.session = session;
037 messageProducerList = new ArrayList();
038 }
039
040 /**
041 * Closes all producers.
042 */
043 public void closeAll()
044 {
045 closeAllMessageProducers();
046 }
047
048 /**
049 * Closes all producers.
050 */
051 public void closeAllMessageProducers()
052 {
053 for(int ii = 0; ii < messageProducerList.size(); ii++)
054 {
055 MessageProducer producer = (MessageProducer)messageProducerList.get(ii);
056 try
057 {
058 producer.close();
059 }
060 catch(JMSException exc)
061 {
062
063 }
064 }
065 }
066
067 /**
068 * Creates a new <code>MessageProducer</code>.
069 * @return the created <code>MessageProducer</code>
070 */
071 public MockMessageProducer createMessageProducer()
072 {
073 MockMessageProducer producer = new MockMessageProducer(connection, session, null);
074 messageProducerList.add(producer);
075 return producer;
076 }
077
078 /**
079 * Creates a new <code>QueueSender</code>.
080 * @return the created <code>QueueSender</code>
081 */
082 public MockQueueSender createQueueSender()
083 {
084 MockQueueSender producer = new MockQueueSender(connection, session, null);
085 messageProducerList.add(producer);
086 return producer;
087 }
088
089 /**
090 * Creates a new <code>TopicPublisher</code>.
091 * @return the created <code>TopicPublisher</code>
092 */
093 public MockTopicPublisher createTopicPublisher()
094 {
095 MockTopicPublisher producer = new MockTopicPublisher(connection, session, null);
096 messageProducerList.add(producer);
097 return producer;
098 }
099
100 /**
101 * Returns a <code>MessageProducer</code> by its index or
102 * <code>null</code>, if no such <code>MessageProducer</code> is
103 * present.
104 * @param index the index of the <code>MessageProducer</code>
105 * @return the <code>MessageProducer</code>
106 */
107 public MockMessageProducer getMessageProducer(int index)
108 {
109 if(messageProducerList.size() <= index || index < 0) return null;
110 return (MockMessageProducer)messageProducerList.get(index);
111 }
112
113 /**
114 * Returns the list of all <code>MessageProducer</code> objects.
115 * @return the list of <code>MessageProducer</code> objects
116 */
117 public List getMessageProducerList()
118 {
119 return Collections.unmodifiableList(messageProducerList);
120 }
121 }