001: package dinamica.charts;
002:
003: import java.awt.Color;
004: import dinamica.*;
005: import org.jfree.chart.*;
006: import org.jfree.data.xy.XYSeries;
007: import org.jfree.data.xy.XYSeriesCollection;
008: import org.jfree.chart.plot.*;
009:
010: /**
011: * Chart plugin for XYBar charts with multiseries support
012: * Last update: 18/11/2003
013: * @author Martin Cordova (dinamica@martincordova.com)
014: */
015: public class XYAreaChart extends AbstractChartPlugin {
016:
017: /* (non-Javadoc)
018: * @see dinamica.AbstractChartPlugin#getChart(dinamica.Recordset, dinamica.Recordset)
019: */
020: public JFreeChart getChart(Recordset chartInfo, Recordset data)
021: throws Throwable {
022:
023: /* get series labels - if any */
024: String series[] = null;
025: String seriesLabels = chartInfo.getString("title-series");
026: if (seriesLabels != null)
027: series = StringUtil.split(seriesLabels, ";");
028: else {
029: series = new String[1];
030: series[0] = "";
031: }
032:
033: String colx = chartInfo.getString("column-x");
034:
035: /* are there multiple series? */
036: String dataCols[] = null;
037: String coly = chartInfo.getString("column-y");
038: if (coly.indexOf(";") > 0)
039: dataCols = StringUtil.split(coly, ";");
040: else {
041: dataCols = new String[1];
042: dataCols[0] = coly;
043: }
044:
045: /* get value y for each serie */
046: XYSeriesCollection dataset = new XYSeriesCollection();
047: for (int i = 0; i < dataCols.length; i++) {
048:
049: XYSeries xy = new XYSeries(series[i]);
050:
051: /* navigate the recordset and feed the chart dataset */
052: data.top();
053: while (data.next()) {
054:
055: Double value = new Double(data.getDouble(dataCols[i]));
056: if (value == null)
057: value = new Double(0);
058: xy.add(data.getDouble(colx), value.doubleValue());
059: }
060: dataset.addSeries(xy);
061:
062: }
063:
064: /* get chart params */
065: String title = (String) chartInfo.getValue("title");
066: String titlex = (String) chartInfo.getValue("title-x");
067: String titley = (String) chartInfo.getValue("title-y");
068:
069: /* if there is more than 1 series then use legends */
070: boolean useLegend = (dataCols.length > 1);
071:
072: /* create a chart */
073:
074: JFreeChart chart = ChartFactory.createXYAreaChart(title, // chart title
075: titlex, // domain axis label
076: titley, // range axis label
077: dataset, // data
078: PlotOrientation.VERTICAL, // orientation
079: useLegend, // include legend
080: false, // tooltips
081: false // urls
082: );
083:
084: /* set chart decoration */
085: configurePlot(chart.getPlot());
086:
087: //PATCH 2005-07-19 - support for custom default color
088: //for single series charts - line, bar and area only
089: String color = chartInfo.getString("color");
090: if (!useLegend && color != null) {
091: CategoryPlot p = (CategoryPlot) chart.getPlot();
092: p.getRenderer().setSeriesPaint(0, Color.decode(color));
093: }
094:
095: /* return chart */
096: return chart;
097:
098: }
099:
100: /**
101: * Configure chart decorations
102: */
103: public void configurePlot(Plot p) {
104:
105: XYPlot plot = (XYPlot) p;
106:
107: plot.setBackgroundPaint(Color.WHITE);
108: plot.setRangeGridlinePaint(Color.BLACK);
109: plot.setDomainGridlinePaint(Color.BLACK);
110: plot.setRangeGridlinesVisible(true);
111:
112: }
113:
114: }
|