/*
* 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 com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import models.Country;
import models.Point;
import models.Series;
import client.managers.models.SeriesManager;
/**
* JSON serializer of {@link Row} lists.
*/
public class JSONSeriesSerializer implements SeriesManager.Serializer {
/**
* Name of the JSON key with the name of a {@code Country}.
*/
private static final String COUNTRY_NAME = "name";
/**
* Name of the JSON key with the ISO code of a {@code Country}.
*/
private static final String COUNTRY_ISO = "iso";
/**
* Resolution of {@code Point} values.
*/
private static final Double RES = 1000.0;
/**
* Serialize to JSON.
*/
@Override
public String serialize(
SortedSet<Integer> years, List<SeriesManager.Row> rows) {
JSONArray array = new JSONArray();
int arrayIndex = 0;
for (SeriesManager.Row row : rows) {
JSONObject rowObject = new JSONObject();
Series series = row.getSeries();
Country country = series.getCountry();
if (country != null) {
rowObject.put(COUNTRY_NAME, new JSONString(country.getName()));
rowObject.put(COUNTRY_ISO, new JSONString(country.getISO()));
}
List<Point> points = series.getPoints();
if (points != null) {
for (Point point : points) {
rowObject.put(
point.getYear() + "",
new JSONNumber(
((int)(point.getValue() * RES)) / RES));
}
}
array.set(arrayIndex, rowObject);
arrayIndex++;
}
return array.toString();
}
}