01: /*
02: * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
03: * PROPRIETARY/CONFIDENTIAL. Use of this product is subject to license terms.
04: */
05: package com.sun.portal.ubt.report.view.chart;
06:
07: import com.sun.portal.ubt.report.data.DataMiner;
08: import com.sun.portal.ubt.report.data.file.raw.ChannelRenderMiner;
09: import com.sun.portal.ubt.report.data.file.aggregate.ChannelRenderMinerAggregator;
10: import com.sun.portal.ubt.report.view.IllegalMinerException;
11: import com.sun.portal.ubt.report.util.UBTReportResourceBundle;
12:
13: import java.util.Vector;
14: import java.util.TreeMap;
15: import java.util.Iterator;
16: import java.util.ResourceBundle;
17: import java.util.Locale;
18:
19: import org.jfree.chart.JFreeChart;
20: import org.jfree.chart.ChartFactory;
21: import org.jfree.data.general.DefaultPieDataset;
22:
23: /**
24: *
25: */
26: public class ChannelRenderChart implements UBTChartI {
27:
28: private DataMiner miner;
29: private UBTReportResourceBundle reportsResource;
30: public static final String ChannelPopularityViews = "ChannelPopularityViews";
31:
32: public ChannelRenderChart(DataMiner miner, Locale locale)
33: throws IllegalMinerException {
34: if (!((miner instanceof ChannelRenderMiner || miner instanceof ChannelRenderMinerAggregator)))
35: throw new IllegalMinerException();
36: this .miner = miner;
37: reportsResource = new UBTReportResourceBundle(locale);
38: }
39:
40: private JFreeChart createChart(String container) {
41: DefaultPieDataset dataset = createDataSet(container);
42: JFreeChart chart = ChartFactory.createPieChart(reportsResource
43: .getReportProperty(ChannelPopularityViews)
44: + " " + container, dataset, // Dataset
45: true, true, false // Show legend
46: );
47: UBTChartUtil.customizeChart(chart);
48: return chart;
49: }
50:
51: private DefaultPieDataset createDataSet(String container) {
52: String[] channels; //chaannels
53: TreeMap containerMap = (TreeMap) ((TreeMap) miner.getData())
54: .get(container);
55: Object[] objArray = (Object[]) containerMap.keySet().toArray();
56: channels = new String[objArray.length];
57: copy(objArray, channels);
58: int[] startValues = new int[objArray.length];
59: for (int i = 0; i < channels.length; i++) {
60: TreeMap channelMap = (TreeMap) containerMap
61: .get(channels[i]);
62: Iterator usersI = channelMap.keySet().iterator();
63: while (usersI.hasNext()) {
64: startValues[i] += ((Integer) channelMap.get(usersI
65: .next())).intValue();
66: }
67: }
68: DefaultPieDataset piedata = new DefaultPieDataset();
69: for (int i = 0; i < channels.length; i++) {
70: piedata.setValue(channels[i], startValues[i]);
71: }
72: return piedata;
73: }
74:
75: private void copy(Object[] objArray, String[] series) {
76: for (int i = 0; i < objArray.length; i++) {
77: series[i] = (String) objArray[i];
78: }
79: }
80:
81: public Vector getChart() {
82: TreeMap data = (TreeMap) miner.getData();
83: Vector containers = new Vector();
84: int j = 0;
85: Iterator containerI = data.keySet().iterator();
86: while (containerI.hasNext()) {
87: containers.add(j, containerI.next());
88: j++;
89: }
90: Vector charts = new Vector(containers.size());
91: for (int k = 0; k < containers.size(); k++) {
92: charts.add(k, new UBTChartRenderer(
93: createChart((String) containers.get(k))));
94: }
95: return charts;
96: }
97: }
|