From ee8380c8f9089e396c0fcaa12ebc3d16aab8f25e Mon Sep 17 00:00:00 2001 From: Phil Harvey Date: Sat, 23 Feb 2013 15:17:42 +0000 Subject: QPID-4597: Java performance tests now support visualisation of timeseries data. Refactored ChartBuilder hierarchy to reduce duplication, and renamed several classes to make them more intuitive. Added timeseries chart definitions in perftests/etc/c/timeseries/. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1449342 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/qpid/disttest/charting/ChartType.java | 2 +- .../charting/chartbuilder/BarChart3DBuilder.java | 2 +- .../charting/chartbuilder/BarChartBuilder.java | 2 +- .../charting/chartbuilder/BaseChartBuilder.java | 97 +++++++++------ .../CategoryDataSetBasedChartBuilder.java | 62 ++++------ .../CategoryStrokeAndPaintApplier.java | 41 +++++++ .../charting/chartbuilder/ChartBuilderFactory.java | 4 +- .../charting/chartbuilder/LineChart3DBuilder.java | 2 +- .../charting/chartbuilder/LineChartBuilder.java | 2 +- .../charting/chartbuilder/SeriesPainter.java | 63 ++++++++++ .../chartbuilder/StatisticalBarCharBuilder.java | 134 --------------------- .../chartbuilder/StatisticalBarChartBuilder.java | 114 ++++++++++++++++++ .../charting/chartbuilder/TimeSeriesHolder.java | 70 +++++++++++ .../chartbuilder/TimeSeriesLineChartBuilder.java | 59 +++++++++ .../chartbuilder/XYDataSetBasedChartBuilder.java | 45 +++---- .../charting/definition/ChartingDefinition.java | 2 +- .../charting/seriesbuilder/DatasetHolder.java | 37 ++++++ .../charting/seriesbuilder/JdbcSeriesBuilder.java | 18 +-- .../charting/seriesbuilder/SeriesBuilder.java | 12 +- .../seriesbuilder/SeriesBuilderCallback.java | 31 ----- .../disttest/charting/seriesbuilder/SeriesRow.java | 6 + 21 files changed, 518 insertions(+), 287 deletions(-) create mode 100644 qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/CategoryStrokeAndPaintApplier.java create mode 100644 qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/SeriesPainter.java delete mode 100644 qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/StatisticalBarCharBuilder.java create mode 100644 qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/StatisticalBarChartBuilder.java create mode 100644 qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesHolder.java create mode 100644 qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesLineChartBuilder.java create mode 100644 qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/DatasetHolder.java delete mode 100644 qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesBuilderCallback.java (limited to 'qpid/java/perftests/visualisation-jfc/src/main') diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/ChartType.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/ChartType.java index ed09f4a77e..5a77f22148 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/ChartType.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/ChartType.java @@ -21,5 +21,5 @@ package org.apache.qpid.disttest.charting; public enum ChartType { - LINE, LINE3D, BAR, BAR3D, XYLINE, STATISTICAL_BAR + LINE, LINE3D, BAR, BAR3D, XYLINE, TIMELINE, STATISTICAL_BAR } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BarChart3DBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BarChart3DBuilder.java index 491bb1c67d..b10fd477ed 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BarChart3DBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BarChart3DBuilder.java @@ -36,7 +36,7 @@ public class BarChart3DBuilder extends CategoryDataSetBasedChartBuilder } @Override - public JFreeChart createChartImpl(String title, String xAxisTitle, + protected JFreeChart createCategoryChart(String title, String xAxisTitle, String yAxisTitle, final Dataset dataset, PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls) { diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BarChartBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BarChartBuilder.java index b5c6a38067..7705ef5d3a 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BarChartBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BarChartBuilder.java @@ -35,7 +35,7 @@ public class BarChartBuilder extends CategoryDataSetBasedChartBuilder } @Override - public JFreeChart createChartImpl(String title, String xAxisTitle, + protected JFreeChart createCategoryChart(String title, String xAxisTitle, String yAxisTitle, final Dataset dataset, PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls) { diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BaseChartBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BaseChartBuilder.java index 700d7fa0ce..9cadf0ec3c 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BaseChartBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/BaseChartBuilder.java @@ -19,13 +19,13 @@ */ package org.apache.qpid.disttest.charting.chartbuilder; -import java.awt.BasicStroke; import java.awt.Color; import java.awt.GradientPaint; -import java.util.List; import org.apache.qpid.disttest.charting.definition.ChartingDefinition; -import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.apache.qpid.disttest.charting.seriesbuilder.DatasetHolder; +import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; +import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.title.ShortTextTitle; @@ -33,50 +33,67 @@ import org.jfree.data.general.Dataset; public abstract class BaseChartBuilder implements ChartBuilder { - private static final GradientPaint BLUE_GRADIENT = new GradientPaint(0, 0, Color.white, 0, 1000, Color.blue); + static final GradientPaint BLUE_GRADIENT = new GradientPaint(0, 0, Color.white, 0, 1000, Color.blue); - public void addCommonChartAttributes(JFreeChart chart, ChartingDefinition chartingDefinition) + private SeriesPainter _seriesPainter = new SeriesPainter(); + + private final SeriesBuilder _seriesBuilder; + + protected BaseChartBuilder(SeriesBuilder seriesBuilder) { - addSubtitle(chart, chartingDefinition); - setBackgroundColour(chart); + _seriesBuilder = seriesBuilder; } - protected void addSeriesAttributes(JFreeChart targetChart, List series, SeriesStrokeAndPaintApplier strokeAndPaintApplier) + @Override + public JFreeChart buildChart(ChartingDefinition chartingDefinition) { - for (int i = 0; i < series.size(); i++) - { - SeriesDefinition seriesDefinition = series.get(i); - if (seriesDefinition.getSeriesColourName() != null) - { - strokeAndPaintApplier.setSeriesPaint(i, ColorFactory.toColour(seriesDefinition.getSeriesColourName()), targetChart); - } - if (seriesDefinition.getStrokeWidth() != null) - { - // Negative width used to signify dashed - boolean dashed = seriesDefinition.getStrokeWidth() < 0; - float width = Math.abs(seriesDefinition.getStrokeWidth()); - BasicStroke stroke = buildStrokeOfWidth(width, dashed); - strokeAndPaintApplier.setSeriesStroke(i, stroke, targetChart); - } - } + _seriesBuilder.setDatasetHolder(newDatasetHolder()); + Dataset dataset = _seriesBuilder.build(chartingDefinition.getSeriesDefinitions()); + + JFreeChart chart = createChart(chartingDefinition, dataset); + return chart; } - public abstract JFreeChart createChartImpl(String title, String xAxisTitle, - String yAxisTitle, final Dataset dataset, PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, - boolean showUrls); - private BasicStroke buildStrokeOfWidth(float width, boolean dashed) + /** + * return a holder of an empty dataset suitable for use with the chart type + * returned by {@link #createChartImpl(String, String, String, Dataset, PlotOrientation, boolean, boolean, boolean)}. + */ + protected abstract DatasetHolder newDatasetHolder(); + + /** + * Create a chart with the supplied parameters. + * + * For ease of implementation, the signature is intentionally similar + * to {@link ChartFactory}'s factory methods. + */ + protected abstract JFreeChart createChartImpl( + String title, String xAxisTitle, String yAxisTitle, + final Dataset dataset, + PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls); + + /** + * Create a {@link SeriesStrokeAndPaintApplier} that will be used to format a chart + */ + protected abstract SeriesStrokeAndPaintApplier newStrokeAndPaintApplier(); + + + private JFreeChart createChart(ChartingDefinition chartingDefinition, final Dataset dataset) { - final BasicStroke stroke; - if (dashed) - { - stroke = new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f, new float[] {5.0f, 3.0f}, 0.0f); - } - else - { - stroke = new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); - } - return stroke; + String title = chartingDefinition.getChartTitle(); + String xAxisTitle = chartingDefinition.getXAxisTitle(); + String yAxisTitle = chartingDefinition.getYAxisTitle(); + + final JFreeChart chart = createChartImpl( + title, xAxisTitle, yAxisTitle, + dataset, + PLOT_ORIENTATION, SHOW_LEGEND, SHOW_TOOL_TIPS, SHOW_URLS); + + addSubtitle(chart, chartingDefinition); + chart.setBackgroundPaint(BLUE_GRADIENT); + _seriesPainter.applySeriesAppearance(chart, chartingDefinition.getSeriesDefinitions(), newStrokeAndPaintApplier()); + + return chart; } private void addSubtitle(JFreeChart chart, ChartingDefinition chartingDefinition) @@ -87,9 +104,9 @@ public abstract class BaseChartBuilder implements ChartBuilder } } - private void setBackgroundColour(JFreeChart chart) + void setSeriesPainter(SeriesPainter seriesPainter) { - chart.setBackgroundPaint(BLUE_GRADIENT); + _seriesPainter = seriesPainter; } } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/CategoryDataSetBasedChartBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/CategoryDataSetBasedChartBuilder.java index ffa85d5c50..0d08fd8ad1 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/CategoryDataSetBasedChartBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/CategoryDataSetBasedChartBuilder.java @@ -20,44 +20,36 @@ package org.apache.qpid.disttest.charting.chartbuilder; -import java.awt.Color; -import java.awt.Stroke; - -import org.apache.qpid.disttest.charting.definition.ChartingDefinition; import org.apache.qpid.disttest.charting.definition.SeriesDefinition; -import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilderCallback; +import org.apache.qpid.disttest.charting.seriesbuilder.DatasetHolder; import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; import org.apache.qpid.disttest.charting.seriesbuilder.SeriesRow; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryLabelPositions; +import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.category.DefaultCategoryDataset; +import org.jfree.data.general.Dataset; public abstract class CategoryDataSetBasedChartBuilder extends BaseChartBuilder { - private final SeriesBuilder _seriesBuilder; - public CategoryDataSetBasedChartBuilder(SeriesBuilder seriesBuilder) { - _seriesBuilder = seriesBuilder; + super(seriesBuilder); } @Override - public JFreeChart buildChart(ChartingDefinition chartingDefinition) + protected DatasetHolder newDatasetHolder() { - String title = chartingDefinition.getChartTitle(); - String xAxisTitle = chartingDefinition.getXAxisTitle(); - String yAxisTitle = chartingDefinition.getYAxisTitle(); - - final DefaultCategoryDataset dataset = new DefaultCategoryDataset(); - - _seriesBuilder.setSeriesBuilderCallback(new SeriesBuilderCallback() + return new DatasetHolder() { + final private DefaultCategoryDataset _dataset = new DefaultCategoryDataset(); + @Override public void addDataPointToSeries(SeriesDefinition seriesDefinition, SeriesRow row) { String x = row.dimensionAsString(0); double y = row.dimensionAsDouble(1); - dataset.addValue(y, seriesDefinition.getSeriesLegend(), x); + _dataset.addValue(y, seriesDefinition.getSeriesLegend(), x); } @Override @@ -78,31 +70,27 @@ public abstract class CategoryDataSetBasedChartBuilder extends BaseChartBuilder return 2; } - }); - - _seriesBuilder.build(chartingDefinition.getSeries()); - - final JFreeChart chart = createChartImpl(title, xAxisTitle, yAxisTitle, - dataset, PLOT_ORIENTATION, SHOW_LEGEND, SHOW_TOOL_TIPS, SHOW_URLS); - - chart.getCategoryPlot().getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45); - - addCommonChartAttributes(chart, chartingDefinition); - addSeriesAttributes(chart, chartingDefinition.getSeries(), new SeriesStrokeAndPaintApplier() - { @Override - public void setSeriesStroke(int seriesIndex, Stroke stroke, JFreeChart targetChart) + public Dataset getPopulatedDataset() { - targetChart.getCategoryPlot().getRenderer().setSeriesStroke(seriesIndex, stroke); + return _dataset; } + }; + } - @Override - public void setSeriesPaint(int seriesIndex, Color colour, JFreeChart targetChart) - { - targetChart.getCategoryPlot().getRenderer().setSeriesPaint(seriesIndex, colour); - } - }); + @Override + protected SeriesStrokeAndPaintApplier newStrokeAndPaintApplier() + { + return new CategoryStrokeAndPaintApplier(); + } + @Override + protected final JFreeChart createChartImpl(String title, String xAxisTitle, String yAxisTitle, Dataset dataset, PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls) + { + JFreeChart chart = createCategoryChart(title, xAxisTitle, yAxisTitle, dataset, plotOrientation, showLegend, showToolTips, showUrls); + chart.getCategoryPlot().getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45); return chart; } + + protected abstract JFreeChart createCategoryChart(String title, String xAxisTitle, String yAxisTitle, Dataset dataset, PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls); } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/CategoryStrokeAndPaintApplier.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/CategoryStrokeAndPaintApplier.java new file mode 100644 index 0000000000..cbf5cbe515 --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/CategoryStrokeAndPaintApplier.java @@ -0,0 +1,41 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.disttest.charting.chartbuilder; + +import java.awt.Color; +import java.awt.Stroke; + +import org.jfree.chart.JFreeChart; + +class CategoryStrokeAndPaintApplier implements SeriesStrokeAndPaintApplier +{ + @Override + public void setSeriesStroke(int seriesIndex, Stroke stroke, JFreeChart targetChart) + { + targetChart.getCategoryPlot().getRenderer().setSeriesStroke(seriesIndex, stroke); + } + + @Override + public void setSeriesPaint(int seriesIndex, Color colour, JFreeChart targetChart) + { + targetChart.getCategoryPlot().getRenderer().setSeriesPaint(seriesIndex, colour); + } +} \ No newline at end of file diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/ChartBuilderFactory.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/ChartBuilderFactory.java index f4e11a2c4d..63a0573676 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/ChartBuilderFactory.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/ChartBuilderFactory.java @@ -39,8 +39,10 @@ public class ChartBuilderFactory return new BarChart3DBuilder(seriesBuilder); case XYLINE: return new XYLineChartBuilder(seriesBuilder); + case TIMELINE: + return new TimeSeriesLineChartBuilder(seriesBuilder); case STATISTICAL_BAR: - return new StatisticalBarCharBuilder(seriesBuilder); + return new StatisticalBarChartBuilder(seriesBuilder); default: throw new IllegalArgumentException("Unknown chart type " + chartType); } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/LineChart3DBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/LineChart3DBuilder.java index 27fff12da0..b92a25f5ac 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/LineChart3DBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/LineChart3DBuilder.java @@ -34,7 +34,7 @@ public class LineChart3DBuilder extends CategoryDataSetBasedChartBuilder } @Override - public JFreeChart createChartImpl(String title, String xAxisTitle, + protected JFreeChart createCategoryChart(String title, String xAxisTitle, String yAxisTitle, final Dataset dataset, PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls) { diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/LineChartBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/LineChartBuilder.java index 40f3a09b6b..3f5b18acda 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/LineChartBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/LineChartBuilder.java @@ -35,7 +35,7 @@ public class LineChartBuilder extends CategoryDataSetBasedChartBuilder } @Override - public JFreeChart createChartImpl(String title, String xAxisTitle, + protected JFreeChart createCategoryChart(String title, String xAxisTitle, String yAxisTitle, final Dataset dataset, PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls) { diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/SeriesPainter.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/SeriesPainter.java new file mode 100644 index 0000000000..854635dc87 --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/SeriesPainter.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.disttest.charting.chartbuilder; + +import java.awt.BasicStroke; +import java.util.List; + +import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.jfree.chart.JFreeChart; + +public class SeriesPainter +{ + public void applySeriesAppearance(JFreeChart chart, List seriesDefinitions, SeriesStrokeAndPaintApplier strokeAndPaintApplier) + { + for (int i = 0; i < seriesDefinitions.size(); i++) + { + SeriesDefinition seriesDefinition = seriesDefinitions.get(i); + if (seriesDefinition.getSeriesColourName() != null) + { + strokeAndPaintApplier.setSeriesPaint(i, ColorFactory.toColour(seriesDefinition.getSeriesColourName()), chart); + } + if (seriesDefinition.getStrokeWidth() != null) + { + // Negative width used to signify dashed + boolean dashed = seriesDefinition.getStrokeWidth() < 0; + float width = Math.abs(seriesDefinition.getStrokeWidth()); + BasicStroke stroke = buildStrokeOfWidth(width, dashed); + strokeAndPaintApplier.setSeriesStroke(i, stroke, chart); + } + } + } + + private BasicStroke buildStrokeOfWidth(float width, boolean dashed) + { + final BasicStroke stroke; + if (dashed) + { + stroke = new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1.0f, new float[] {5.0f, 3.0f}, 0.0f); + } + else + { + stroke = new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); + } + return stroke; + } +} diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/StatisticalBarCharBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/StatisticalBarCharBuilder.java deleted file mode 100644 index 61acc8cfdf..0000000000 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/StatisticalBarCharBuilder.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ -package org.apache.qpid.disttest.charting.chartbuilder; - -import java.awt.Color; -import java.awt.Font; -import java.awt.Stroke; - -import org.apache.qpid.disttest.charting.definition.ChartingDefinition; -import org.apache.qpid.disttest.charting.definition.SeriesDefinition; -import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; -import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilderCallback; -import org.apache.qpid.disttest.charting.seriesbuilder.SeriesRow; -import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.CategoryAxis; -import org.jfree.chart.axis.CategoryLabelPositions; -import org.jfree.chart.axis.NumberAxis; -import org.jfree.chart.axis.ValueAxis; -import org.jfree.chart.plot.CategoryPlot; -import org.jfree.chart.plot.PlotOrientation; -import org.jfree.chart.renderer.category.CategoryItemRenderer; -import org.jfree.chart.renderer.category.StatisticalBarRenderer; -import org.jfree.data.general.Dataset; -import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; -import org.jfree.data.statistics.StatisticalCategoryDataset; - -public class StatisticalBarCharBuilder extends BaseChartBuilder -{ - private final SeriesBuilder _seriesBuilder; - - public StatisticalBarCharBuilder(SeriesBuilder seriesBuilder) - { - _seriesBuilder = seriesBuilder; - } - - @Override - public JFreeChart buildChart(ChartingDefinition chartingDefinition) - { - String title = chartingDefinition.getChartTitle(); - String xAxisTitle = chartingDefinition.getXAxisTitle(); - String yAxisTitle = chartingDefinition.getYAxisTitle(); - - final DefaultStatisticalCategoryDataset dataset = new DefaultStatisticalCategoryDataset(); - - _seriesBuilder.setSeriesBuilderCallback(new SeriesBuilderCallback() - { - @Override - public void addDataPointToSeries(SeriesDefinition seriesDefinition, SeriesRow row) - { - String x = row.dimensionAsString(0); - double mean = row.dimensionAsDouble(1); - double stdDev = row.dimensionAsDouble(2); - dataset.add(mean, stdDev, seriesDefinition.getSeriesLegend(), x); - } - - @Override - public void beginSeries(SeriesDefinition seriesDefinition) - { - // unused - } - - @Override - public void endSeries(SeriesDefinition seriesDefinition) - { - // unused - } - - @Override - public int getNumberOfDimensions() - { - return 3; - } - - }); - - _seriesBuilder.build(chartingDefinition.getSeries()); - - final JFreeChart chart = createChartImpl(title, xAxisTitle, yAxisTitle, dataset, PLOT_ORIENTATION, SHOW_LEGEND, - SHOW_TOOL_TIPS, SHOW_URLS); - - chart.getCategoryPlot().getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45); - - addCommonChartAttributes(chart, chartingDefinition); - addSeriesAttributes(chart, chartingDefinition.getSeries(), new SeriesStrokeAndPaintApplier() - { - @Override - public void setSeriesStroke(int seriesIndex, Stroke stroke, JFreeChart targetChart) - { - targetChart.getCategoryPlot().getRenderer().setSeriesStroke(seriesIndex, stroke); - } - - @Override - public void setSeriesPaint(int seriesIndex, Color colour, JFreeChart targetChart) - { - targetChart.getCategoryPlot().getRenderer().setSeriesPaint(seriesIndex, colour); - } - }); - - return chart; - } - - @Override - public JFreeChart createChartImpl(String title, String xAxisTitle, String yAxisTitle, final Dataset dataset, - PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls) - { - CategoryAxis xAxis = new CategoryAxis(xAxisTitle); - ValueAxis yAxis = new NumberAxis(yAxisTitle); - CategoryItemRenderer renderer = new StatisticalBarRenderer(); - - CategoryPlot plot = new CategoryPlot((StatisticalCategoryDataset) dataset, xAxis, yAxis, renderer); - - JFreeChart chart = new JFreeChart(title, new Font("Arial", Font.PLAIN, 10), plot, true); - return chart; - } - -} diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/StatisticalBarChartBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/StatisticalBarChartBuilder.java new file mode 100644 index 0000000000..c5ad2d7dad --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/StatisticalBarChartBuilder.java @@ -0,0 +1,114 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.disttest.charting.chartbuilder; + +import java.awt.Font; + +import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.apache.qpid.disttest.charting.seriesbuilder.DatasetHolder; +import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; +import org.apache.qpid.disttest.charting.seriesbuilder.SeriesRow; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.axis.CategoryAxis; +import org.jfree.chart.axis.CategoryLabelPositions; +import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.axis.ValueAxis; +import org.jfree.chart.plot.CategoryPlot; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.chart.renderer.category.CategoryItemRenderer; +import org.jfree.chart.renderer.category.StatisticalBarRenderer; +import org.jfree.data.general.Dataset; +import org.jfree.data.statistics.DefaultStatisticalCategoryDataset; +import org.jfree.data.statistics.StatisticalCategoryDataset; + +public class StatisticalBarChartBuilder extends BaseChartBuilder +{ + public StatisticalBarChartBuilder(SeriesBuilder seriesBuilder) + { + super(seriesBuilder); + } + + @Override + protected DatasetHolder newDatasetHolder() + { + return new DatasetHolder() + { + private final DefaultStatisticalCategoryDataset _dataset = new DefaultStatisticalCategoryDataset(); + + @Override + public void addDataPointToSeries(SeriesDefinition seriesDefinition, SeriesRow row) + { + String x = row.dimensionAsString(0); + double mean = row.dimensionAsDouble(1); + double stdDev = row.dimensionAsDouble(2); + _dataset.add(mean, stdDev, seriesDefinition.getSeriesLegend(), x); + } + + @Override + public void beginSeries(SeriesDefinition seriesDefinition) + { + // unused + } + + @Override + public void endSeries(SeriesDefinition seriesDefinition) + { + // unused + } + + @Override + public int getNumberOfDimensions() + { + return 3; + } + + @Override + public Dataset getPopulatedDataset() + { + return _dataset; + } + }; + } + + @Override + protected SeriesStrokeAndPaintApplier newStrokeAndPaintApplier() + { + return new CategoryStrokeAndPaintApplier(); + } + + @Override + public JFreeChart createChartImpl(String title, String xAxisTitle, String yAxisTitle, final Dataset dataset, + PlotOrientation plotOrientation, boolean showLegend, boolean showToolTips, boolean showUrls) + { + CategoryAxis xAxis = new CategoryAxis(xAxisTitle); + ValueAxis yAxis = new NumberAxis(yAxisTitle); + CategoryItemRenderer renderer = new StatisticalBarRenderer(); + + CategoryPlot plot = new CategoryPlot((StatisticalCategoryDataset) dataset, xAxis, yAxis, renderer); + + JFreeChart chart = new JFreeChart(title, new Font("Arial", Font.PLAIN, 10), plot, true); + + chart.getCategoryPlot().getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45); + + return chart; + } + +} diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesHolder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesHolder.java new file mode 100644 index 0000000000..803a098dfa --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesHolder.java @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.disttest.charting.chartbuilder; + +import java.util.Date; + +import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.apache.qpid.disttest.charting.seriesbuilder.DatasetHolder; +import org.apache.qpid.disttest.charting.seriesbuilder.SeriesRow; +import org.jfree.data.general.Dataset; +import org.jfree.data.time.Millisecond; +import org.jfree.data.time.RegularTimePeriod; +import org.jfree.data.time.TimeSeries; +import org.jfree.data.time.TimeSeriesCollection; + +class TimeSeriesHolder implements DatasetHolder +{ + private final TimeSeriesCollection _timeSeriesCollection = new TimeSeriesCollection(); + private TimeSeries _timeSeries; + + @Override + public void beginSeries(SeriesDefinition seriesDefinition) + { + _timeSeries = new TimeSeries(seriesDefinition.getSeriesLegend()); + } + + @Override + public void addDataPointToSeries(SeriesDefinition seriesDefinition, SeriesRow row) + { + Date x = row.dimensionAsDate(0); + double y = row.dimensionAsDouble(1); + RegularTimePeriod jfreeChartDate = new Millisecond(x); + _timeSeries.add(jfreeChartDate, y); + } + + @Override + public void endSeries(SeriesDefinition seriesDefinition) + { + _timeSeriesCollection.addSeries(_timeSeries); + } + + @Override + public int getNumberOfDimensions() + { + return 2; + } + + @Override + public Dataset getPopulatedDataset() + { + return _timeSeriesCollection; + } +} \ No newline at end of file diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesLineChartBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesLineChartBuilder.java new file mode 100644 index 0000000000..7249ae6332 --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/TimeSeriesLineChartBuilder.java @@ -0,0 +1,59 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.disttest.charting.chartbuilder; + +import org.apache.qpid.disttest.charting.seriesbuilder.DatasetHolder; +import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.data.general.Dataset; +import org.jfree.data.xy.XYDataset; + +public class TimeSeriesLineChartBuilder extends XYDataSetBasedChartBuilder +{ + public TimeSeriesLineChartBuilder(SeriesBuilder seriesBuilder) + { + super(seriesBuilder); + } + + @Override + protected DatasetHolder newDatasetHolder() + { + return new TimeSeriesHolder(); + } + + @Override + public JFreeChart createChartImpl(String title, String xAxisTitle, + String yAxisTitle, final Dataset dataset, PlotOrientation plotOrientation, + boolean showLegend, boolean showToolTips, boolean showUrls) + { + JFreeChart chart = ChartFactory.createTimeSeriesChart( + title, + xAxisTitle, + yAxisTitle, + (XYDataset)dataset, + showLegend, + showToolTips, + showUrls); + + return chart; + } +} diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/XYDataSetBasedChartBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/XYDataSetBasedChartBuilder.java index 46b6ac6fab..575712f06c 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/XYDataSetBasedChartBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/XYDataSetBasedChartBuilder.java @@ -25,34 +25,28 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import org.apache.qpid.disttest.charting.definition.ChartingDefinition; import org.apache.qpid.disttest.charting.definition.SeriesDefinition; -import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilderCallback; +import org.apache.qpid.disttest.charting.seriesbuilder.DatasetHolder; import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; import org.apache.qpid.disttest.charting.seriesbuilder.SeriesRow; import org.jfree.chart.JFreeChart; +import org.jfree.data.general.Dataset; import org.jfree.data.xy.DefaultXYDataset; public abstract class XYDataSetBasedChartBuilder extends BaseChartBuilder { - private final SeriesBuilder _seriesBuilder; - public XYDataSetBasedChartBuilder(SeriesBuilder seriesBuilder) { - this._seriesBuilder = seriesBuilder; + super(seriesBuilder); } @Override - public JFreeChart buildChart(ChartingDefinition chartingDefinition) + protected DatasetHolder newDatasetHolder() { - String title = chartingDefinition.getChartTitle(); - String xAxisTitle = chartingDefinition.getXAxisTitle(); - String yAxisTitle = chartingDefinition.getYAxisTitle(); - - final DefaultXYDataset dataset = new DefaultXYDataset(); - _seriesBuilder.setSeriesBuilderCallback(new SeriesBuilderCallback() + return new DatasetHolder() { + private final DefaultXYDataset _dataset = new DefaultXYDataset(); private List _xyPairs = null; @Override @@ -69,12 +63,11 @@ public abstract class XYDataSetBasedChartBuilder extends BaseChartBuilder _xyPairs.add(new Double[] {x, y}); } - @Override public void endSeries(SeriesDefinition seriesDefinition) { double[][] seriesData = listToSeriesDataArray(); - dataset.addSeries(seriesDefinition.getSeriesLegend(), seriesData); + _dataset.addSeries(seriesDefinition.getSeriesLegend(), seriesData); } @Override @@ -93,18 +86,22 @@ public abstract class XYDataSetBasedChartBuilder extends BaseChartBuilder seriesData[0][i] = xyPair[0]; seriesData[1][i] = xyPair[1]; i++; - } + } return seriesData; } - }); - _seriesBuilder.build(chartingDefinition.getSeries()); - - final JFreeChart chart = createChartImpl(title, xAxisTitle, yAxisTitle, - dataset, PLOT_ORIENTATION, SHOW_LEGEND, SHOW_TOOL_TIPS, SHOW_URLS); + @Override + public Dataset getPopulatedDataset() + { + return _dataset; + } + }; + } - addCommonChartAttributes(chart, chartingDefinition); - addSeriesAttributes(chart, chartingDefinition.getSeries(), new SeriesStrokeAndPaintApplier() + @Override + protected SeriesStrokeAndPaintApplier newStrokeAndPaintApplier() + { + return new SeriesStrokeAndPaintApplier() { @Override public void setSeriesStroke(int seriesIndex, Stroke stroke, JFreeChart targetChart) @@ -117,8 +114,6 @@ public abstract class XYDataSetBasedChartBuilder extends BaseChartBuilder { targetChart.getXYPlot().getRenderer().setSeriesPaint(seriesIndex, colour); } - }); - - return chart; + }; } } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/ChartingDefinition.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/ChartingDefinition.java index 6bef7c313e..bfe47e598e 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/ChartingDefinition.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/ChartingDefinition.java @@ -89,7 +89,7 @@ public class ChartingDefinition return _chartType; } - public List getSeries() + public List getSeriesDefinitions() { return Collections.unmodifiableList(_seriesDefinitions); } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/DatasetHolder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/DatasetHolder.java new file mode 100644 index 0000000000..14fd50facc --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/DatasetHolder.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.disttest.charting.seriesbuilder; + +import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.jfree.data.general.Dataset; + +/** + * Accepts data in the form of {@link SeriesDefinition}s and {@link SeriesRow}s, + * and returns it as a {@link Dataset} for use by a JFreeChart chart. + */ +public interface DatasetHolder +{ + int getNumberOfDimensions(); + void beginSeries(SeriesDefinition seriesDefinition); + void addDataPointToSeries(SeriesDefinition seriesDefinition, SeriesRow row); + void endSeries(SeriesDefinition seriesDefinition); + + Dataset getPopulatedDataset(); +} diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcSeriesBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcSeriesBuilder.java index 525d29151a..180aa54c6d 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcSeriesBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcSeriesBuilder.java @@ -31,6 +31,7 @@ import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; import org.apache.qpid.disttest.charting.ChartingException; import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.jfree.data.general.Dataset; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,7 +43,7 @@ public class JdbcSeriesBuilder implements SeriesBuilder { private static final Logger LOGGER = LoggerFactory.getLogger(JdbcSeriesBuilder.class); - private SeriesBuilderCallback _callback; + private DatasetHolder _datasetHolder; private final JdbcUrlGenerator _jdbcUrlGenerator; @@ -58,19 +59,20 @@ public class JdbcSeriesBuilder implements SeriesBuilder } @Override - public void setSeriesBuilderCallback(SeriesBuilderCallback callback) + public void setDatasetHolder(DatasetHolder callback) { - this._callback = callback; + _datasetHolder = callback; } @Override - public void build(List seriesDefinitions) + public Dataset build(List seriesDefinitions) { for (Iterator iterator = seriesDefinitions.iterator(); iterator.hasNext();) { SeriesDefinition series = iterator.next(); buildDataSetForSingleSeries(series); } + return _datasetHolder.getPopulatedDataset(); } private void buildDataSetForSingleSeries(SeriesDefinition seriesDefinition) @@ -87,7 +89,7 @@ public class JdbcSeriesBuilder implements SeriesBuilder stmt = conn.createStatement(); ResultSet results = stmt.executeQuery(seriesStatement); int columnCount = results.getMetaData().getColumnCount(); - _callback.beginSeries(seriesDefinition); + _datasetHolder.beginSeries(seriesDefinition); while (results.next()) { Object[] row = new Object[columnCount]; @@ -96,10 +98,10 @@ public class JdbcSeriesBuilder implements SeriesBuilder row[i] = results.getObject(i+1); } - SeriesRow seriesRow = SeriesRow.createValidSeriesRow(_callback.getNumberOfDimensions(), row); - _callback.addDataPointToSeries(seriesDefinition, seriesRow); + SeriesRow seriesRow = SeriesRow.createValidSeriesRow(_datasetHolder.getNumberOfDimensions(), row); + _datasetHolder.addDataPointToSeries(seriesDefinition, seriesRow); } - _callback.endSeries(seriesDefinition); + _datasetHolder.endSeries(seriesDefinition); } catch (SQLException e) { diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesBuilder.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesBuilder.java index 0dfba304a9..a865c838c6 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesBuilder.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesBuilder.java @@ -22,18 +22,20 @@ package org.apache.qpid.disttest.charting.seriesbuilder; import java.util.List; import org.apache.qpid.disttest.charting.definition.SeriesDefinition; +import org.jfree.data.general.Dataset; public interface SeriesBuilder { /** * Uses the supplied {@link SeriesDefinition}s to read the series data - * and pass it to the callback set up in {@link #setSeriesBuilderCallback(SeriesBuilderCallback)}. + * and pass it to the dataset holder set up in {@link #setDatasetHolder(DatasetHolder)}. + * + * @return the populated dataset */ - void build(List seriesDefinitions); + Dataset build(List seriesDefinitions); /** - * Stores the supplied callback so it can be used in {@link #build(List)}. + * Stores the supplied dataset holder so it can be populated in {@link #build(List)}. */ - void setSeriesBuilderCallback(SeriesBuilderCallback seriesBuilderCallback); - + void setDatasetHolder(DatasetHolder datasetHolder); } \ No newline at end of file diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesBuilderCallback.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesBuilderCallback.java deleted file mode 100644 index c9c35d26b4..0000000000 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesBuilderCallback.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ -package org.apache.qpid.disttest.charting.seriesbuilder; - -import org.apache.qpid.disttest.charting.definition.SeriesDefinition; - -public interface SeriesBuilderCallback -{ - public void beginSeries(SeriesDefinition seriesDefinition); - - public int getNumberOfDimensions(); - public void addDataPointToSeries(SeriesDefinition seriesDefinition, SeriesRow row); - public void endSeries(SeriesDefinition seriesDefinition); -} diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesRow.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesRow.java index 6c87b88c45..9c16866939 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesRow.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/seriesbuilder/SeriesRow.java @@ -19,6 +19,7 @@ package org.apache.qpid.disttest.charting.seriesbuilder; import java.util.Arrays; +import java.util.Date; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; @@ -63,6 +64,11 @@ public class SeriesRow return Double.parseDouble(dimensionAsString(dimension)); } + public Date dimensionAsDate(int dimension) + { + return (Date) dimension(dimension); + } + @Override public int hashCode() { -- cgit v1.2.1