Revision: 187
http://polepos.svn.sourceforge.net/polepos/?rev=187&view=rev
Author: patrickroemer
Date: 2011-02-17 18:36:49 +0000 (Thu, 17 Feb 2011)
Log Message:
-----------
cr/pr: extract rendering reporter from graph reporter
Modified Paths:
--------------
trunk/polepos/src/org/polepos/reporters/CSVReporter.java
trunk/polepos/src/org/polepos/reporters/CheckSumReporter.java
trunk/polepos/src/org/polepos/reporters/GraphReporter.java
trunk/polepos/src/org/polepos/reporters/HTMLReporter.java
trunk/polepos/src/org/polepos/reporters/PDFReporterBase.java
Added Paths:
-----------
trunk/polepos/src/org/polepos/reporters/PersistGraphReporter.java
trunk/polepos/src/org/polepos/reporters/RenderingReporter.java
Modified: trunk/polepos/src/org/polepos/reporters/CSVReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/CSVReporter.java 2011-02-17 17:15:21 UTC (rev 186)
+++ trunk/polepos/src/org/polepos/reporters/CSVReporter.java 2011-02-17 18:36:49 UTC (rev 187)
@@ -20,7 +20,6 @@
package org.polepos.reporters;
import java.io.*;
-import java.util.*;
import org.polepos.framework.*;
@@ -85,7 +84,10 @@
}
}
- protected void finish(List <TeamCar> cars) {
+ @Override
+ public void endSeason() {
+ // TODO Auto-generated method stub
+
}
}
Modified: trunk/polepos/src/org/polepos/reporters/CheckSumReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/CheckSumReporter.java 2011-02-17 17:15:21 UTC (rev 186)
+++ trunk/polepos/src/org/polepos/reporters/CheckSumReporter.java 2011-02-17 18:36:49 UTC (rev 187)
@@ -20,10 +20,7 @@
package org.polepos.reporters;
-import java.util.*;
-import org.polepos.framework.*;
-
public class CheckSumReporter extends GraphReporter {
public CheckSumReporter(String path) {
@@ -31,11 +28,6 @@
}
@Override
- protected void finish(List<TeamCar> cars) {
- // do nothing
- }
-
- @Override
protected void report(Graph graph) {
graph.compareCheckSums();
}
Modified: trunk/polepos/src/org/polepos/reporters/GraphReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/GraphReporter.java 2011-02-17 17:15:21 UTC (rev 186)
+++ trunk/polepos/src/org/polepos/reporters/GraphReporter.java 2011-02-17 18:36:49 UTC (rev 187)
@@ -19,359 +19,76 @@
package org.polepos.reporters;
-import java.awt.*;
-import java.io.*;
import java.util.*;
-import java.util.List;
-import org.jfree.chart.*;
-import org.jfree.chart.axis.*;
-import org.jfree.chart.plot.*;
-import org.jfree.chart.renderer.category.*;
-import org.jfree.chart.title.*;
-import org.jfree.data.category.*;
-import org.jfree.ui.*;
import org.polepos.framework.*;
-import org.polepos.util.*;
-import com.db4o.*;
+public abstract class GraphReporter extends ReporterBase {
-
-public abstract class GraphReporter extends ReporterBase{
-
- public GraphReporter(String path) {
- super(path);
-
- }
-
- private Map<CircuitLap,Graph> mGraphs;
- private java.util.List<Circuit> mCircuits;
- protected final DefaultCategoryDataset _overviewTimeDataset = new DefaultCategoryDataset();
- protected final DefaultCategoryDataset _overviewMemoryDataset = new DefaultCategoryDataset();
- protected final DefaultCategoryDataset _overviewSizeDataset = new DefaultCategoryDataset();
-
+ protected Map<CircuitLap,Graph> mGraphs;
+ private java.util.List<Circuit> mCircuits;
public static int timeIndex = 0;
public static int memoryIndex = 0;
public static int sizeIndex = 0;
-
- @Override
- public void startSeason() {
- }
-
- @Override
- public boolean append() {
- return false;
- }
-
- @Override
- public void reportTaskNames(String[] taskNames){
- // do nothing
- }
- @Override
- public void reportTeam(Team team) {
- // do nothing
- }
+ public GraphReporter(String path) {
+ super(path);
+ }
- @Override
- public void reportCar(Car car) {
- // do nothing
- }
-
- @Override
- public void beginResults() {
- }
-
- @Override
- public void reportResult(Result result) {
-
- if(mGraphs == null){
- mGraphs = new LinkedHashMap<CircuitLap,Graph>();
- }
-
- if(mCircuits == null){
- mCircuits = new ArrayList <Circuit>();
- }
-
- Circuit circuit = result.getCircuit();
-
- if(! mCircuits.contains(circuit)){
- mCircuits.add(circuit);
- }
-
- CircuitLap cl = new CircuitLap(circuit, result.getLap());
- Graph graph = mGraphs.get(cl);
- if(graph == null){
- graph = new Graph(result);
- mGraphs.put(cl, graph);
- }
- graph.addResult(_teamCar, result);
-
- }
-
- @Override
- public void endSeason() {
- // persist(mGraphs);
- render();
- }
+ @Override
+ public void startSeason() {
+ }
- protected void render() {
- List<TeamCar> cars = null;
- if(mGraphs != null){
- OverViewChartBuilder overViewChartBuilder = new OverViewChartBuilder();
- for (Graph graph : mGraphs.values()) {
- if(graph != null){
- if(cars == null) {
- cars = graph.teamCars();
- }
- report(graph);
- reportOverviewDatabaseSize(graph);
- overViewChartBuilder.report(graph);
- }
- }
- overViewChartBuilder.createJPGs(path());
- finish(cars);
- }
+ @Override
+ public boolean append() {
+ return false;
}
-
- private void persist(Map<CircuitLap, Graph> graphs) {
- new File("graph.db4o").delete();
- EmbeddedObjectContainer db = Db4oEmbedded.openFile("graph.db4o");
- db.store(new PersistentGraphs(graphs));
- db.commit();
- db.close();
- }
- protected abstract void report(Graph graph);
- protected abstract void finish(List <TeamCar> cars);
-
- protected List<JFreeChart> createTimeChart(Graph graph) {
- List<JFreeChart> list = new ArrayList<JFreeChart>();
- // list.add(createChart(createInverseLogTimeDataset(graph), ReporterConstants.OLD_LOGARITHMIC_TIME_CHART_LEGEND));
-
- boolean bestOnTop = true;
- String legendText = bestOnTop ? ReporterConstants.TIME_CHART_LEGEND_BEST_ON_TOP : ReporterConstants.TIME_CHART_LEGEND_BEST_BELOW;
-
- // list.add(createOrderOfMagnitudeChart(createBaseLineTimeDataset(graph, bestOnTop), legendText, bestOnTop));
-
- list.add(
- createBestAsBaseLineChart(
- createBestAsBaseLineTimeDataset(graph, bestOnTop),
- ReporterConstants.BEST_AS_BASELINE_CHART_LEGEND,
- bestOnTop));
-
- return list;
+ @Override
+ public void reportTaskNames(String[] taskNames) {
+ // do nothing
}
-
- protected JFreeChart createMemoryChart(Graph graph) {
- CategoryDataset dataset = createMemoryDataset(graph);
- return createChart(dataset, ReporterConstants.MEMORY_CHART_LEGEND);
- }
-
- public CategoryDataset createInverseLogTimeDataset(Graph graph) {
- DefaultCategoryDataset dataset=new DefaultCategoryDataset();
- int currentTimeIndex = timeIndex;
- for(TeamCar teamCar : graph.teamCars()) {
- timeIndex = currentTimeIndex;
- for(TurnSetup setup : graph.setups()) {
- String legend = "" + setup.getMostImportantValueForGraph();
- double time = graph.timeFor(teamCar,setup);
- double logedTime = MathUtil.toLogedValue(time);
- dataset.addValue(logedTime,teamCar.toString(),legend);
- String xName = ""+ ++timeIndex;
- _overviewTimeDataset.addValue(logedTime,teamCar.toString(),xName);
- }
- }
- return dataset;
- }
-
- public CategoryDataset createBaseLineTimeDataset(final Graph graph, boolean bestOnTop) {
- DefaultCategoryDataset dataset=new DefaultCategoryDataset();
-
- int setupCount = graph.setups().size();
- double[] averages = new double[setupCount];
-
- int i = 0;
- for(TurnSetup setup : graph.setups()) {
- double sum = 0;
- for(TeamCar teamCar : graph.teamCars()) {
- double time = graph.timeFor(teamCar,setup);
- sum+=time;
- }
- averages[i] = sum/graph.teamCars().size();
- i++;
- }
-
- for(TeamCar teamCar : graph.teamCars()) {
- i = 0;
- for(TurnSetup setup : graph.setups()) {
- String legend = "" + setup.getMostImportantValueForGraph();
- double time = graph.timeFor(teamCar,setup);
- double graphValue = logarithmicMagnitudeGraphValue(averages[i], time, bestOnTop);
- dataset.addValue(graphValue,teamCar.toString(),legend);
- i++;
- }
- }
- return dataset;
- }
-
- public CategoryDataset createBestAsBaseLineTimeDataset(final Graph graph, boolean bestOnTop) {
- DefaultCategoryDataset dataset=new DefaultCategoryDataset();
-
- int setupCount = graph.setups().size();
- double[] best = new double[setupCount];
-
- int i = 0;
- for(TurnSetup setup : graph.setups()) {
- best[i] = Double.MAX_VALUE;
- for(TeamCar teamCar : graph.teamCars()) {
- double time = graph.timeFor(teamCar,setup);
- if(time < best[i]){
- best[i] = time;
- }
- }
- i++;
- }
-
- for(TeamCar teamCar : graph.teamCars()) {
- i = 0;
- for(TurnSetup setup : graph.setups()) {
- String legend = "" + setup.getMostImportantValueForGraph();
- double time = graph.timeFor(teamCar,setup);
- double graphValue = logarithmicMagnitudeGraphValue(best[i], time, bestOnTop);
- dataset.addValue(graphValue,teamCar.toString(),legend);
- i++;
- }
- }
- return dataset;
- }
-
-
- protected static String legend(TurnSetup setup) {
- String legend = "";
- boolean first = true;
- for (SetupProperty sp : setup.properties()) {
- if (!first) {
- legend += ", ";
- }
- String name = sp.name();
- if (!name.equals("commitinterval")) {
- legend += name + "=" + sp.value();
- first = false;
- }
- }
-
- return legend;
+ @Override
+ public void reportTeam(Team team) {
+ // do nothing
}
-
- double logarithmicMagnitudeGraphValue(double average, double time, boolean bestOnTop){
- if(average == time){
- return 0;
- }
- if(time > average){
- double magnitude = time / average;
- magnitude = Math.log10(magnitude);
- return bestOnTop ? -magnitude : magnitude;
- }
- double magnitude = average / time;
- magnitude = Math.log10(magnitude);
- return bestOnTop ? magnitude : -magnitude;
+ @Override
+ public void reportCar(Car car) {
+ // do nothing
}
- private CategoryDataset createMemoryDataset(Graph graph) {
- DefaultCategoryDataset dataset=new DefaultCategoryDataset();
- int currentMemoryIndex = memoryIndex;
- for(TeamCar teamCar : graph.teamCars()) {
- memoryIndex = currentMemoryIndex;
- for(TurnSetup setup : graph.setups()) {
- String legend = "" + setup.getMostImportantValueForGraph();
- double memory = graph.memoryFor(teamCar,setup);
- double logedMemory = MathUtil.toLogedValue(memory);
- dataset.addValue(logedMemory,(teamCar.toString()),legend);
- String xName = ""+ ++memoryIndex;
- _overviewMemoryDataset.addValue(logedMemory,(teamCar.toString()),xName);
- }
- }
- return dataset;
+ @Override
+ public void beginResults() {
}
- private void reportOverviewDatabaseSize(Graph graph) {
- int currentSizeIndex = sizeIndex;
- for(TeamCar teamCar : graph.teamCars()) {
- sizeIndex = currentSizeIndex;
- for(TurnSetup setup : graph.setups()) {
- double databaseSize = graph.sizeFor(teamCar,setup);
- double logedSize = MathUtil.toLogedValue(databaseSize);
- String xName = "" + ++sizeIndex;
- _overviewSizeDataset.addValue(logedSize,(teamCar.toString()),xName);
- }
+ @Override
+ public void reportResult(Result result) {
+
+ if(mGraphs == null){
+ mGraphs = new LinkedHashMap<CircuitLap,Graph>();
}
+
+ if(mCircuits == null){
+ mCircuits = new ArrayList <Circuit>();
+ }
+
+ Circuit circuit = result.getCircuit();
+
+ if(! mCircuits.contains(circuit)){
+ mCircuits.add(circuit);
+ }
+
+ CircuitLap cl = new CircuitLap(circuit, result.getLap());
+ Graph graph = mGraphs.get(cl);
+ if(graph == null){
+ graph = new Graph(result);
+ mGraphs.put(cl, graph);
+ }
+ graph.addResult(_teamCar, result);
+
}
-
- public JFreeChart createChart(CategoryDataset dataset, String legendText) {
- CategoryAxis categoryAxis = new CategoryAxis("");
- categoryAxis.setLabelFont(ReporterConstants.CATEGORY_LABEL_FONT);
- categoryAxis.setTickLabelFont(ReporterConstants.CATEGORY_TICKLABEL_FONT);
- String yLegendText = legendText;
- ValueAxis valueAxis = new NumberAxis(yLegendText);
- valueAxis.setLabelFont(ReporterConstants.VALUE_LABEL_FONT);
- valueAxis.setTickLabelFont(ReporterConstants.VALUE_TICKLABEL_FONT);
- LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
- CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);
- plot.setOrientation(PlotOrientation.VERTICAL);
- JFreeChart chart = new JFreeChart("", ReporterConstants.TITLE_FONT, plot, true);
- LegendTitle legend = chart.getLegend();
- legend.setItemFont(ReporterConstants.LEGEND_FONT);
- legend.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
- legend.setBackgroundPaint(Color.white);
- return chart;
- }
-
- public JFreeChart createOrderOfMagnitudeChart(CategoryDataset dataset, String legendText, boolean bestOnTop) {
- CategoryAxis categoryAxis = new CategoryAxis("");
- categoryAxis.setLabelFont(ReporterConstants.CATEGORY_LABEL_FONT);
- categoryAxis.setTickLabelFont(ReporterConstants.CATEGORY_TICKLABEL_FONT);
- String yLegendText = legendText;
- ValueAxis valueAxis = new NumberAxis(yLegendText);
- valueAxis.setLabelFont(ReporterConstants.VALUE_LABEL_FONT);
- valueAxis.setTickLabelFont(ReporterConstants.VALUE_TICKLABEL_FONT);
- LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
- CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);
- plot.setOrientation(PlotOrientation.VERTICAL);
- plot.getRangeAxis().centerRange(0);
- plot.getRangeAxis().setRange(-3, 3);
- JFreeChart chart = new JFreeChart("", ReporterConstants.TITLE_FONT, plot, true);
- LegendTitle legend = chart.getLegend();
- legend.setItemFont(ReporterConstants.LEGEND_FONT);
- legend.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
- legend.setBackgroundPaint(Color.white);
- return chart;
- }
-
- public JFreeChart createBestAsBaseLineChart(CategoryDataset dataset, String legendText, boolean bestOnTop) {
- CategoryAxis categoryAxis = new CategoryAxis("");
- categoryAxis.setLabelFont(ReporterConstants.CATEGORY_LABEL_FONT);
- categoryAxis.setTickLabelFont(ReporterConstants.CATEGORY_TICKLABEL_FONT);
-
- String yLegendText = legendText;
- ValueAxis valueAxis = new NumberAxis(yLegendText);
- valueAxis.setLabelFont(ReporterConstants.VALUE_LABEL_FONT);
- valueAxis.setTickLabelFont(ReporterConstants.VALUE_TICKLABEL_FONT);
- LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
- CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);
- plot.setOrientation(PlotOrientation.VERTICAL);
- plot.getRangeAxis().centerRange(-2);
- plot.getRangeAxis().setRange(-4, 1);
-
- JFreeChart chart = new JFreeChart("", ReporterConstants.TITLE_FONT, plot, true);
- LegendTitle legend = chart.getLegend();
- legend.setItemFont(ReporterConstants.LEGEND_FONT);
- legend.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
- legend.setBackgroundPaint(Color.white);
- return chart;
- }
public void graphs(Map<CircuitLap,Graph> mGraphs) {
this.mGraphs = mGraphs;
@@ -381,5 +98,14 @@
return mGraphs;
}
-
-}
+ @Override
+ public void endSeason() {
+ if(mGraphs != null){
+ for (Graph graph : mGraphs.values()) {
+ report(graph);
+ }
+ }
+ }
+
+ protected abstract void report(Graph graph);
+}
\ No newline at end of file
Modified: trunk/polepos/src/org/polepos/reporters/HTMLReporter.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/HTMLReporter.java 2011-02-17 17:15:21 UTC (rev 186)
+++ trunk/polepos/src/org/polepos/reporters/HTMLReporter.java 2011-02-17 18:36:49 UTC (rev 187)
@@ -31,7 +31,7 @@
import org.polepos.framework.*;
-public class HTMLReporter extends GraphReporter {
+public class HTMLReporter extends RenderingReporter {
public HTMLReporter(String path) {
super(path);
Modified: trunk/polepos/src/org/polepos/reporters/PDFReporterBase.java
===================================================================
--- trunk/polepos/src/org/polepos/reporters/PDFReporterBase.java 2011-02-17 17:15:21 UTC (rev 186)
+++ trunk/polepos/src/org/polepos/reporters/PDFReporterBase.java 2011-02-17 18:36:49 UTC (rev 187)
@@ -33,7 +33,7 @@
import com.lowagie.text.pdf.*;
-public abstract class PDFReporterBase extends GraphReporter {
+public abstract class PDFReporterBase extends RenderingReporter {
private Document _document;
private PdfWriter _writer;
Copied: trunk/polepos/src/org/polepos/reporters/PersistGraphReporter.java (from rev 186, trunk/polepos/src/org/polepos/reporters/CheckSumReporter.java)
===================================================================
--- trunk/polepos/src/org/polepos/reporters/PersistGraphReporter.java (rev 0)
+++ trunk/polepos/src/org/polepos/reporters/PersistGraphReporter.java 2011-02-17 18:36:49 UTC (rev 187)
@@ -0,0 +1,54 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+
+package org.polepos.reporters;
+
+import java.io.*;
+import java.util.*;
+
+import org.polepos.framework.*;
+
+import com.db4o.*;
+
+public class PersistGraphReporter extends GraphReporter {
+
+ public PersistGraphReporter(String path) {
+ super(path);
+ }
+
+ @Override
+ public void endSeason() {
+ persist(mGraphs);
+ }
+
+ private void persist(Map<CircuitLap, Graph> graphs) {
+ new File("graph.db4o").delete();
+ EmbeddedObjectContainer db = Db4oEmbedded.openFile("graph.db4o");
+ db.store(new PersistentGraphs(graphs));
+ db.commit();
+ db.close();
+ }
+
+ @Override
+ protected void report(Graph graph) {
+ }
+
+
+}
Copied: trunk/polepos/src/org/polepos/reporters/RenderingReporter.java (from rev 186, trunk/polepos/src/org/polepos/reporters/GraphReporter.java)
===================================================================
--- trunk/polepos/src/org/polepos/reporters/RenderingReporter.java (rev 0)
+++ trunk/polepos/src/org/polepos/reporters/RenderingReporter.java 2011-02-17 18:36:49 UTC (rev 187)
@@ -0,0 +1,318 @@
+/*
+This file is part of the PolePosition database benchmark
+http://www.polepos.org
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+MA 02111-1307, USA. */
+
+package org.polepos.reporters;
+
+import java.awt.*;
+import java.util.*;
+import java.util.List;
+
+import org.jfree.chart.*;
+import org.jfree.chart.axis.*;
+import org.jfree.chart.plot.*;
+import org.jfree.chart.renderer.category.*;
+import org.jfree.chart.title.*;
+import org.jfree.data.category.*;
+import org.jfree.ui.*;
+import org.polepos.framework.*;
+import org.polepos.util.*;
+
+
+public abstract class RenderingReporter extends GraphReporter{
+
+ public RenderingReporter(String path) {
+ super(path);
+
+ }
+
+ protected final DefaultCategoryDataset _overviewTimeDataset = new DefaultCategoryDataset();
+ protected final DefaultCategoryDataset _overviewMemoryDataset = new DefaultCategoryDataset();
+ protected final DefaultCategoryDataset _overviewSizeDataset = new DefaultCategoryDataset();
+
+ protected void render() {
+ List<TeamCar> cars = null;
+ if(mGraphs != null){
+ OverViewChartBuilder overViewChartBuilder = new OverViewChartBuilder();
+ for (Graph graph : mGraphs.values()) {
+ if(graph != null){
+ if(cars == null) {
+ cars = graph.teamCars();
+ }
+ report(graph);
+ reportOverviewDatabaseSize(graph);
+ overViewChartBuilder.report(graph);
+ }
+ }
+ overViewChartBuilder.createJPGs(path());
+ finish(cars);
+ }
+ }
+
+ protected List<JFreeChart> createTimeChart(Graph graph) {
+ List<JFreeChart> list = new ArrayList<JFreeChart>();
+ // list.add(createChart(createInverseLogTimeDataset(graph), ReporterConstants.OLD_LOGARITHMIC_TIME_CHART_LEGEND));
+
+ boolean bestOnTop = true;
+ String legendText = bestOnTop ? ReporterConstants.TIME_CHART_LEGEND_BEST_ON_TOP : ReporterConstants.TIME_CHART_LEGEND_BEST_BELOW;
+
+ // list.add(createOrderOfMagnitudeChart(createBaseLineTimeDataset(graph, bestOnTop), legendText, bestOnTop));
+
+ list.add(
+ createBestAsBaseLineChart(
+ createBestAsBaseLineTimeDataset(graph, bestOnTop),
+ ReporterConstants.BEST_AS_BASELINE_CHART_LEGEND,
+ bestOnTop));
+
+ return list;
+ }
+
+ protected JFreeChart createMemoryChart(Graph graph) {
+ CategoryDataset dataset = createMemoryDataset(graph);
+ return createChart(dataset, ReporterConstants.MEMORY_CHART_LEGEND);
+ }
+
+ public CategoryDataset createInverseLogTimeDataset(Graph graph) {
+ DefaultCategoryDataset dataset=new DefaultCategoryDataset();
+ int currentTimeIndex = timeIndex;
+ for(TeamCar teamCar : graph.teamCars()) {
+ timeIndex = currentTimeIndex;
+ for(TurnSetup setup : graph.setups()) {
+ String legend = "" + setup.getMostImportantValueForGraph();
+ double time = graph.timeFor(teamCar,setup);
+ double logedTime = MathUtil.toLogedValue(time);
+ dataset.addValue(logedTime,teamCar.toString(),legend);
+ String xName = ""+ ++timeIndex;
+ _overviewTimeDataset.addValue(logedTime,teamCar.toString(),xName);
+ }
+ }
+ return dataset;
+ }
+
+ public CategoryDataset createBaseLineTimeDataset(final Graph graph, boolean bestOnTop) {
+ DefaultCategoryDataset dataset=new DefaultCategoryDataset();
+
+ int setupCount = graph.setups().size();
+ double[] averages = new double[setupCount];
+
+ int i = 0;
+ for(TurnSetup setup : graph.setups()) {
+ double sum = 0;
+ for(TeamCar teamCar : graph.teamCars()) {
+ double time = graph.timeFor(teamCar,setup);
+ sum+=time;
+ }
+ averages[i] = sum/graph.teamCars().size();
+ i++;
+ }
+
+ for(TeamCar teamCar : graph.teamCars()) {
+ i = 0;
+ for(TurnSetup setup : graph.setups()) {
+ String legend = "" + setup.getMostImportantValueForGraph();
+ double time = graph.timeFor(teamCar,setup);
+ double graphValue = logarithmicMagnitudeGraphValue(averages[i], time, bestOnTop);
+ dataset.addValue(graphValue,teamCar.toString(),legend);
+ i++;
+ }
+ }
+ return dataset;
+ }
+
+ public CategoryDataset createBestAsBaseLineTimeDataset(final Graph graph, boolean bestOnTop) {
+ DefaultCategoryDataset dataset=new DefaultCategoryDataset();
+
+ int setupCount = graph.setups().size();
+ double[] best = new double[setupCount];
+
+ int i = 0;
+ for(TurnSetup setup : graph.setups()) {
+ best[i] = Double.MAX_VALUE;
+ for(TeamCar teamCar : graph.teamCars()) {
+ double time = graph.timeFor(teamCar,setup);
+ if(time < best[i]){
+ best[i] = time;
+ }
+ }
+ i++;
+ }
+
+ for(TeamCar teamCar : graph.teamCars()) {
+ i = 0;
+ for(TurnSetup setup : graph.setups()) {
+ String legend = "" + setup.getMostImportantValueForGraph();
+ double time = graph.timeFor(teamCar,setup);
+ double graphValue = logarithmicMagnitudeGraphValue(best[i], time, bestOnTop);
+ dataset.addValue(graphValue,teamCar.toString(),legend);
+ i++;
+ }
+ }
+ return dataset;
+ }
+
+
+
+ protected static String legend(TurnSetup setup) {
+ String legend = "";
+ boolean first = true;
+ for (SetupProperty sp : setup.properties()) {
+ if (!first) {
+ legend += ", ";
+ }
+ String name = sp.name();
+ if (!name.equals("commitinterval")) {
+ legend += name + "=" + sp.value();
+ first = false;
+ }
+ }
+
+ return legend;
+ }
+
+
+ double logarithmicMagnitudeGraphValue(double average, double time, boolean bestOnTop){
+ if(average == time){
+ return 0;
+ }
+ if(time > average){
+ double magnitude = time / average;
+ magnitude = Math.log10(magnitude);
+ return bestOnTop ? -magnitude : magnitude;
+ }
+ double magnitude = average / time;
+ magnitude = Math.log10(magnitude);
+ return bestOnTop ? magnitude : -magnitude;
+ }
+
+ private CategoryDataset createMemoryDataset(Graph graph) {
+ DefaultCategoryDataset dataset=new DefaultCategoryDataset();
+ int currentMemoryIndex = memoryIndex;
+ for(TeamCar teamCar : graph.teamCars()) {
+ memoryIndex = currentMemoryIndex;
+ for(TurnSetup setup : graph.setups()) {
+ String legend = "" + setup.getMostImportantValueForGraph();
+ double memory = graph.memoryFor(teamCar,setup);
+ double logedMemory = MathUtil.toLogedValue(memory);
+ dataset.addValue(logedMemory,(teamCar.toString()),legend);
+ String xName = ""+ ++memoryIndex;
+ _overviewMemoryDataset.addValue(logedMemory,(teamCar.toString()),xName);
+ }
+ }
+ return dataset;
+ }
+
+ private void reportOverviewDatabaseSize(Graph graph) {
+ int currentSizeIndex = sizeIndex;
+ for(TeamCar teamCar : graph.teamCars()) {
+ sizeIndex = currentSizeIndex;
+ for(TurnSetup setup : graph.setups()) {
+ double databaseSize = graph.sizeFor(teamCar,setup);
+ double logedSize = MathUtil.toLogedValue(databaseSize);
+ String xName = "" + ++sizeIndex;
+ _overviewSizeDataset.addValue(logedSize,(teamCar.toString()),xName);
+ }
+ }
+ }
+
+ public JFreeChart createChart(CategoryDataset dataset, String legendText) {
+ CategoryAxis categoryAxis = new CategoryAxis("");
+ categoryAxis.setLabelFont(ReporterConstants.CATEGORY_LABEL_FONT);
+ categoryAxis.setTickLabelFont(ReporterConstants.CATEGORY_TICKLABEL_FONT);
+ String yLegendText = legendText;
+ ValueAxis valueAxis = new NumberAxis(yLegendText);
+ valueAxis.setLabelFont(ReporterConstants.VALUE_LABEL_FONT);
+ valueAxis.setTickLabelFont(ReporterConstants.VALUE_TICKLABEL_FONT);
+ LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
+ CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);
+ plot.setOrientation(PlotOrientation.VERTICAL);
+ JFreeChart chart = new JFreeChart("", ReporterConstants.TITLE_FONT, plot, true);
+ LegendTitle legend = chart.getLegend();
+ legend.setItemFont(ReporterConstants.LEGEND_FONT);
+ legend.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
+ legend.setBackgroundPaint(Color.white);
+ return chart;
+ }
+
+ public JFreeChart createOrderOfMagnitudeChart(CategoryDataset dataset, String legendText, boolean bestOnTop) {
+ CategoryAxis categoryAxis = new CategoryAxis("");
+ categoryAxis.setLabelFont(ReporterConstants.CATEGORY_LABEL_FONT);
+ categoryAxis.setTickLabelFont(ReporterConstants.CATEGORY_TICKLABEL_FONT);
+ String yLegendText = legendText;
+ ValueAxis valueAxis = new NumberAxis(yLegendText);
+ valueAxis.setLabelFont(ReporterConstants.VALUE_LABEL_FONT);
+ valueAxis.setTickLabelFont(ReporterConstants.VALUE_TICKLABEL_FONT);
+ LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
+ CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);
+ plot.setOrientation(PlotOrientation.VERTICAL);
+ plot.getRangeAxis().centerRange(0);
+ plot.getRangeAxis().setRange(-3, 3);
+ JFreeChart chart = new JFreeChart("", ReporterConstants.TITLE_FONT, plot, true);
+ LegendTitle legend = chart.getLegend();
+ legend.setItemFont(ReporterConstants.LEGEND_FONT);
+ legend.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
+ legend.setBackgroundPaint(Color.white);
+ return chart;
+ }
+
+ public JFreeChart createBestAsBaseLineChart(CategoryDataset dataset, String legendText, boolean bestOnTop) {
+ CategoryAxis categoryAxis = new CategoryAxis("");
+ categoryAxis.setLabelFont(ReporterConstants.CATEGORY_LABEL_FONT);
+ categoryAxis.setTickLabelFont(ReporterConstants.CATEGORY_TICKLABEL_FONT);
+
+ String yLegendText = legendText;
+ ValueAxis valueAxis = new NumberAxis(yLegendText);
+ valueAxis.setLabelFont(ReporterConstants.VALUE_LABEL_FONT);
+ valueAxis.setTickLabelFont(ReporterConstants.VALUE_TICKLABEL_FONT);
+ LineAndShapeRenderer renderer = new LineAndShapeRenderer(true, false);
+ CategoryPlot plot = new CategoryPlot(dataset, categoryAxis, valueAxis, renderer);
+ plot.setOrientation(PlotOrientation.VERTICAL);
+ plot.getRangeAxis().centerRange(-2);
+ plot.getRangeAxis().setRange(-4, 1);
+
+ JFreeChart chart = new JFreeChart("", ReporterConstants.TITLE_FONT, plot, true);
+ LegendTitle legend = chart.getLegend();
+ legend.setItemFont(ReporterConstants.LEGEND_FONT);
+ legend.setMargin(new RectangleInsets(1.0, 1.0, 1.0, 1.0));
+ legend.setBackgroundPaint(Color.white);
+ return chart;
+ }
+
+ @Override
+ public void endSeason() {
+ List<TeamCar> cars = null;
+ if(mGraphs != null){
+ OverViewChartBuilder overViewChartBuilder = new OverViewChartBuilder();
+ for (Graph graph : mGraphs.values()) {
+ if(graph != null){
+ if(cars == null) {
+ cars = graph.teamCars();
+ }
+ report(graph);
+ reportOverviewDatabaseSize(graph);
+ overViewChartBuilder.report(graph);
+ }
+ }
+ overViewChartBuilder.createJPGs(path());
+ finish(cars);
+ }
+ }
+
+ protected abstract void finish(List <TeamCar> cars);
+
+
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|