/*
* WBI Indicator Explorer
*
* Copyright 2015 Sebastian Nogara <snogaraleal@gmail.com>
*
* This file is part of WBI.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package client.serializers;
import java.util.List;
import java.util.SortedSet;
import models.Country;
import models.Series;
import client.managers.models.SeriesManager;
/**
* CSV serializer of {@link Row} lists.
*/
public class CSVSeriesSerializer implements SeriesManager.Serializer {
/**
* CSV column separator.
*/
private static final String SEP_COLUMN = ", ";
/**
* CSV row separator.
*/
private static final String SEP_ROW = "\n";
/**
* Resolution of {@code Point} values.
*/
private static final Double RES = 1000.0;
/**
* Serialize to CSV.
*/
@Override
public String serialize(
SortedSet<Integer> years, List<SeriesManager.Row> rows) {
String content = "";
content += "Name" + SEP_COLUMN;
content += "ISO";
for (Integer year : years) {
content += SEP_COLUMN + year;
}
content += SEP_ROW;
for (SeriesManager.Row row : rows) {
Series series = row.getSeries();
Country country = series.getCountry();
if (country == null) {
content += SEP_COLUMN;
} else {
content += "\"" + country.getName() + "\"" + SEP_COLUMN;
content += country.getISO();
}
for (Integer year : years) {
content += SEP_COLUMN;
Double value = series.getPointValue(year);
if (value != null) {
content += (Double)(((int)(value * RES)) / RES) + "";
}
}
content += SEP_ROW;
}
return content;
}
}