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
014package org.hornetq.api.core.management;
015
016import java.util.Arrays;
017
018import org.hornetq.core.logging.Logger;
019import org.hornetq.utils.json.JSONArray;
020import org.hornetq.utils.json.JSONException;
021import 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 */
029public 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}