001: /*
002: * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
003: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
004: */
005: package com.sun.portal.ubt.report.view.chart;
006:
007: import com.sun.portal.ubt.report.data.DataMiner;
008: import com.sun.portal.ubt.report.data.file.raw.PortletActionsMiner;
009: import com.sun.portal.ubt.report.data.file.aggregate.PortletActionsMinerAggregator;
010: import com.sun.portal.ubt.report.view.IllegalMinerException;
011: import com.sun.portal.ubt.report.util.UBTReportResourceBundle;
012:
013: import java.util.*;
014:
015: import org.jfree.chart.JFreeChart;
016: import org.jfree.chart.ChartFactory;
017: import org.jfree.data.time.*;
018: import org.jfree.data.xy.XYDataset;
019:
020: /**
021: *
022: */
023: public class PortletActionsRateChart implements UBTChartI {
024: private DataMiner miner;
025: public static final String REQUESTS_PER_HOUR = "PortletActionsReqPerHr";
026: public static final String REQUESTS_PER_HOUR_PER_PORTLET = "PortletActionsReqPerHrPerPortlet";
027: private UBTReportResourceBundle reportsResource;
028: private Locale locale;
029:
030: public PortletActionsRateChart(DataMiner miner, Locale clLocale)
031: throws IllegalMinerException {
032: if (!(miner instanceof PortletActionsMiner || miner instanceof PortletActionsMinerAggregator))
033: throw new IllegalMinerException();
034: this .miner = miner;
035: reportsResource = new UBTReportResourceBundle(clLocale);
036: locale = clLocale;
037: }
038:
039: private JFreeChart createChart(boolean page) {
040: XYDataset dataset = page ? createDataSet(true)
041: : createDataSet();
042: String title = page ? reportsResource
043: .getReportProperty(REQUESTS_PER_HOUR) : reportsResource
044: .getReportProperty(REQUESTS_PER_HOUR_PER_PORTLET);
045: JFreeChart chart = ChartFactory
046: .createTimeSeriesChart(
047: title,
048: reportsResource
049: .getReportProperty(ContainerActionsRateChart.Date),
050: reportsResource
051: .getReportProperty(ContainerActionsRateChart.ReqPerHr),
052: dataset, true, true, false);
053: UBTChartUtil.customizeChart(chart);
054: return chart;
055:
056: }
057:
058: private void copy(Object[] objArray, String[] series) {
059: for (int i = 0; i < objArray.length; i++) {
060: series[i] = (String) objArray[i];
061: }
062: }
063:
064: private XYDataset createDataSet() {
065: TreeMap data = (TreeMap) miner.getData();
066: String[] portlets;
067: Object[] objcArray = (Object[]) (data).keySet().toArray();
068: portlets = new String[objcArray.length];
069: copy(objcArray, portlets);
070: TimeSeriesCollection dataset = new TimeSeriesCollection();
071: for (int i = 0; i < portlets.length; i++) {
072: TreeMap portletMap = ((TreeMap) data.get(portlets[i]));
073: Collection timestamps = portletMap.values();
074: Iterator timestampsI = timestamps.iterator();
075: TimeSeries s1 = new TimeSeries(portlets[i], Hour.class);
076: while (timestampsI.hasNext()) {
077: Iterator timeStampSetI = ((TreeSet) timestampsI.next())
078: .iterator();
079: while (timeStampSetI.hasNext()) {
080: Calendar cal = Calendar.getInstance(locale);
081: cal.setTimeInMillis(Long
082: .parseLong((String) timeStampSetI.next()));
083: addToSeries(s1, cal);
084: }
085: }
086: dataset.addSeries(s1);
087: }
088: return dataset;
089: }
090:
091: private XYDataset createDataSet(boolean page) {
092: TreeMap data = (TreeMap) miner.getData();
093: String[] portlets;
094: Object[] objcArray = (Object[]) (data).keySet().toArray();
095: portlets = new String[objcArray.length];
096: copy(objcArray, portlets);
097: TimeSeriesCollection dataset = new TimeSeriesCollection();
098: TimeSeries s1 = new TimeSeries("Portal", Hour.class);
099: for (int i = 0; i < portlets.length; i++) {
100: TreeMap portletMap = ((TreeMap) data.get(portlets[i]));
101: Collection timestamps = portletMap.values();
102: Iterator timestampsI = timestamps.iterator();
103: while (timestampsI.hasNext()) {
104: Iterator timeStampSetI = ((TreeSet) timestampsI.next())
105: .iterator();
106: while (timeStampSetI.hasNext()) {
107: Calendar cal = Calendar.getInstance(locale);
108: cal.setTimeInMillis(Long
109: .parseLong((String) timeStampSetI.next()));
110: addToSeries(s1, cal);
111: }
112: }
113: }
114: dataset.addSeries(s1);
115: return dataset;
116: }
117:
118: private void addToSeries(TimeSeries s1, Calendar cal) {
119: Hour hr = new Hour(cal.get(Calendar.HOUR_OF_DAY), new Day(cal
120: .getTime()));
121: TimeSeriesDataItem item = s1.getDataItem(hr);
122: if (item != null)
123: s1.addOrUpdate(hr, item.getValue().intValue() + 1);
124: else
125: s1.add(hr, 1);
126: }
127:
128: public Vector getChart() {
129: Vector charts = new Vector(1);
130: charts.add(0, new UBTChartRenderer(createChart(false)));
131: charts.add(1, new UBTChartRenderer(createChart(true)));
132: return charts;
133: }
134: }
|