Extract interface for DataSeries

This will make it possible to have DataSeries that do not require a csv
file on disk.
This commit is contained in:
ahr
2017-12-29 09:15:29 +01:00
parent cc70f45c12
commit 9b9554552d
6 changed files with 69 additions and 44 deletions

View File

@@ -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> dataSeries);
default void appendfln(final StringBuilder builder, final String format, final Object... args) {

View File

@@ -3,30 +3,32 @@ 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> dataSeries) {
int count = 1;
for (final DataSeries dataSerie : dataSeries) {
appendfln(result, "stats '%s' using 2 prefix \"A%d\"", dataSerie.getDataFile(),count);
if (dataSerie instanceof FileBackedDataSeries){
appendfln(result, "stats '%s' using 2 prefix \"A%d\"", ((FileBackedDataSeries) dataSerie).getDataFile(),count);
count++;
}
}
}
@Override
public void addPlots(StringBuilder result, Collection<DataSeries> dataSeries) {
int count = 1;
for (final DataSeries dataSerie : dataSeries) {
if (dataSerie instanceof FileBackedDataSeries){
appendfln(result, "A%d_mean title '%s Mean', \\", count,
dataSerie.getTitle(), dataSerie.getTitle());
count++;
}
}
}
@Override
public CustomAggregator createCustomAggregator(long minDate, long maxDate) {

View File

@@ -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<? super DataSeries> 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;
public String getTitle();
public int getValues();
public long getMaxValue();
private String id;
public AggregatedData getAggregatedData();
public DataSeries(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();
}
public String getGnuplotPlotDefinition();
public static Map<String, Integer> toMap(final List<DataSeries> dataSeries) {
final Map<String, Integer> result = new LinkedHashMap<>();

View File

@@ -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());
}
}

View File

@@ -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);

View File

@@ -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);
}