/* * Copyright (C) 2008 Digital Sundhed (SDSD) * * All source code and information supplied as part of chronos * is copyright to its contributers. * * The source code has been released under a dual license - meaning you can * use either licensed version of the library with your code. * * It is released under the Common Public License 1.0, a copy of which can * be found at the link below. * http://www.opensource.org/licenses/cpl.php * * It is released under the LGPL (GNU Lesser General Public License), either * version 2.1 of the License, or (at your option) any later version. A copy * of which can be found at the link below. * http://www.gnu.org/copyleft/lesser.html */ package org.codehaus.mojo.chronos.chart; import java.text.SimpleDateFormat; import java.util.ResourceBundle; import org.codehaus.mojo.chronos.ReportConfig; import org.codehaus.mojo.chronos.responsetime.ResponsetimeSamples; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.SeriesRenderingOrder; import org.jfree.data.time.Millisecond; import org.jfree.data.time.MovingAverage; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; /** * This class is responsible for generating responsetime charts. * * @author ksr@lakeside.dk */ public abstract class ResponseChartGenerator { protected final JFreeChart createResponseChart(String datasetName, ResponsetimeSamples samples, ResourceBundle bundle, ReportConfig config) { XYDataset dataset = createResponseDataset(datasetName, samples, bundle, config); String title = bundle.getString("chronos.label.responsetimes"); String timeAxisLabel = bundle.getString("chronos.label.responsetimes.time"); String valueAxisLabel = bundle.getString("chronos.label.responsetimes.responsetime"); JFreeChart chart = ChartFactory.createTimeSeriesChart(title, timeAxisLabel, valueAxisLabel, dataset, true, true, false); ChartUtil.setupXYPlot(chart, new SimpleDateFormat("HH:mm:ss")); // change rendering order - so average is in front chart.getXYPlot().setSeriesRenderingOrder(SeriesRenderingOrder.FORWARD); if(config.isShowpercentile()) { String text = bundle.getString("chronos.label.percentile95.arrow"); ChartUtil.addRangeMarker(chart.getXYPlot(), text, samples.getPercentile95(config.getResponsetimedivider())); } if(config.isShowaverage()) { String text = bundle.getString("chronos.label.average.arrow"); ChartUtil.addRangeMarker(chart.getXYPlot(), text, samples.getAverage(config.getResponsetimedivider())); } return chart; } private TimeSeriesCollection createResponseDataset(String name, ResponsetimeSamples samples, ResourceBundle bundle, ReportConfig config) { TimeSeries series = new TimeSeries(name, Millisecond.class); samples.appendResponsetimes(series, config.getResponsetimedivider()); TimeSeriesCollection dataset = new TimeSeriesCollection(); dataset.addSeries(series); String averageLabel = bundle.getString("chronos.label.average"); TimeSeries averageseries = MovingAverage.createMovingAverage(series, averageLabel, config.getAverageduration(), 0); dataset.addSeries(averageseries); return dataset; } }