diff options
| author | Keith Wall <kwall@apache.org> | 2012-09-20 22:56:15 +0000 |
|---|---|---|
| committer | Keith Wall <kwall@apache.org> | 2012-09-20 22:56:15 +0000 |
| commit | 884393e19dea9e23ee9dba9abe77b80d68f17af5 (patch) | |
| tree | abc240d6998bf8f123501eae4ef970c8ce8bd0a3 /qpid/java/perftests | |
| parent | 6a19ed06e9fb321c1f8dc27b99b70565dfed82b1 (diff) | |
| download | qpid-python-884393e19dea9e23ee9dba9abe77b80d68f17af5.tar.gz | |
QPID-4338: Performance tests charting: Support long chart descriptions and allow colour/stroke to be controlled
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1388256 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/perftests')
18 files changed, 323 insertions, 38 deletions
diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/ChartingUtil.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/ChartingUtil.java index e00859855e..82a3a8c140 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/ChartingUtil.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/ChartingUtil.java @@ -98,7 +98,7 @@ public class ChartingUtil { ChartBuilder chartBuilder = ChartBuilderFactory.createChartBuilder(chartingDefinition.getChartType(), seriesBuilder); JFreeChart chart = chartBuilder.buildChart(chartingDefinition); - writer.writeChartToFileSystem(chart, chartingDefinition.getChartStemName()); + writer.writeChartToFileSystem(chart, chartingDefinition); } writer.writeHtmlSummaryToFileSystem(); 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 def87f5840..0be86fc747 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,10 +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.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.title.ShortTextTitle; @@ -38,6 +41,22 @@ public abstract class BaseChartBuilder implements ChartBuilder setBackgroundColour(chart); } + public void addSeriesAttributes(List<SeriesDefinition> series, SeriesStokeAndPaintAccessor stokeAndPaintAccessor) + { + for (int i = 0; i < series.size(); i++) + { + SeriesDefinition seriesDefinition = series.get(i); + if (seriesDefinition.getSeriesColourName() != null) + { + stokeAndPaintAccessor.setSeriesPaint(i, ColorFactory.toColour(seriesDefinition.getSeriesColourName())); + } + if (seriesDefinition.getStrokeWidth() != null) + { + stokeAndPaintAccessor.setSeriesStroke(i, new BasicStroke(seriesDefinition.getStrokeWidth())); + } + } + } + private void addSubtitle(JFreeChart chart, ChartingDefinition chartingDefinition) { if (chartingDefinition.getChartSubtitle() != null) 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 a6c63f4560..cd56b0c967 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,6 +20,9 @@ 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; @@ -72,12 +75,26 @@ public abstract class CategoryDataSetBasedChartBuilder extends BaseChartBuilder _seriesBuilder.build(chartingDefinition.getSeries()); - JFreeChart chart = createChartImpl(title, xAxisTitle, yAxisTitle, + 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(chartingDefinition.getSeries(), new SeriesStokeAndPaintAccessor() + { + @Override + public void setSeriesStroke(int seriesIndex, Stroke stroke) + { + chart.getCategoryPlot().getRenderer().setSeriesStroke(seriesIndex, stroke); + } + + @Override + public void setSeriesPaint(int seriesIndex, Color colour) + { + chart.getCategoryPlot().getRenderer().setSeriesPaint(seriesIndex, colour); + } + }); return chart; } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/ColorFactory.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/ColorFactory.java new file mode 100644 index 0000000000..942d42ad73 --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/ColorFactory.java @@ -0,0 +1,67 @@ +/* + * 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; + +public class ColorFactory +{ + + /** + * Converts a colour name known to the JDK into a {@link Color} instance. Additionally, + * if the work dark_ is prepended to the colour, a darker shade of the same colour is + * produced. + * + * @param colourName + * @return colour instance + */ + public static Color toColour(String colourName) + { + boolean darkVersion = false; + if (colourName.toLowerCase().startsWith("dark_")) + { + colourName = colourName.replaceFirst("(?i)dark_", ""); + darkVersion = true; + } + + Color colour = getColourFromStaticField(colourName); + if (darkVersion) + { + return colour.darker(); + } + else + { + return colour; + } + } + + protected static Color getColourFromStaticField(String colourName) + { + try + { + return (Color) Color.class.getField(colourName.toLowerCase()).get(null); + } + catch (Exception e) + { + throw new RuntimeException("Could not find colour for " + colourName, e); + } + } + +} diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/SeriesStokeAndPaintAccessor.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/SeriesStokeAndPaintAccessor.java new file mode 100644 index 0000000000..75c3f9d3f2 --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/chartbuilder/SeriesStokeAndPaintAccessor.java @@ -0,0 +1,32 @@ +/* + * 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; + +public interface SeriesStokeAndPaintAccessor +{ + + void setSeriesStroke(int i, Stroke stroke); + + void setSeriesPaint(int i, Color blue); + +} 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 87d61ca2ee..2af8395516 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 @@ -19,6 +19,8 @@ */ package org.apache.qpid.disttest.charting.chartbuilder; +import java.awt.Color; +import java.awt.Stroke; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -28,7 +30,6 @@ import org.apache.qpid.disttest.charting.definition.SeriesDefinition; import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilderCallback; import org.apache.qpid.disttest.charting.seriesbuilder.SeriesBuilder; import org.jfree.chart.JFreeChart; -import org.jfree.chart.axis.CategoryLabelPositions; import org.jfree.data.xy.DefaultXYDataset; @@ -93,10 +94,24 @@ public abstract class XYDataSetBasedChartBuilder extends BaseChartBuilder _seriesBuilder.build(chartingDefinition.getSeries()); - JFreeChart chart = createChartImpl(title, xAxisTitle, yAxisTitle, + final JFreeChart chart = createChartImpl(title, xAxisTitle, yAxisTitle, dataset, PLOT_ORIENTATION, SHOW_LEGEND, SHOW_TOOL_TIPS, SHOW_URLS); addCommonChartAttributes(chart, chartingDefinition); + addSeriesAttributes(chartingDefinition.getSeries(), new SeriesStokeAndPaintAccessor() + { + @Override + public void setSeriesStroke(int seriesIndex, Stroke stroke) + { + chart.getXYPlot().getRenderer().setSeriesStroke(seriesIndex, stroke); + } + + @Override + public void setSeriesPaint(int seriesIndex, Color colour) + { + chart.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 04b3f7ed3b..6bef7c313e 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 @@ -30,6 +30,7 @@ public class ChartingDefinition private final ChartType _chartType; private final String _chartTitle; private final String _chartSubtitle; + private final String _chartDescription; private final String _xaxisTitle; private final String _yaxisTitle; private final List<SeriesDefinition> _seriesDefinitions; @@ -39,12 +40,14 @@ public class ChartingDefinition final ChartType chartType, final String chartTitle, final String chartSubtitle, + final String chartDescription, final String xaxisTitle, final String yaxisTitle, List<SeriesDefinition> seriesDefinitions) { _chartStemName = chartStemName; _chartType = chartType; _chartTitle = chartTitle; _chartSubtitle = chartSubtitle; + _chartDescription = chartDescription; _xaxisTitle = xaxisTitle; _yaxisTitle = yaxisTitle; _seriesDefinitions = seriesDefinitions; @@ -65,6 +68,10 @@ public class ChartingDefinition return _chartSubtitle; } + public String getChartDescription() + { + return _chartDescription; + } public String getXAxisTitle() { @@ -77,8 +84,6 @@ public class ChartingDefinition return _yaxisTitle; } - - public ChartType getChartType() { return _chartType; @@ -89,5 +94,4 @@ public class ChartingDefinition return Collections.unmodifiableList(_seriesDefinitions); } - } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreator.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreator.java index 4cbc9318a9..1988f561b6 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreator.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreator.java @@ -39,6 +39,7 @@ public class ChartingDefinitionCreator public static final String CHART_TYPE_KEY = "chartType"; public static final String CHART_TITLE_KEY = "chartTitle"; public static final String CHART_SUBTITLE_KEY = "chartSubtitle"; + public static final String CHART_DESCRIPTION_KEY = "chartDescription"; public static final String XAXIS_TITLE_KEY = "xAxisTitle"; public static final String YAXIS_TITLE_KEY = "yAxisTitle"; @@ -82,6 +83,7 @@ public class ChartingDefinitionCreator final ChartType chartType = ChartType.valueOf(props.getProperty(CHART_TYPE_KEY)); final String chartTitle = props.getProperty(CHART_TITLE_KEY); final String chartSubtitle = props.getProperty(CHART_SUBTITLE_KEY); + final String chartDescription = props.getProperty(CHART_DESCRIPTION_KEY); final String xAxisTitle = props.getProperty(XAXIS_TITLE_KEY); final String yAxisTitle = props.getProperty(YAXIS_TITLE_KEY); @@ -91,8 +93,8 @@ public class ChartingDefinitionCreator chartType, chartTitle, chartSubtitle, - xAxisTitle, - yAxisTitle, seriesDefinitions); + chartDescription, + xAxisTitle, yAxisTitle, seriesDefinitions); return chartDefinition; } catch (IOException e) diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/SeriesDefinition.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/SeriesDefinition.java index a39e906957..61373e0ebb 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/SeriesDefinition.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/SeriesDefinition.java @@ -24,12 +24,16 @@ public class SeriesDefinition private final String _seriesStatement; private final String _seriesLegend; private final String _seriesDirectory; + private final String _seriesColourName; + private final Integer _seriesStrokeWidth; - public SeriesDefinition(String seriesStatement, String seriesLegend, String seriesDirectory) + public SeriesDefinition(String seriesStatement, String seriesLegend, String seriesDirectory, String seriesColourName, Integer seriesStrokeWidth) { _seriesStatement = seriesStatement; _seriesLegend = seriesLegend; _seriesDirectory = seriesDirectory; + _seriesColourName = seriesColourName; + _seriesStrokeWidth = seriesStrokeWidth; } public String getSeriesStatement() @@ -47,4 +51,13 @@ public class SeriesDefinition return _seriesDirectory; } + public String getSeriesColourName() + { + return _seriesColourName; + } + + public Integer getStrokeWidth() + { + return _seriesStrokeWidth; + } } diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/SeriesDefinitionCreator.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/SeriesDefinitionCreator.java index fcc11807c8..d47e7488e1 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/SeriesDefinitionCreator.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/definition/SeriesDefinitionCreator.java @@ -30,6 +30,8 @@ public class SeriesDefinitionCreator public static final String SERIES_STATEMENT_KEY_FORMAT = "series.%d.statement"; public static final String SERIES_LEGEND_KEY_FORMAT = "series.%d.legend"; public static final String SERIES_DIRECTORY_KEY_FORMAT = "series.%d.dir"; + public static final String SERIES_COLOUR_NAME_FORMAT = "series.%d.colourName"; + public static final String SERIES_STROKE_WIDTH_FORMAT = "series.%d.strokeWidth"; public List<SeriesDefinition> createFromProperties(Properties properties) { @@ -42,10 +44,13 @@ public class SeriesDefinitionCreator String seriesStatement = properties.getProperty(String.format(SERIES_STATEMENT_KEY_FORMAT, index)); String seriesLegend = properties.getProperty(String.format(SERIES_LEGEND_KEY_FORMAT, index)); String seriesDir = StrSubstitutor.replaceSystemProperties(properties.getProperty(String.format(SERIES_DIRECTORY_KEY_FORMAT, index))); + String seriesColourName = properties.getProperty(String.format(SERIES_COLOUR_NAME_FORMAT, index)); + Integer seriesStrokeWidth = properties.getProperty(String.format(SERIES_STROKE_WIDTH_FORMAT, index)) == null + ? null : Integer.parseInt(properties.getProperty(String.format(SERIES_STROKE_WIDTH_FORMAT, index))); if (seriesStatement != null) { - final SeriesDefinition seriesDefinition = new SeriesDefinition(seriesStatement, seriesLegend, seriesDir); + final SeriesDefinition seriesDefinition = new SeriesDefinition(seriesStatement, seriesLegend, seriesDir, seriesColourName, seriesStrokeWidth); seriesDefinitions.add(seriesDefinition); } else diff --git a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/writer/ChartWriter.java b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/writer/ChartWriter.java index 5d4a9b6b7e..c5958a4914 100644 --- a/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/writer/ChartWriter.java +++ b/qpid/java/perftests/visualisation-jfc/src/main/java/org/apache/qpid/disttest/charting/writer/ChartWriter.java @@ -26,10 +26,11 @@ import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; -import java.util.SortedSet; -import java.util.TreeSet; +import java.util.SortedMap; +import java.util.TreeMap; import org.apache.qpid.disttest.charting.ChartingException; +import org.apache.qpid.disttest.charting.definition.ChartingDefinition; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.slf4j.Logger; @@ -42,19 +43,19 @@ public class ChartWriter static final String SUMMARY_FILE_NAME = "chart-summary.html"; private File _chartDirectory = new File("."); - private SortedSet<File> _chartFiles = new TreeSet<File>(); + private SortedMap<File,ChartingDefinition> _chartFilesToChartDef = new TreeMap<File, ChartingDefinition>(); - public void writeChartToFileSystem(JFreeChart chart, String chartStemName) + public void writeChartToFileSystem(JFreeChart chart, ChartingDefinition chartDef) { OutputStream pngOutputStream = null; try { - File pngFile = new File(_chartDirectory, chartStemName + ".png"); + File pngFile = new File(_chartDirectory, chartDef.getChartStemName() + ".png"); pngOutputStream = new BufferedOutputStream(new FileOutputStream(pngFile)); ChartUtilities.writeChartAsPNG(pngOutputStream, chart, 600, 400, true, 0); pngOutputStream.close(); - _chartFiles.add(pngFile); + _chartFilesToChartDef.put(pngFile, chartDef); LOGGER.info("Written {} chart", pngFile); } @@ -80,9 +81,9 @@ public class ChartWriter public void writeHtmlSummaryToFileSystem() { - if(_chartFiles.size() < 2) + if(_chartFilesToChartDef.size() < 2) { - LOGGER.info("Only " + _chartFiles.size() + " chart image(s) have been written so no HTML summary file will be produced"); + LOGGER.info("Only {} chart image(s) have been written so no HTML summary file will be produced", _chartFilesToChartDef.size()); return; } @@ -90,6 +91,7 @@ public class ChartWriter "<html>\n" + " <head>\n" + " <title>Performance Charts</title>\n" + + " <style type='text/css'>figure { float: left; display: table; width: 87px;}</style>\n" + " </head>\n" + " <body>\n"; @@ -101,22 +103,29 @@ public class ChartWriter try { File summaryFile = new File(_chartDirectory, SUMMARY_FILE_NAME); - LOGGER.debug("About to produce HTML summary file " + summaryFile.getAbsolutePath() + " from charts " + _chartFiles); + LOGGER.debug("About to produce HTML summary file " + summaryFile.getAbsolutePath() + " from charts " + _chartFilesToChartDef); writer = new BufferedWriter(new FileWriter(summaryFile)); writer.write(htmlHeader); writer.write(" <ul>\n"); - for (File chartFile : _chartFiles) + for (File chartFile : _chartFilesToChartDef.keySet()) { writer.write(" <li><a href='#"+ chartFile.getName() +"'>" + chartFile.getName() + "</a></li>\n"); } writer.write(" </ul>\n"); - for (File chartFile : _chartFiles) + for (File chartFile : _chartFilesToChartDef.keySet()) { + ChartingDefinition def = _chartFilesToChartDef.get(chartFile); writer.write(" <a name='" + chartFile.getName() + "'/>\n"); - writer.write(" <img src='" + chartFile.getName() + "'/>\n"); + writer.write(" <figure>\n"); + writer.write(" <img src='" + chartFile.getName() + "'/>\n"); + if (def.getChartDescription() != null) + { + writer.write(" <figcaption>" + def.getChartDescription() + "</figcaption>\n"); + } + writer.write(" </figure>\n"); } writer.write(htmlFooter); writer.close(); diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java index 2744e17404..96ec917932 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ChartProductionTest.java @@ -66,7 +66,10 @@ public class ChartProductionTest extends TestCase super.setUp(); when(_seriesDefinition.getSeriesLegend()).thenReturn(TEST_SERIESLEGEND); + when(_seriesDefinition.getStrokeWidth()).thenReturn(null); + when(_seriesDefinition.getSeriesColourName()).thenReturn(null); + when(_chartingDefinition.getChartStemName()).thenReturn(getName()); when(_chartingDefinition.getChartTitle()).thenReturn(TEST_CHARTTITLE); when(_chartingDefinition.getChartSubtitle()).thenReturn(TEST_CHARTSUBTITLE); when(_chartingDefinition.getXAxisTitle()).thenReturn(TEST_XAXIS); @@ -116,6 +119,15 @@ public class ChartProductionTest extends TestCase assertChartTitlesAndWriteToFile(builder); } + public void testXYLineChartWithColourAndWidth() throws Exception + { + when(_seriesDefinition.getStrokeWidth()).thenReturn(3); + when(_seriesDefinition.getSeriesColourName()).thenReturn("dark_orange"); + + ChartBuilder builder = ChartBuilderFactory.createChartBuilder(ChartType.XYLINE, new SampleSeriesBuilder()); + assertChartTitlesAndWriteToFile(builder); + } + public void testStatiscticalBarChart() throws Exception { ChartBuilder builder = ChartBuilderFactory.createChartBuilder( @@ -166,7 +178,7 @@ public class ChartProductionTest extends TestCase assertEquals(1, chart.getCategoryPlot().getDatasetCount()); } - _writer.writeChartToFileSystem(chart, getName()); + _writer.writeChartToFileSystem(chart, _chartingDefinition); } private class SampleSeriesBuilder implements SeriesBuilder diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ColorFactoryTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ColorFactoryTest.java new file mode 100644 index 0000000000..e331dbac56 --- /dev/null +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/chartbuilder/ColorFactoryTest.java @@ -0,0 +1,44 @@ +/* + * 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 org.apache.qpid.disttest.charting.chartbuilder.ColorFactory; + +import junit.framework.TestCase; + +public class ColorFactoryTest extends TestCase +{ + public void testBlue() + { + assertEquals(Color.blue, ColorFactory.toColour("blue")); + assertEquals(Color.blue, ColorFactory.toColour("BLUE")); + assertEquals(Color.blue, ColorFactory.toColour("Blue")); + } + + public void testDarkBlue() + { + assertEquals(Color.blue.darker(), ColorFactory.toColour("dark_blue")); + assertEquals(Color.blue.darker(), ColorFactory.toColour("DARK_BLUE")); + assertEquals(Color.blue.darker(), ColorFactory.toColour("Dark_Blue")); + } + +}
\ No newline at end of file diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreatorTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreatorTest.java index 5371f3df45..a626ad9466 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreatorTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/ChartingDefinitionCreatorTest.java @@ -21,6 +21,7 @@ package org.apache.qpid.disttest.charting.definition; import static org.apache.qpid.disttest.charting.definition.ChartingDefinitionCreator.CHART_TITLE_KEY; import static org.apache.qpid.disttest.charting.definition.ChartingDefinitionCreator.CHART_SUBTITLE_KEY; +import static org.apache.qpid.disttest.charting.definition.ChartingDefinitionCreator.CHART_DESCRIPTION_KEY; import static org.apache.qpid.disttest.charting.definition.ChartingDefinitionCreator.CHART_TYPE_KEY; import static org.apache.qpid.disttest.charting.definition.ChartingDefinitionCreator.XAXIS_TITLE_KEY; import static org.apache.qpid.disttest.charting.definition.ChartingDefinitionCreator.YAXIS_TITLE_KEY; @@ -40,6 +41,7 @@ public class ChartingDefinitionCreatorTest extends TestCase { private static final String TEST_CHART_TITLE = "CHART_TITLE"; private static final String TEST_CHART_SUBTITLE = "CHART_SUBTITLE"; + private static final String TEST_CHART_DESCRIPTION = "CHART_DESCRIPTION"; private static final String TEST_XAXIS_TITLE = "XAXIS_TITLE"; private static final String TEST_YAXIS_TITLE = "YAXIS_TITLE"; private static final ChartType TEST_CHART_TYPE = ChartType.LINE; @@ -86,6 +88,7 @@ public class ChartingDefinitionCreatorTest extends TestCase ChartingDefinition definition1 = definitions.get(0); assertEquals(TEST_CHART_TITLE, definition1.getChartTitle()); assertEquals(TEST_CHART_SUBTITLE, definition1.getChartSubtitle()); + assertEquals(TEST_CHART_DESCRIPTION, definition1.getChartDescription()); assertEquals(TEST_XAXIS_TITLE, definition1.getXAxisTitle()); assertEquals(TEST_YAXIS_TITLE, definition1.getYAxisTitle()); assertEquals(TEST_CHART_TYPE, definition1.getChartType()); @@ -125,6 +128,7 @@ public class ChartingDefinitionCreatorTest extends TestCase props.setProperty(CHART_TYPE_KEY, TEST_CHART_TYPE.name()); props.setProperty(CHART_TITLE_KEY, TEST_CHART_TITLE); props.setProperty(CHART_SUBTITLE_KEY, TEST_CHART_SUBTITLE); + props.setProperty(CHART_DESCRIPTION_KEY, TEST_CHART_DESCRIPTION); props.setProperty(XAXIS_TITLE_KEY, TEST_XAXIS_TITLE); props.setProperty(YAXIS_TITLE_KEY, TEST_YAXIS_TITLE); diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/SeriesDefinitionCreatorTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/SeriesDefinitionCreatorTest.java index 2187793c53..52e8cdaf93 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/SeriesDefinitionCreatorTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/definition/SeriesDefinitionCreatorTest.java @@ -22,6 +22,8 @@ package org.apache.qpid.disttest.charting.definition; import static org.apache.qpid.disttest.charting.definition.SeriesDefinitionCreator.SERIES_DIRECTORY_KEY_FORMAT; import static org.apache.qpid.disttest.charting.definition.SeriesDefinitionCreator.SERIES_LEGEND_KEY_FORMAT; import static org.apache.qpid.disttest.charting.definition.SeriesDefinitionCreator.SERIES_STATEMENT_KEY_FORMAT; +import static org.apache.qpid.disttest.charting.definition.SeriesDefinitionCreator.SERIES_COLOUR_NAME_FORMAT; +import static org.apache.qpid.disttest.charting.definition.SeriesDefinitionCreator.SERIES_STROKE_WIDTH_FORMAT; import java.util.List; import java.util.Properties; @@ -33,6 +35,8 @@ public class SeriesDefinitionCreatorTest extends TestCase private static final String TEST_SERIES_1_SELECT_STATEMENT = "SERIES_1_SELECT_STATEMENT"; private static final String TEST_SERIES_1_LEGEND = "SERIES_1_LEGEND"; private static final String TEST_SERIES_1_DIR = "SERIES_1_DIR"; + private static final String TEST_SERIES_1_COLOUR_NAME = "seriesColourName"; + private static final Integer TEST_SERIES_1_STROKE_WIDTH = 1;; private static final String TEST_SERIES_1_DIR_WITH_SYSPROP = "${java.io.tmpdir}/mydir"; @@ -52,7 +56,7 @@ public class SeriesDefinitionCreatorTest extends TestCase public void testOneSeriesDefinition() throws Exception { - createTestProperties(1, TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, TEST_SERIES_1_DIR); + createTestProperties(1, TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, TEST_SERIES_1_DIR, TEST_SERIES_1_COLOUR_NAME, TEST_SERIES_1_STROKE_WIDTH); List<SeriesDefinition> definitions = _seriesDefinitionLoader.createFromProperties(_properties); assertEquals(1, definitions.size()); @@ -61,12 +65,14 @@ public class SeriesDefinitionCreatorTest extends TestCase assertEquals(TEST_SERIES_1_SELECT_STATEMENT, definition.getSeriesStatement()); assertEquals(TEST_SERIES_1_LEGEND, definition.getSeriesLegend()); assertEquals(TEST_SERIES_1_DIR, definition.getSeriesDirectory()); + assertEquals(TEST_SERIES_1_COLOUR_NAME, definition.getSeriesColourName()); + assertEquals(TEST_SERIES_1_STROKE_WIDTH, definition.getStrokeWidth()); } public void testTwoSeriesDefinitions() throws Exception { - createTestProperties(1, TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, TEST_SERIES_1_DIR); - createTestProperties(2, TEST_SERIES_2_SELECT_STATEMENT, TEST_SERIES_2_LEGEND, TEST_SERIES_2_DIR); + createTestProperties(1, TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, TEST_SERIES_1_DIR, TEST_SERIES_1_COLOUR_NAME, TEST_SERIES_1_STROKE_WIDTH); + createTestProperties(2, TEST_SERIES_2_SELECT_STATEMENT, TEST_SERIES_2_LEGEND, TEST_SERIES_2_DIR, null, null); List<SeriesDefinition> definitions = _seriesDefinitionLoader.createFromProperties(_properties); assertEquals(2, definitions.size()); @@ -84,8 +90,8 @@ public class SeriesDefinitionCreatorTest extends TestCase public void testNonSequentialSeriesDefinitionsIgnored() throws Exception { - createTestProperties(1, TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, TEST_SERIES_1_DIR); - createTestProperties(3, TEST_SERIES_2_SELECT_STATEMENT, TEST_SERIES_2_LEGEND, TEST_SERIES_2_DIR); + createTestProperties(1, TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, TEST_SERIES_1_DIR, TEST_SERIES_1_COLOUR_NAME, TEST_SERIES_1_STROKE_WIDTH); + createTestProperties(3, TEST_SERIES_2_SELECT_STATEMENT, TEST_SERIES_2_LEGEND, TEST_SERIES_2_DIR, null, null); List<SeriesDefinition> definitions = _seriesDefinitionLoader.createFromProperties(_properties); assertEquals(1, definitions.size()); @@ -94,7 +100,7 @@ public class SeriesDefinitionCreatorTest extends TestCase public void testSeriesDirectorySubstitution() throws Exception { final String tmpDir = System.getProperty("java.io.tmpdir"); - createTestProperties(1, TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, TEST_SERIES_1_DIR_WITH_SYSPROP); + createTestProperties(1, TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, TEST_SERIES_1_DIR_WITH_SYSPROP, null, null); List<SeriesDefinition> definitions = _seriesDefinitionLoader.createFromProperties(_properties); assertEquals(1, definitions.size()); @@ -103,11 +109,19 @@ public class SeriesDefinitionCreatorTest extends TestCase assertTrue(seriesDefinition1.getSeriesDirectory().startsWith(tmpDir)); } - private void createTestProperties(int index, String selectStatement, String seriesLegend, String seriesDir) throws Exception + private void createTestProperties(int index, String selectStatement, String seriesLegend, String seriesDir, String seriesColourName, Integer seriesStrokeWidth) throws Exception { _properties.setProperty(String.format(SERIES_STATEMENT_KEY_FORMAT, index), selectStatement); _properties.setProperty(String.format(SERIES_LEGEND_KEY_FORMAT, index), seriesLegend); _properties.setProperty(String.format(SERIES_DIRECTORY_KEY_FORMAT, index), seriesDir); + if (seriesColourName != null) + { + _properties.setProperty(String.format(SERIES_COLOUR_NAME_FORMAT, index), seriesColourName); + } + if (seriesStrokeWidth != null) + { + _properties.setProperty(String.format(SERIES_STROKE_WIDTH_FORMAT, index), seriesStrokeWidth.toString()); + } } } diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcCsvSeriesBuilderTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcCsvSeriesBuilderTest.java index 5148a25bec..dfe35ee199 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcCsvSeriesBuilderTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/seriesbuilder/JdbcCsvSeriesBuilderTest.java @@ -37,6 +37,8 @@ public class JdbcCsvSeriesBuilderTest extends TestCase { private static final String TEST_SERIES_1_SELECT_STATEMENT = "SELECT A, B FROM test"; private static final String TEST_SERIES_1_LEGEND = "SERIES_1_LEGEND"; + private static final String TEST_SERIES1_COLOUR_NAME = "blue"; + private static final Integer TEST_SERIES1_STROKE_WIDTH = 3; private SeriesBuilderCallback _seriesWalkerCallback = mock(SeriesBuilderCallback.class); private JdbcCsvSeriesBuilder _seriesBuilder = new JdbcCsvSeriesBuilder(); @@ -79,7 +81,7 @@ public class JdbcCsvSeriesBuilderTest extends TestCase private SeriesDefinition createTestSeriesDefinition() { - SeriesDefinition definition = new SeriesDefinition(TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, _testTempDir.getAbsolutePath()); + SeriesDefinition definition = new SeriesDefinition(TEST_SERIES_1_SELECT_STATEMENT, TEST_SERIES_1_LEGEND, _testTempDir.getAbsolutePath(), TEST_SERIES1_COLOUR_NAME, TEST_SERIES1_STROKE_WIDTH); return definition; } diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/writer/ChartWriterTest.java b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/writer/ChartWriterTest.java index 0e176d326b..70998fec0c 100644 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/writer/ChartWriterTest.java +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/writer/ChartWriterTest.java @@ -20,6 +20,10 @@ */ package org.apache.qpid.disttest.charting.writer; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + + import java.io.File; import java.io.FileWriter; import java.io.InputStream; @@ -27,10 +31,12 @@ import java.util.Scanner; import junit.framework.TestCase; +import org.apache.qpid.disttest.charting.definition.ChartingDefinition; import org.apache.qpid.test.utils.TestFileUtils; import org.apache.qpid.util.FileUtils; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; +import org.jfree.chart.servlet.ChartDeleter; import org.jfree.data.general.DefaultPieDataset; public class ChartWriterTest extends TestCase @@ -59,22 +65,32 @@ public class ChartWriterTest extends TestCase public void testWriteChartToFileSystem() { + ChartingDefinition chartDef1 = mock(ChartingDefinition.class); + when(chartDef1.getChartStemName()).thenReturn("chart1"); + File chart1File = new File(_chartDir, "chart1.png"); assertFalse("chart1 png should not exist yet", chart1File.exists()); - _writer.writeChartToFileSystem(_chart1, "chart1"); + _writer.writeChartToFileSystem(_chart1, chartDef1); assertTrue("chart1 png does not exist", chart1File.exists()); } public void testWriteHtmlSummaryToFileSystemOverwritingExistingFile() throws Exception { + ChartingDefinition chartDef1 = mock(ChartingDefinition.class); + when(chartDef1.getChartStemName()).thenReturn("chart1"); + when(chartDef1.getChartDescription()).thenReturn("chart description1"); + + ChartingDefinition chartDef2 = mock(ChartingDefinition.class); + when(chartDef2.getChartStemName()).thenReturn("chart2"); + File summaryFile = new File(_chartDir, ChartWriter.SUMMARY_FILE_NAME); writeDummyContentToSummaryFileToEnsureItGetsOverwritten(summaryFile); - _writer.writeChartToFileSystem(_chart2, "chart2"); - _writer.writeChartToFileSystem(_chart1, "chart1"); + _writer.writeChartToFileSystem(_chart2, chartDef2); + _writer.writeChartToFileSystem(_chart1, chartDef1); _writer.writeHtmlSummaryToFileSystem(); @@ -87,9 +103,13 @@ public class ChartWriterTest extends TestCase public void testWriteHtmlSummaryToFileSystemDoesNothingIfLessThanTwoCharts() { + ChartingDefinition chartDef1 = mock(ChartingDefinition.class); + when(chartDef1.getChartStemName()).thenReturn("chart1"); + when(chartDef1.getChartDescription()).thenReturn("chart description1"); + File summaryFile = new File(_chartDir, ChartWriter.SUMMARY_FILE_NAME); - _writer.writeChartToFileSystem(_chart1, "chart1"); + _writer.writeChartToFileSystem(_chart1, chartDef1); _writer.writeHtmlSummaryToFileSystem(); diff --git a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/writer/expected-chart-summary.html b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/writer/expected-chart-summary.html index 89c508a77e..4b9c2d1713 100755 --- a/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/writer/expected-chart-summary.html +++ b/qpid/java/perftests/visualisation-jfc/src/test/java/org/apache/qpid/disttest/charting/writer/expected-chart-summary.html @@ -1,6 +1,7 @@ <html> <head> <title>Performance Charts</title> + <style type='text/css'>figure { float: left; display: table; width: 87px;}</style> </head> <body> <ul> @@ -8,8 +9,13 @@ <li><a href='#chart2.png'>chart2.png</a></li> </ul> <a name='chart1.png'/> - <img src='chart1.png'/> + <figure> + <img src='chart1.png'/> + <figcaption>chart description1</figcaption> + </figure> <a name='chart2.png'/> - <img src='chart2.png'/> + <figure> + <img src='chart2.png'/> + </figure> </body> </html>
\ No newline at end of file |
