finance-analyzer/src/main/java/de/arminwolf/financeanalyzer/dao/charts/factories/ColumnChartFactory.java

75 lines
2.3 KiB
Java

package de.arminwolf.financeanalyzer.dao.charts.factories;
import de.arminwolf.financeanalyzer.dao.charts.model.Chart;
import de.arminwolf.financeanalyzer.dao.charts.model.Column;
import de.arminwolf.financeanalyzer.dao.charts.model.HighChartDAO;
import de.arminwolf.financeanalyzer.dao.charts.model.PlotOptions;
import de.arminwolf.financeanalyzer.dao.charts.model.Series;
import de.arminwolf.financeanalyzer.dao.charts.model.Title;
import de.arminwolf.financeanalyzer.dao.charts.model.XAxis;
import de.arminwolf.financeanalyzer.dao.charts.model.YAxis;
import de.arminwolf.financeanalyzer.util.RandomColorUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ColumnChartFactory {
public static HighChartDAO createColumnChart(
final String pTitle,
final String pChartTitle,
final Map<String, List<Float>> ausgaben,
final String pAusgabenTitle,
final Map<String, List<Float>> einnahmen,
final String pEinnahmenTitle) {
HighChartDAO chart = new HighChartDAO();
PlotOptions plotOptions = new PlotOptions();
Column column = new Column();
//column.setStacking("normal");
plotOptions.setColumn(column);
chart.setPlotOptions(plotOptions);
chart.setTitle(new Title(pTitle));
XAxis xAxis = new XAxis();
xAxis.setCategories(List.of("Einname", "Ausgabe"));
chart.setXAxis(xAxis);
YAxis yAxis = new YAxis();
yAxis.setMin(0);
yAxis.setTitle(new Title(pChartTitle));
chart.setYAxis(yAxis);
chart.setChart(new Chart("column"));
Series einnahmenSeries = new Series();
einnahmenSeries.setStack(1);
einnahmenSeries.setName(pEinnahmenTitle);
einnahmenSeries.setData(einnahmen.values()
.stream()
.map(floats -> floats.stream().reduce(0.0f, Float::sum))
.collect(Collectors.toList()));
Series ausgabenSeries = new Series();
ausgabenSeries.setStack(0);
ausgabenSeries.setName(pAusgabenTitle);
ausgabenSeries.setData(ausgaben.values()
.stream()
.map(floats -> floats.stream().map(Math::abs).reduce(0.0f, Float::sum))
.collect(Collectors.toList()));
chart.setColors(List.of(RandomColorUtil.getRandomColor(), RandomColorUtil.getRandomColor()));
List<Series> series = new ArrayList<>();
series.add(einnahmenSeries);
series.add(ausgabenSeries);
chart.setSeries(series);
return chart;
}
}