001    package com.mockrunner.jms;
002    
003    import java.io.Serializable;
004    import java.util.HashMap;
005    import java.util.Map;
006    
007    import com.mockrunner.mock.jms.MockQueue;
008    import com.mockrunner.mock.jms.MockTopic;
009    
010    /**
011     * The <code>DestinationManager</code> can be used
012     * to create queues and topics, which is normally an 
013     * administrative act. Since queues and topics are ususally
014     * acquired using JNDI in a J2EE environment, you can bind
015     * the created objects to the mock context with the help
016     * of {@link com.mockrunner.ejb.EJBTestModule#bindToContext}.
017     */
018    public class DestinationManager implements Serializable
019    {
020        private Map queues;
021        private Map topics;
022    
023        public DestinationManager()
024        {
025            queues = new HashMap();
026            topics = new HashMap();
027        }
028    
029        /**
030         * Creates a new <code>Queue</code> that is available
031         * for {@link com.mockrunner.mock.jms.MockQueueSession#createQueue}
032         * calls. Creating queues is an administrative act.
033         * Before {@link com.mockrunner.mock.jms.MockQueueSession#createQueue}
034         * can be sucessfully called, you have to create a <code>Queue</code>
035         * with this method. You can also bind the created queue to the
036         * mock JNDI context using {@link com.mockrunner.ejb.EJBTestModule#bindToContext}.
037         * @param name the name of the <code>Queue</code>
038         * @return the created <code>Queue</code>
039         */
040        public MockQueue createQueue(String name)
041        {
042            MockQueue queue = new MockQueue(name);
043            queues.put(name, queue);
044            return queue;
045        }
046    
047        /**
048         * Removes a formerly created <code>Queue</code>.
049         * @param name the name of the <code>Queue</code>
050         */
051        public void removeQueue(String name)
052        {
053            queues.remove(name);
054        }
055    
056        /**
057         * Returns a <code>Queue</code> that was created with
058         * {@link #createQueue} or <code>null</code> if no such
059         * <code>Queue</code> is present.
060         * @param name the name of the <code>Queue</code>
061         * @return the <code>Queue</code>
062         */
063        public MockQueue getQueue(String name)
064        {
065            return (MockQueue)queues.get(name);
066        }
067        
068        /**
069         * Creates a new <code>Topic</code> that is available
070         * for {@link com.mockrunner.mock.jms.MockTopicSession#createTopic}
071         * calls. Creating topics is an administrative act.
072         * Before {@link com.mockrunner.mock.jms.MockTopicSession#createTopic}
073         * can be sucessfully called, you have to create a <code>Topic</code>
074         * with this method. You can also bind the created topic to the
075         * mock JNDI context using {@link com.mockrunner.ejb.EJBTestModule#bindToContext}.
076         * @param name the name of the <code>Topic</code>
077         * @return the created <code>Topic</code>
078         */
079        public MockTopic createTopic(String name)
080        {
081            MockTopic topic = new MockTopic(name);
082            topics.put(name, topic);
083            return topic;
084        }
085    
086        /**
087         * Removes a formerly created <code>Topic</code>.
088         * @param name the name of the <code>Topic</code>
089         */
090        public void removeTopic(String name)
091        {
092            topics.remove(name);
093        }
094    
095        /**
096         * Returns a <code>Topic</code> that was created with
097         * {@link #createTopic} or <code>null</code> if no such
098         * <code>Topic</code> is present.
099         * @param name the name of the <code>Topic</code>
100         * @return the <code>Topic</code>
101         */
102        public MockTopic getTopic(String name)
103        {
104            return (MockTopic)topics.get(name);
105        }
106    }