package nl.wldelft.timeseriesparsers; import nl.wldelft.util.TextUtils; import nl.wldelft.util.io.LineReader; import nl.wldelft.util.io.TextParser; import nl.wldelft.util.timeseries.DefaultTimeSeriesHeader; import nl.wldelft.util.timeseries.TimeSeriesContentHandler; /** * Parser for Dino GWS data */ public class DinoTimeSeriesParser implements TextParser<TimeSeriesContentHandler> { @Override public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws Exception { DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader(); header.setCurrentReader(reader); String[] columnNames = null; String[] buffer = null; char columnSeparator = '\0'; int headerIndex = -1; for (String line; (line = reader.readLine()) != null;) { if (columnSeparator == '\0') { if (line.indexOf(',') != -1) columnSeparator = ','; if (line.indexOf(';') != -1) columnSeparator = ';'; if (columnSeparator == '\0') continue; } if (TextUtils.leftFrom(line, columnSeparator).trim().equalsIgnoreCase("Locatie")) { columnNames = TextUtils.splitString(line, columnSeparator); TextUtils.trimElements(columnNames); buffer = new String[columnNames.length]; headerIndex++; continue; } // skip meta data header if (columnNames == null || headerIndex % 2 == 0) continue; TextUtils.splitString(line, columnSeparator, buffer); header.setLocationId(buffer[0]); header.setQualifierIds(buffer[1]); String time = buffer[2]; String pattern = time.indexOf('-') > -1 ? "dd-MM-yyyy" : "yy/MM/dd HH:mm:ss"; contentHandler.setTime(contentHandler.getDefaultTimeZone(), pattern, time); for (int i = 3; i < buffer.length; i++) { // Check for column with name BIJZONDERHEID, add as flag or comment (ToDo) if (columnNames[i].length() == 0) continue; if (columnNames[i].equalsIgnoreCase("BIJZONDERHEID")) { continue; } header.setParameterId(columnNames[i]); contentHandler.setTimeSeriesHeader(header); contentHandler.setValue('.', buffer[i]); contentHandler.applyCurrentFields(); } } } }