package name.abuchen.portfolio.ui.views.dataseries;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.swtchart.LineStyle;
import name.abuchen.portfolio.ui.util.Colors;
import name.abuchen.portfolio.ui.views.dataseries.DataSeries.ClientDataSeries;
/**
* Convert a list of DataSeries object to a string and re-create again from a
* string.
*/
public class DataSeriesSerializer
{
public List<DataSeries> fromString(DataSeriesSet set, String config)
{
List<DataSeries> series = new ArrayList<>();
if (config != null && config.trim().length() > 0)
load(set, config, series);
if (series.isEmpty())
set.getAvailableSeries().stream()
.filter(s -> s.getType() == DataSeries.Type.CLIENT
&& (s.getInstance() == ClientDataSeries.TOTALS
|| s.getInstance() == ClientDataSeries.TRANSFERALS)
|| s.getType() == DataSeries.Type.CONSUMER_PRICE_INDEX)
.forEach(series::add);
return series;
}
private void load(DataSeriesSet set, String config, List<DataSeries> series)
{
Map<String, DataSeries> uuid2series = set.getAvailableSeries().stream()
.collect(Collectors.toMap(s -> s.getUUID(), s -> s));
String[] items = config.split(","); //$NON-NLS-1$
for (String item : items)
{
String[] data = item.split(";"); //$NON-NLS-1$
String uuid = data[0];
DataSeries s = uuid2series.get(uuid);
if (s != null)
{
series.add(s);
if (data.length == 4)
{
s.setColor(Colors.toRGB(data[1]));
s.setLineStyle(LineStyle.valueOf(data[2]));
s.setShowArea(Boolean.parseBoolean(data[3]));
}
}
}
}
public String toString(List<DataSeries> series)
{
StringBuilder buf = new StringBuilder();
for (DataSeries s : series)
{
if (buf.length() > 0)
buf.append(',');
buf.append(s.getUUID()).append(';');
buf.append(Colors.toHex(s.getColor())).append(';');
buf.append(s.getLineStyle().name()).append(';');
buf.append(s.isShowArea());
}
return buf.toString();
}
}