From 9b9554552d112f84007f0b4ae94f464f2dc85459 Mon Sep 17 00:00:00 2001 From: ahr Date: Fri, 29 Dec 2017 09:15:29 +0100 Subject: [PATCH] Extract interface for DataSeries This will make it possible to have DataSeries that do not require a csv file on disk. --- .../pdb/plot/api/AggregateHandler.java | 2 + .../lucares/pdb/plot/api/MeanAggregate.java | 18 +++---- .../lucares/recommind/logs/DataSeries.java | 40 +++------------- .../recommind/logs/FileBackedDataSeries.java | 48 +++++++++++++++++++ .../recommind/logs/GnuplotFileGenerator.java | 3 +- .../lucares/recommind/logs/ScatterPlot.java | 2 +- 6 files changed, 69 insertions(+), 44 deletions(-) create mode 100644 pdb-plotting/src/main/java/org/lucares/recommind/logs/FileBackedDataSeries.java diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java index fbb4e68..4c97833 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/AggregateHandler.java @@ -6,6 +6,8 @@ import org.lucares.recommind.logs.DataSeries; public interface AggregateHandler { + // TODO handle aggregates as normal DataSeries + void addGnuplotDefinitions(StringBuilder result, String separator, Collection dataSeries); default void appendfln(final StringBuilder builder, final String format, final Object... args) { diff --git a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/MeanAggregate.java b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/MeanAggregate.java index 2ef51e6..00c9ed8 100644 --- a/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/MeanAggregate.java +++ b/pdb-plotting/src/main/java/org/lucares/pdb/plot/api/MeanAggregate.java @@ -3,18 +3,18 @@ package org.lucares.pdb.plot.api; import java.util.Collection; import org.lucares.recommind.logs.DataSeries; +import org.lucares.recommind.logs.FileBackedDataSeries; public class MeanAggregate implements AggregateHandler{ - - @Override public void addGnuplotDefinitions(StringBuilder result, String separator, Collection dataSeries) { int count = 1; for (final DataSeries dataSerie : dataSeries) { - - appendfln(result, "stats '%s' using 2 prefix \"A%d\"", dataSerie.getDataFile(),count); - count++; + if (dataSerie instanceof FileBackedDataSeries){ + appendfln(result, "stats '%s' using 2 prefix \"A%d\"", ((FileBackedDataSeries) dataSerie).getDataFile(),count); + count++; + } } } @@ -22,9 +22,11 @@ public class MeanAggregate implements AggregateHandler{ public void addPlots(StringBuilder result, Collection dataSeries) { int count = 1; for (final DataSeries dataSerie : dataSeries) { - appendfln(result, "A%d_mean title '%s Mean', \\", count, - dataSerie.getTitle(), dataSerie.getTitle()); - count++; + if (dataSerie instanceof FileBackedDataSeries){ + appendfln(result, "A%d_mean title '%s Mean', \\", count, + dataSerie.getTitle(), dataSerie.getTitle()); + count++; + } } } diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java index 323473c..2187042 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/DataSeries.java @@ -1,6 +1,5 @@ package org.lucares.recommind.logs; -import java.io.File; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; @@ -9,7 +8,7 @@ import java.util.Map; import org.lucares.pdb.plot.api.AggregatedData; import org.lucares.pdb.plot.api.Limit; -public class DataSeries { +public interface DataSeries { public static final Comparator BY_NUMBER_OF_VALUES = ( a, b) -> { return a.getValues() - b.getValues(); @@ -20,40 +19,15 @@ public class DataSeries { return result < 0 ? -1 : (result > 0 ? 1 : 0); }; - private final String title; + public String getId(); - private CsvSummary csvSummary; - - private String id; - - public DataSeries(String id, String title, CsvSummary csvSummary) { - this.id = id; - this.title = title; - this.csvSummary = csvSummary; - } - public String getId() { - return id; - } + public String getTitle(); + public int getValues(); + public long getMaxValue(); - public File getDataFile() { - return csvSummary.getDataFile(); - } - - public String getTitle() { - return title; - } - - public int getValues() { - return csvSummary.getValues(); - } - - public long getMaxValue() { - return csvSummary.getMaxValue(); - } + public AggregatedData getAggregatedData(); - public AggregatedData getAggregatedData() { - return csvSummary.getAggregatedData(); - } + public String getGnuplotPlotDefinition(); public static Map toMap(final List dataSeries) { final Map result = new LinkedHashMap<>(); diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/FileBackedDataSeries.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/FileBackedDataSeries.java new file mode 100644 index 0000000..5e772ea --- /dev/null +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/FileBackedDataSeries.java @@ -0,0 +1,48 @@ +package org.lucares.recommind.logs; + +import java.io.File; + +import org.lucares.pdb.plot.api.AggregatedData; + +public class FileBackedDataSeries implements DataSeries { + + private final String title; + + private CsvSummary csvSummary; + + private String id; + + public FileBackedDataSeries(String id, String title, CsvSummary csvSummary) { + this.id = id; + this.title = title; + this.csvSummary = csvSummary; + } + public String getId() { + return id; + } + + public File getDataFile() { + return csvSummary.getDataFile(); + } + + public String getTitle() { + return title; + } + + public int getValues() { + return csvSummary.getValues(); + } + + public long getMaxValue() { + return csvSummary.getMaxValue(); + } + + public AggregatedData getAggregatedData() { + return csvSummary.getAggregatedData(); + } + @Override + public String getGnuplotPlotDefinition() { + return String.format("'%s' using 1:2 title '%s' with points, \\", getDataFile(), + getTitle()); + } +} diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java index 36b01d8..ea2ee7e 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/GnuplotFileGenerator.java @@ -62,8 +62,7 @@ public class GnuplotFileGenerator { appendf(result, "plot "); for (final DataSeries dataSerie : dataSeries) { - appendfln(result, "'%s' using 1:2 title '%s' with points, \\", dataSerie.getDataFile(), - dataSerie.getTitle()); + appendfln(result, dataSerie.getGnuplotPlotDefinition()); } settings.getAggregate().addPlots(result, dataSeries); diff --git a/pdb-plotting/src/main/java/org/lucares/recommind/logs/ScatterPlot.java b/pdb-plotting/src/main/java/org/lucares/recommind/logs/ScatterPlot.java index 00d7fb6..ed628c2 100644 --- a/pdb-plotting/src/main/java/org/lucares/recommind/logs/ScatterPlot.java +++ b/pdb-plotting/src/main/java/org/lucares/recommind/logs/ScatterPlot.java @@ -102,7 +102,7 @@ public class ScatterPlot { final int id = idCounter.getAndIncrement(); final String title = title(groupResult.getGroupedBy(), csvSummary.getValues()); - final DataSeries dataSerie = new DataSeries("id"+id, title, csvSummary); + final DataSeries dataSerie = new FileBackedDataSeries("id"+id, title, csvSummary); if (dataSerie.getValues() > 0) { dataSeries.add(dataSerie); }