package nl.wldelft.timeseriesparsers; import nl.wldelft.util.ColumnSeparatorConsumer; import nl.wldelft.util.DateTimePatternConsumer; import nl.wldelft.util.DecimalSeparatorConsumer; import nl.wldelft.util.io.LineReader; import nl.wldelft.util.io.TextParser; import nl.wldelft.util.timeseries.DefaultTimeSeriesHeader; import nl.wldelft.util.timeseries.TimeSeriesContentHandler; import java.io.IOException; import java.util.TimeZone; /** * @see <a href="https://publicwiki.deltares.nl/display/FEWSDOC/LocationIdsHeaderCsv">wiki</a> */ public class LocationIdsHeaderCsvParser implements TextParser<TimeSeriesContentHandler>, DecimalSeparatorConsumer, ColumnSeparatorConsumer, DateTimePatternConsumer { private String dateTimePattern = "dd/MM/yyyy HH:mm:ss"; private char decimalSeparator = '.'; private char columnSeparator = ','; @Override public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws IOException { contentHandler.addMissingValue("-"); reader.setSkipEmptyLines(true); DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader(); String[] headerLine = reader.readLine(columnSeparator); for (int i = 1; i < headerLine.length; i++) { header.setLocationId(headerLine[i]); contentHandler.createTimeSeriesHeaderAlias(i, header); } TimeZone timeZone = contentHandler.getDefaultTimeZone(); for (String[] buffer = new String[headerLine.length]; reader.readLine(columnSeparator, '\"', buffer) != -1; ) { contentHandler.setTime(timeZone, dateTimePattern, buffer[0]); for (int i = 1; i < buffer.length; i++) { contentHandler.setTimeSeriesHeader(i); contentHandler.setValue(decimalSeparator, buffer[i]); contentHandler.applyCurrentFields(); } } } @Override public void setColumnSeparator(char columnSeparator) { this.columnSeparator = columnSeparator; } @Override public void setDecimalSeparator(char decimalSeparator) { this.decimalSeparator = decimalSeparator; } @Override public void setDateTimePattern(String dateTimePattern) { this.dateTimePattern = dateTimePattern; } }