package name.abuchen.portfolio.ui.views.dataseries;
import org.swtchart.IBarSeries;
import org.swtchart.ILineSeries;
import name.abuchen.portfolio.snapshot.Aggregation;
import name.abuchen.portfolio.snapshot.PerformanceIndex;
import name.abuchen.portfolio.snapshot.ReportingPeriod;
import name.abuchen.portfolio.ui.Messages;
import name.abuchen.portfolio.ui.util.chart.TimelineChart;
import name.abuchen.portfolio.ui.views.dataseries.DataSeries.ClientDataSeries;
public class PerformanceChartSeriesBuilder extends AbstractChartSeriesBuilder
{
public PerformanceChartSeriesBuilder(TimelineChart chart, DataSeriesCache cache)
{
super(chart, cache);
}
public void build(DataSeries series, ReportingPeriod reportingPeriod, Aggregation.Period aggregationPeriod)
{
PerformanceIndex index = getCache().lookup(series, reportingPeriod);
if (series.getType() == DataSeries.Type.CLIENT)
{
addClient(series, index, aggregationPeriod);
}
else if (series.getType() == DataSeries.Type.CONSUMER_PRICE_INDEX)
{
if (index.getDates().length > 0
&& (aggregationPeriod == null || aggregationPeriod != Aggregation.Period.YEARLY))
{
ILineSeries lineSeries = getChart().addDateSeries(index.getDates(), index.getAccumulatedPercentage(),
series.getLabel());
configure(series, lineSeries);
}
}
else
{
if (aggregationPeriod != null)
index = Aggregation.aggregate(index, aggregationPeriod);
ILineSeries lineSeries = getChart().addDateSeries(index.getDates(), index.getAccumulatedPercentage(),
series.getLabel());
configure(series, lineSeries);
}
}
private void addClient(DataSeries series, PerformanceIndex clientIndex, Aggregation.Period aggregationPeriod)
{
PerformanceIndex index = aggregationPeriod != null ? Aggregation.aggregate(clientIndex, aggregationPeriod)
: clientIndex;
switch ((ClientDataSeries) series.getInstance())
{
case TOTALS:
ILineSeries lineSeries = getChart().addDateSeries(index.getDates(), index.getAccumulatedPercentage(),
series.getLabel());
configure(series, lineSeries);
break;
case DELTA_PERCENTAGE:
String aggreagtionPeriodLabel = aggregationPeriod != null ? aggregationPeriod.toString()
: Messages.LabelAggregationDaily;
IBarSeries barSeries = getChart().addDateBarSeries(index.getDates(), index.getDeltaPercentage(),
aggreagtionPeriodLabel);
// update label, e.g. 'daily' to 'weekly'
series.setLabel(aggreagtionPeriodLabel);
configure(series, barSeries);
break;
default:
break;
}
}
}