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    }