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.ContainerWiseUserActionsMiner;
009: import com.sun.portal.ubt.report.data.file.aggregate.ContainerWiseUserActionsMinerAggregator;
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 ContainerActionsRateChart implements UBTChartI {
024: private DataMiner miner;
025: public static final String REQUESTS_PER_HOUR = "CustomReqPerHr";
026: public static final String REQUESTS_PER_HOUR_PER_CONTAINER = "CustomReqPerHrPerContainer";
027: public static final String ReqPerHr = "ReqPerHr";
028: public static final String Date = "Date";
029: private UBTReportResourceBundle reportsResource;
030: private Locale locale;
031:
032: public ContainerActionsRateChart(DataMiner miner, Locale clLocale)
033: throws IllegalMinerException {
034: if (!(miner instanceof ContainerWiseUserActionsMiner || miner instanceof ContainerWiseUserActionsMinerAggregator))
035: throw new IllegalMinerException();
036: this .miner = miner;
037: reportsResource = new UBTReportResourceBundle(clLocale);
038: this .locale = clLocale;
039: }
040:
041: private JFreeChart createChart(boolean page) {
042: XYDataset dataset = page ? createDataSet(true)
043: : createDataSet();
044: String title = page ? reportsResource
045: .getReportProperty(REQUESTS_PER_HOUR) : reportsResource
046: .getReportProperty(REQUESTS_PER_HOUR_PER_CONTAINER);
047: JFreeChart chart = ChartFactory.createTimeSeriesChart(title,
048: reportsResource.getReportProperty(Date),
049: reportsResource.getReportProperty(ReqPerHr), dataset,
050: true, true, false);
051: UBTChartUtil.customizeChart(chart);
052: return chart;
053:
054: }
055:
056: private void copy(Object[] objArray, String[] series) {
057: for (int i = 0; i < objArray.length; i++) {
058: series[i] = (String) objArray[i];
059: }
060: }
061:
062: private XYDataset createDataSet() {
063: TreeMap data = (TreeMap) ((TreeMap) miner.getData())
064: .get(ContainerWiseUserActionsMiner.INTENTIONS);
065: String[] containers;
066: Object[] objcArray = (Object[]) (data).keySet().toArray();
067: containers = new String[objcArray.length];
068: copy(objcArray, containers);
069: TimeSeriesCollection dataset = new TimeSeriesCollection();
070: for (int i = 0; i < containers.length; i++) {
071: TreeMap containerMap = ((TreeMap) data.get(containers[i]));
072: Collection timestamps = containerMap.values();
073: Iterator timestampsI = timestamps.iterator();
074: TimeSeries s1 = new TimeSeries(containers[i], Hour.class);
075: while (timestampsI.hasNext()) {
076: Iterator timeStampSetI = ((TreeSet) timestampsI.next())
077: .iterator();
078: while (timeStampSetI.hasNext()) {
079: Calendar cal = Calendar.getInstance(locale);
080: cal.setTimeInMillis(Long
081: .parseLong((String) timeStampSetI.next()));
082: addToSeries(s1, cal);
083: }
084: }
085: dataset.addSeries(s1);
086: }
087: return dataset;
088: }
089:
090: private XYDataset createDataSet(boolean page) {
091: TreeMap data = (TreeMap) ((TreeMap) miner.getData())
092: .get(ContainerWiseUserActionsMiner.INTENTIONS);
093: String[] containers;
094: Object[] objcArray = (Object[]) (data).keySet().toArray();
095: containers = new String[objcArray.length];
096: copy(objcArray, containers);
097: TimeSeriesCollection dataset = new TimeSeriesCollection();
098: TimeSeries s1 = new TimeSeries("Portal", Hour.class);
099: for (int i = 0; i < containers.length; i++) {
100: TreeMap containerMap = ((TreeMap) data.get(containers[i]));
101: Collection timestamps = containerMap.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: }
|