package nl.wldelft.fews.system.plugin.dataExport; import nl.wldelft.util.io.LineWriter; import nl.wldelft.util.io.TextSerializer; import nl.wldelft.util.timeseries.TimeSeriesContent; import nl.wldelft.util.timeseries.TimeSeriesHeader; public class CsvTimeSeriesSerializer implements TextSerializer<TimeSeriesContent> { private char decimalSeparator = '.'; private char columnSeparator = ','; @Override public void serialize(TimeSeriesContent content, LineWriter writer, String virtualFileName) throws Exception { if (Float.isNaN(content.getDefaultMissingValue())) content.setMissingValue(-999f); content.setUnreliablesAsMissings(true); String[] locationHeader = new String[content.getTimeSeriesCount() + 1]; String[] parameterHeader = new String[content.getTimeSeriesCount() + 1]; locationHeader[0] = ""; parameterHeader[0] = ""; for (int i = 0, n = content.getTimeSeriesCount(); i < n; i++) { content.setTimeSeriesIndex(i); TimeSeriesHeader timeSeriesHeader = content.getTimeSeriesHeader(); locationHeader[i + 1] = timeSeriesHeader.getLocationId(); parameterHeader[i + 1] = timeSeriesHeader.getParameterId(); } writer.writeLine(locationHeader, columnSeparator); writer.writeLine(parameterHeader, columnSeparator); String[] line = new String[content.getTimeSeriesCount() + 1]; for (int i = 0, n = content.getContentTimeCount(); i < n; i++) { content.setContentTimeIndex(i); line[0] = content.getTime(content.getDefaultTimeZone(), "yyyy-MM-dd HH:mm:ss"); for (int j = 0, m = content.getTimeSeriesCount(); j < m; j++) { content.setTimeSeriesIndex(j); line[j + 1] = content.getValue(decimalSeparator); } writer.writeLine(line, columnSeparator); } } public char getDecimalSeparator() { return decimalSeparator; } public void setDecimalSeparator(char decimalSeparator) { this.decimalSeparator = decimalSeparator; } public char getColumnSeparator() { return columnSeparator; } public void setColumnSeparator(char columnSeparator) { this.columnSeparator = columnSeparator; } } |