You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by wo...@apache.org on 2005/11/15 06:23:36 UTC
svn commit: r344311 -
/jakarta/jmeter/branches/rel-2-1/src/reports/org/apache/jmeter/testelement/BarChart.java
Author: woolfel
Date: Mon Nov 14 21:23:32 2005
New Revision: 344311
URL: http://svn.apache.org/viewcvs?rev=344311&view=rev
Log:
first cut the basic implementation that should work. need to get the unit test working to verify it works correctly.
peter
Modified:
jakarta/jmeter/branches/rel-2-1/src/reports/org/apache/jmeter/testelement/BarChart.java
Modified: jakarta/jmeter/branches/rel-2-1/src/reports/org/apache/jmeter/testelement/BarChart.java
URL: http://svn.apache.org/viewcvs/jakarta/jmeter/branches/rel-2-1/src/reports/org/apache/jmeter/testelement/BarChart.java?rev=344311&r1=344310&r2=344311&view=diff
==============================================================================
--- jakarta/jmeter/branches/rel-2-1/src/reports/org/apache/jmeter/testelement/BarChart.java (original)
+++ jakarta/jmeter/branches/rel-2-1/src/reports/org/apache/jmeter/testelement/BarChart.java Mon Nov 14 21:23:32 2005
@@ -17,9 +17,29 @@
*/
package org.apache.jmeter.testelement;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.apache.jmeter.report.DataSet;
+import org.apache.jmeter.visualizers.SamplingStatCalculator;
+
+import org.jCharts.axisChart.AxisChart;
+import org.jCharts.chartData.AxisChartDataSet;
+import org.jCharts.chartData.DataSeries;
+import org.jCharts.properties.AxisProperties;
+import org.jCharts.properties.BarChartProperties;
+import org.jCharts.properties.ChartProperties;
+import org.jCharts.properties.LegendProperties;
+import org.jCharts.types.ChartType;
-import org.apache.jmeter.report.ReportTable;
/**
* The class is reponsible for returning
@@ -28,12 +48,117 @@
*/
public class BarChart extends AbstractChart {
- public BarChart() {
+ public static final String REPORT_BAR_CHART_URL = "ReportChart.bar.chart.url";
+
+ public BarChart() {
super();
}
- public JComponent renderChart(ReportTable element) {
-
- return null;
+ public String getURL() {
+ return getPropertyAsString(REPORT_BAR_CHART_URL);
+ }
+
+ public void setURL(String url) {
+ setProperty(REPORT_BAR_CHART_URL,url);
+ }
+
+ /**
+ * Convert the data from SamplingStatCalculator to double array of array
+ * @param data
+ * @return
+ */
+ public double[][] convertToDouble(List data) {
+ double[][] dataset = new double[1][data.size()];
+ Iterator itr = data.iterator();
+ for (int idx=0; idx < data.size(); idx++) {
+ SamplingStatCalculator stat = (SamplingStatCalculator)data.get(idx);
+ dataset[0][idx] = getValue(stat);
+ }
+ return dataset;
+ }
+
+ public JComponent renderChart(List data) {
+ ArrayList dset = new ArrayList();
+ ArrayList xlabels = new ArrayList();
+ Iterator itr = data.iterator();
+ while (itr.hasNext()) {
+ DataSet ds = (DataSet)itr.next();
+ SamplingStatCalculator ss = ds.getStatistics(this.getURL());
+ if (ss != null) {
+ // we add the entry
+ dset.add(ss);
+ xlabels.add(ds.getDataSource());
+ }
+ }
+ double[][] dbset = convertToDouble(dset);
+ return renderGraphics(dbset, (String[])xlabels.toArray(new String[xlabels.size()]));
}
+
+ public JComponent renderGraphics(double[][] data, String[] xAxisLabels) {
+ String title = this.getTitle();
+ String xAxisTitle = this.getXAxis();
+ String yAxisTitle = this.getYAxis();
+ String yAxisLabel = this.getYLabel();
+ int width = 350;
+ int height = 300;
+ Graphics g;
+ JPanel panel = new JPanel();
+ try {
+
+ DataSeries dataSeries = new DataSeries( xAxisLabels, xAxisTitle, yAxisTitle, title );
+
+ String[] legendLabels= { yAxisLabel };
+ Paint[] paints = new Paint[]{ Color.blue.darker() };
+ BarChartProperties barChartProperties= new BarChartProperties();
+ AxisChartDataSet axisChartDataSet =
+ new AxisChartDataSet(
+ data, legendLabels, paints, ChartType.BAR, barChartProperties );
+ dataSeries.addIAxisPlotDataSet( axisChartDataSet );
+
+ ChartProperties chartProperties= new ChartProperties();
+ AxisProperties axisProperties= new AxisProperties();
+ axisProperties.setXAxisLabelsAreVertical(true);
+ LegendProperties legendProperties= new LegendProperties();
+ AxisChart axisChart = new AxisChart(
+ dataSeries, chartProperties, axisProperties,
+ legendProperties, width, height );
+ axisChart.setGraphics2D((Graphics2D) panel.getGraphics());
+ axisChart.render();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return panel;
+ }
+
+ /**
+ * convienance method for getting the selected value. Rather than use
+ * Method.invoke(Object,Object[]), it's simpler to just check which
+ * column is selected and call the method directly.
+ * @param stat
+ * @return
+ */
+ public double getValue(SamplingStatCalculator stat) {
+ if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_50_PERCENT)) {
+ return stat.getPercentPoint(.50).doubleValue();
+ } else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_90_PERCENT)){
+ return stat.getPercentPoint(.90).doubleValue();
+ } else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_ERROR_RATE)) {
+ return stat.getErrorPercentage();
+ } else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_MAX)) {
+ return stat.getMax().doubleValue();
+ } else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_MEAN)) {
+ return stat.getMean();
+ } else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_MEDIAN)) {
+ return stat.getMedian().doubleValue();
+ } else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_MIN)) {
+ return stat.getMin().doubleValue();
+ } else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_RESPONSE_RATE)) {
+ return stat.getRate();
+ } else if (this.getXAxis().equals(AbstractTable.REPORT_TABLE_TRANSFER_RATE)) {
+ // return the pagesize divided by 1024 to get kilobytes
+ return stat.getPageSize()/1024;
+ } else {
+ return -1;
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org