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.UserLoginMiner;
009: import com.sun.portal.ubt.report.data.file.aggregate.UserLoginMinerAggregator;
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 UserLoginChart implements UBTChartI {
024: private DataMiner miner;
025: public static final String LOGIN_PER_MIN = "UserLoginPerMin";
026: public static final String LOGIN_PER_HOUR = "UserLoginPerHr";
027: public static final String LOGIN_PER_DAY = "UserLoginPerDay";
028: public static final String UserLogin = "UserLogin";
029: private UBTReportResourceBundle reportsResource;
030: private Locale locale;
031:
032: public UserLoginChart(DataMiner miner, Locale clLocale)
033: throws IllegalMinerException {
034: if (!(miner instanceof UserLoginMiner || miner instanceof UserLoginMinerAggregator))
035: throw new IllegalMinerException();
036: this .miner = miner;
037: reportsResource = new UBTReportResourceBundle(clLocale);
038: locale = clLocale;
039: }
040:
041: private JFreeChart[] createChart() {
042: JFreeChart[] charts = new JFreeChart[3];
043: XYDataset[] dataset = createDataSet();
044:
045: charts[0] = ChartFactory.createTimeSeriesChart(reportsResource
046: .getReportProperty(LOGIN_PER_MIN), reportsResource
047: .getReportProperty(ContainerActionsRateChart.Date),
048: reportsResource.getReportProperty(LOGIN_PER_MIN),
049: dataset[0], true, true, false);
050: charts[1] = ChartFactory.createTimeSeriesChart(reportsResource
051: .getReportProperty(LOGIN_PER_HOUR), reportsResource
052: .getReportProperty(ContainerActionsRateChart.Date),
053: reportsResource.getReportProperty(LOGIN_PER_HOUR),
054: dataset[1], true, true, false);
055: charts[2] = ChartFactory.createTimeSeriesChart(reportsResource
056: .getReportProperty(LOGIN_PER_DAY), reportsResource
057: .getReportProperty(ContainerActionsRateChart.Date),
058: reportsResource.getReportProperty(LOGIN_PER_DAY),
059: dataset[2], true, true, false);
060: UBTChartUtil.customizeChart(charts[0]);
061: UBTChartUtil.customizeChart(charts[1]);
062: UBTChartUtil.customizeChart(charts[2]);
063: return charts;
064:
065: }
066:
067: private void copy(Object[] objArray, String[] series) {
068: for (int i = 0; i < objArray.length; i++) {
069: series[i] = (String) objArray[i];
070: }
071: }
072:
073: private XYDataset[] createDataSet() {
074: TreeMap data = (TreeMap) miner.getData();
075: Iterator keyI = data.keySet().iterator();
076: TreeSet timeStampSet = new TreeSet();
077: while (keyI.hasNext()) {
078: timeStampSet.addAll((TreeSet) data.get(keyI.next()));
079: }
080: Iterator timeStampSetI = timeStampSet.iterator();
081: TimeSeriesCollection[] datasets = new TimeSeriesCollection[3];
082: TimeSeriesCollection datasetHour = new TimeSeriesCollection();
083: TimeSeriesCollection datasetDay = new TimeSeriesCollection();
084: TimeSeriesCollection datasetMin = new TimeSeriesCollection();
085: TimeSeries s0 = new TimeSeries(reportsResource
086: .getReportProperty(UserLogin), Day.class);
087: TimeSeries s1 = new TimeSeries(reportsResource
088: .getReportProperty(UserLogin), Hour.class);
089: TimeSeries s2 = new TimeSeries(reportsResource
090: .getReportProperty(UserLogin), Minute.class);
091:
092: while (timeStampSetI.hasNext()) {
093: String timestamp = (String) timeStampSetI.next();
094: Calendar cal = Calendar.getInstance(locale);
095: cal.setTimeInMillis(Long.parseLong(timestamp));
096: addToHourSeries(s1, cal);
097: addToDaySeries(s0, cal);
098: addToMinSeries(s2, cal);
099: }
100: datasetHour.addSeries(s1);
101: datasetMin.addSeries(s2);
102: datasetDay.addSeries(s0);
103: datasets[0] = datasetMin;
104: datasets[1] = datasetHour;
105: datasets[2] = datasetDay;
106: return datasets;
107: }
108:
109: private void addToHourSeries(TimeSeries s1, Calendar cal) {
110: Hour hr = new Hour(cal.get(Calendar.HOUR_OF_DAY), new Day(cal
111: .getTime()));
112: TimeSeriesDataItem item = s1.getDataItem(hr);
113: if (item != null)
114: s1.addOrUpdate(hr, item.getValue().intValue() + 1);
115: else
116: s1.add(hr, 1);
117: }
118:
119: private void addToMinSeries(TimeSeries s1, Calendar cal) {
120: Minute min = new Minute(cal.get(Calendar.MINUTE), new Hour(
121: Calendar.HOUR_OF_DAY, new Day(cal.getTime())));
122: TimeSeriesDataItem item = s1.getDataItem(min);
123: if (item != null)
124: s1.addOrUpdate(min, item.getValue().intValue() + 1);
125: else
126: s1.add(min, 1);
127: }
128:
129: private void addToDaySeries(TimeSeries s1, Calendar cal) {
130: Day day = new Day(cal.getTime());
131: TimeSeriesDataItem item = s1.getDataItem(day);
132: if (item != null)
133: s1.addOrUpdate(day, item.getValue().intValue() + 1);
134: else
135: s1.add(day, 1);
136: }
137:
138: public Vector getChart() {
139: Vector charts = new Vector(1);
140: JFreeChart[] chartsArray = createChart();
141: for (int i = 0; i < chartsArray.length; i++)
142: charts.add(i, new UBTChartRenderer(chartsArray[i]));
143: return charts;
144: }
145: }
|