001    /** 
002     * 
003     * Copyright 2004 Protique Ltd
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * You may obtain a copy of the License at 
008     * 
009     * http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS, 
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
014     * See the License for the specific language governing permissions and 
015     * limitations under the License. 
016     * 
017     **/
018    
019    package org.activemq.message;
020    
021    import javax.jms.Destination;
022    import javax.jms.Topic;
023    
024    import org.activemq.management.JMSDestinationStats;
025    import org.activemq.management.JMSTopicStatsImpl;
026    
027    
028    /**
029     * A <CODE>Topic</CODE> object encapsulates a provider-specific topic name.
030     * It is the way a client specifies the identity of a topic to JMS API methods.
031     * For those methods that use a <CODE>Destination</CODE> as a parameter, a
032     * <CODE>Topic</CODE> object may used as an argument . For
033     * example, a Topic can be used to create a <CODE>MessageConsumer</CODE>
034     * and a <CODE>MessageProducer</CODE>
035     * by calling:
036     * <UL>
037     * <LI> <CODE>Session.CreateConsumer(Destination destination)</CODE>
038     * <LI> <CODE>Session.CreateProducer(Destination destination)</CODE>
039     * <p/>
040     * </UL>
041     * <p/>
042     * <P>Many publish/subscribe (pub/sub) providers group topics into hierarchies
043     * and provide various options for subscribing to parts of the hierarchy. The
044     * JMS API places no restriction on what a <CODE>Topic</CODE> object
045     * represents. It may be a leaf in a topic hierarchy, or it may be a larger
046     * part of the hierarchy.
047     * <p/>
048     * <P>The organization of topics and the granularity of subscriptions to
049     * them is an important part of a pub/sub application's architecture. The JMS
050     * API
051     * does not specify a policy for how this should be done. If an application
052     * takes advantage of a provider-specific topic-grouping mechanism, it
053     * should document this. If the application is installed using a different
054     * provider, it is the job of the administrator to construct an equivalent
055     * topic architecture and create equivalent <CODE>Topic</CODE> objects.
056     *
057     * @see javax.jms.Session#createConsumer(javax.jms.Destination)
058     * @see javax.jms.Session#createProducer(javax.jms.Destination)
059     * @see javax.jms.TopicSession#createTopic(String)
060     */
061    
062    public class ActiveMQTopic extends ActiveMQDestination implements Topic {
063    
064        private static final long serialVersionUID = -4243052759456351987L;
065    
066        /**
067         * Default constructor for an ActiveMQTopic Destination
068         */
069        public ActiveMQTopic() {
070            super();
071        }
072    
073        /**
074         * Construct a named ActiveMQTopic Destination
075         *
076         * @param name
077         */
078    
079        public ActiveMQTopic(String name) {
080            super(name);
081        }
082    
083        /**
084         * Gets the name of this Topic.
085         * <p/>
086         * <P>Clients that depend upon the name are not portable.
087         *
088         * @return the Topic name
089         */
090    
091        public String getTopicName() {
092            return super.getPhysicalName();
093        }
094    
095        /**
096         * @return Returns the Destination type
097         */
098    
099        public int getDestinationType() {
100            return ACTIVEMQ_TOPIC;
101        }
102    
103        protected Destination createDestination(String name) {
104            return new ActiveMQTopic(name);
105        }
106    
107        protected JMSDestinationStats createDestinationStats() {
108            return new JMSTopicStatsImpl();
109        }
110    
111    }