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.ContainerRenderMiner;
009: import com.sun.portal.ubt.report.data.file.aggregate.ContainerRenderMinerAggregator;
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 ContainerRenderChart implements UBTChartI {
024: public static String REQUESTS_PER_HOUR = "ReqPerPage";
025: public static String REQUESTS_PER_HOUR_PER_CONTAINER = "ReqPerPagePerContainer";
026: private DataMiner miner;
027: private UBTReportResourceBundle reportsResource;
028: private Locale locale;
029:
030: public ContainerRenderChart(DataMiner miner, Locale clLocale)
031: throws IllegalMinerException {
032: if (!(miner instanceof ContainerRenderMiner || miner instanceof ContainerRenderMinerAggregator))
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_CONTAINER);
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[] containers;
067: Object[] objcArray = (Object[]) (data).keySet().toArray();
068: containers = new String[objcArray.length];
069: copy(objcArray, containers);
070: TimeSeriesCollection dataset = new TimeSeriesCollection();
071: for (int i = 0; i < containers.length; i++) {
072: Iterator timeStampSetI = ((TreeSet) data.get(containers[i]))
073: .iterator();
074: TimeSeries s1 = new TimeSeries(containers[i], Hour.class);
075: while (timeStampSetI.hasNext()) {
076: Calendar cal = Calendar.getInstance(locale);
077: cal.setTimeInMillis(Long
078: .parseLong((String) timeStampSetI.next()));
079: addToSeries(s1, cal);
080: }
081: dataset.addSeries(s1);
082: }
083: return dataset;
084: }
085:
086: private XYDataset createDataSet(boolean page) {
087: TreeMap data = (TreeMap) miner.getData();
088: String[] containers;
089: Object[] objcArray = (Object[]) (data).keySet().toArray();
090: containers = new String[objcArray.length];
091: copy(objcArray, containers);
092: TimeSeriesCollection dataset = new TimeSeriesCollection();
093: TimeSeries s1 = new TimeSeries("Portal", Hour.class);
094: for (int i = 0; i < containers.length; i++) {
095: Iterator timeStampSetI = ((TreeSet) data.get(containers[i]))
096: .iterator();
097: while (timeStampSetI.hasNext()) {
098: Calendar cal = Calendar.getInstance(locale);
099: cal.setTimeInMillis(Long
100: .parseLong((String) timeStampSetI.next()));
101: addToSeries(s1, cal);
102: }
103: }
104: dataset.addSeries(s1);
105: return dataset;
106: }
107:
108: private void addToSeries(TimeSeries s1, Calendar cal) {
109: Hour hr = new Hour(cal.get(Calendar.HOUR_OF_DAY), new Day(cal
110: .getTime()));
111: TimeSeriesDataItem item = s1.getDataItem(hr);
112: if (item != null)
113: s1.addOrUpdate(hr, item.getValue().intValue() + 1);
114: else
115: s1.add(hr, 1);
116: }
117:
118: public Vector getChart() {
119: Vector charts = new Vector(1);
120: charts.add(0, new UBTChartRenderer(createChart(false)));
121: charts.add(1, new UBTChartRenderer(createChart(true)));
122: return charts;
123: }
124: }
|