    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    }