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 }