001    /*
002     * Copyright 2009 Red Hat, Inc.
003     * Red Hat licenses this file to you under the Apache License, version
004     * 2.0 (the "License"); you may not use this file except in compliance
005     * with the License.  You may obtain a copy of the License at
006     *    http://www.apache.org/licenses/LICENSE-2.0
007     * Unless required by applicable law or agreed to in writing, software
008     * distributed under the License is distributed on an "AS IS" BASIS,
009     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
010     * implied.  See the License for the specific language governing
011     * permissions and limitations under the License.
012     */
013    
014    package org.hornetq.api.jms.management;
015    
016    import org.hornetq.utils.json.JSONArray;
017    import org.hornetq.utils.json.JSONObject;
018    
019    /**
020     * Helper class to create Java Objects from the
021     * JSON serialization returned by {@link TopicControl#listAllSubscriptionsAsJSON()} and related methods.
022     *
023     * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
024     */
025    public class SubscriptionInfo
026    {
027       // Constants -----------------------------------------------------
028    
029       // Attributes ----------------------------------------------------
030    
031       private final String queueName;
032    
033       private final String clientID;
034    
035       private final String name;
036    
037       private final boolean durable;
038    
039       private final String selector;
040    
041       private final int messageCount;
042    
043       private final int deliveringCount;
044    
045       // Static --------------------------------------------------------
046    
047       /**
048        * Returns an array of SubscriptionInfo corresponding to the JSON serialization returned
049        * by {@link TopicControl#listAllSubscriptionsAsJSON()} and related methods.
050        */
051       public static SubscriptionInfo[] from(final String jsonString) throws Exception
052       {
053          JSONArray array = new JSONArray(jsonString);
054          SubscriptionInfo[] infos = new SubscriptionInfo[array.length()];
055          for (int i = 0; i < array.length(); i++)
056          {
057             JSONObject sub = array.getJSONObject(i);
058             SubscriptionInfo info = new SubscriptionInfo(sub.getString("queueName"),
059                                                          sub.optString("clientID", null),
060                                                          sub.optString("name", null),
061                                                          sub.getBoolean("durable"),
062                                                          sub.optString("selector", null),
063                                                          sub.getInt("messageCount"),
064                                                          sub.getInt("deliveringCount"));
065             infos[i] = info;
066          }
067    
068          return infos;
069       }
070    
071       // Constructors --------------------------------------------------
072    
073       private SubscriptionInfo(final String queueName,
074                                final String clientID,
075                                final String name,
076                                final boolean durable,
077                                final String selector,
078                                final int messageCount,
079                                final int deliveringCount)
080       {
081          this.queueName = queueName;
082          this.clientID = clientID;
083          this.name = name;
084          this.durable = durable;
085          this.selector = selector;
086          this.messageCount = messageCount;
087          this.deliveringCount = deliveringCount;
088       }
089    
090       // Public --------------------------------------------------------
091    
092       /**
093        * Returns the name of the HornetQ core queue corresponding to this subscription.
094        */
095       public String getQueueName()
096       {
097          return queueName;
098       }
099    
100       /**
101        * Returns the client ID of this subscription or {@code null}.
102        */
103       public String getClientID()
104       {
105          return clientID;
106       }
107    
108       /**
109        * Returns the name of this subscription.
110        */
111       public String getName()
112       {
113          return name;
114       }
115    
116       /**
117        * Returns whether this subscription is durable.
118        */
119       public boolean isDurable()
120       {
121          return durable;
122       }
123    
124       /**
125        * Returns the JMS message selector associated to this subscription.
126        */
127       public String getSelector()
128       {
129          return selector;
130       }
131    
132       /**
133        * Returns the number of messages currently held by this subscription.
134        */
135       public int getMessageCount()
136       {
137          return messageCount;
138       }
139    
140       /**
141        * Returns the number of messages currently delivered to this subscription.
142        */
143       public int getDeliveringCount()
144       {
145          return deliveringCount;
146       }
147    
148       // Package protected ---------------------------------------------
149    
150       // Protected -----------------------------------------------------
151    
152       // Private -------------------------------------------------------
153    
154       // Inner classes -------------------------------------------------
155    }