package org.devgateway.toolkit.web.excelcharts.data; import org.apache.poi.ss.usermodel.charts.ChartDataSource; import org.devgateway.toolkit.web.excelcharts.CustomChartData; import org.devgateway.toolkit.web.excelcharts.CustomChartSeries; import java.util.ArrayList; import java.util.List; /** * @author idobre * @since 8/12/16 * * General class for creating a CustomChartData object. */ public abstract class AbstractXSSFChartData implements CustomChartData { /** * List of all data series. */ protected final List<CustomChartSeries> series; /** * Chart title. */ protected final String title; public AbstractXSSFChartData(final String title) { this.title = title; series = new ArrayList<>(); } public AbstractXSSFChartData() { this(null); } @Override public CustomChartSeries addSeries(final ChartDataSource<?> categoryAxisData, final ChartDataSource<? extends Number> values) { return this.addSeries(null, categoryAxisData, values); } @Override public CustomChartSeries addSeries(final String title, final ChartDataSource<?> categoryAxisData, final ChartDataSource<? extends Number> values) { if (!values.isNumeric()) { throw new IllegalArgumentException("Value data source must be numeric."); } int numOfSeries = series.size(); final CustomChartSeries newSeries = createNewSerie(numOfSeries, numOfSeries, categoryAxisData, values); if (title != null) { newSeries.setTitle(title); } series.add(newSeries); return newSeries; } /** * Add a new Serie specific to each AbstractXSSFChartData implementation. */ protected abstract CustomChartSeries createNewSerie(int id, int order, ChartDataSource<?> categories, ChartDataSource<? extends Number> values); }