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.core.management;
015    
016    import java.util.Arrays;
017    
018    import org.hornetq.core.logging.Logger;
019    import org.hornetq.utils.json.JSONArray;
020    import org.hornetq.utils.json.JSONException;
021    import org.hornetq.utils.json.JSONObject;
022    
023    /**
024     * Helper class to create Java Objects from the
025     * JSON serialization returned by {@link QueueControl#listMessageCounterHistory()}.
026     *
027     *  @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
028     */
029    public class DayCounterInfo
030    {
031       // Constants -----------------------------------------------------
032    
033       private static final Logger log = Logger.getLogger(DayCounterInfo.class);
034    
035       // Attributes ----------------------------------------------------
036    
037       private final String date;
038    
039       private final int[] counters;
040    
041       // Static --------------------------------------------------------
042    
043       public static String toJSON(final DayCounterInfo[] infos) throws JSONException
044       {
045          JSONObject json = new JSONObject();
046          JSONArray counters = new JSONArray();
047          for (DayCounterInfo info : infos)
048          {
049             JSONObject counter = new JSONObject();
050             counter.put("date", info.getDate());
051             counter.put("counters", Arrays.asList(info.getCounters()));
052             counters.put(counter);
053          }
054          json.put("dayCounters", counters);
055          return json.toString();
056       }
057    
058       /**
059        * Returns an array of RoleInfo corresponding to the JSON serialization returned
060        * by {@link QueueControl#listMessageCounterHistory()}.
061        */
062       public static DayCounterInfo[] fromJSON(final String jsonString) throws JSONException
063       {
064          JSONObject json = new JSONObject(jsonString);
065          JSONArray dayCounters = json.getJSONArray("dayCounters");
066          DayCounterInfo[] infos = new DayCounterInfo[dayCounters.length()];
067          for (int i = 0; i < dayCounters.length(); i++)
068          {
069    
070             JSONObject counter = (JSONObject)dayCounters.get(i);
071             JSONArray hour = (JSONArray)counter.getJSONArray("counters").get(0);
072             int[] hourCounters = new int[24];
073             for (int j = 0; j < 24; j++)
074             {
075                hourCounters[j] = hour.getInt(j);
076             }
077             DayCounterInfo info = new DayCounterInfo(counter.getString("date"), hourCounters);
078             infos[i] = info;
079          }
080          return infos;
081       }
082    
083       // Constructors --------------------------------------------------
084    
085       public DayCounterInfo(final String date, final int[] counters)
086       {
087          this.date = date;
088          this.counters = counters;
089       }
090    
091       // Public --------------------------------------------------------
092    
093       /**
094        * Returns the date of the counter.
095        */
096       public String getDate()
097       {
098          return date;
099       }
100    
101       /**
102        * Returns a 24-length array corresponding to the number of messages added to the queue
103        * for the given hour of the day.
104        */
105       public int[] getCounters()
106       {
107          return counters;
108       }
109    
110       // Package protected ---------------------------------------------
111    
112       // Protected -----------------------------------------------------
113    
114       // Private -------------------------------------------------------
115    
116       // Inner classes -------------------------------------------------
117    }