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();
}
}
}
}
|