CroatianHFSResultsTimeSeriesParser.java
package nl.wldelft.timeseriesparsers;
import nl.wldelft.util.FastDateFormat;
import nl.wldelft.util.TimeUnit;
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.text.ParseException;
import java.util.Locale;
public class CroatianHFSResultsTimeSeriesParser implements TextParser<TimeSeriesContentHandler> {
private int columnCount = 6;
private LineReader reader = null;
private TimeSeriesContentHandler contentHandler = null;
private char columnSeparatorChar = ',';
private char decimalSeparatorChar = '.';
@Override
public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws IOException, ParseException {
this.contentHandler = contentHandler;
this.reader = reader;
//Skip header
reader.skipLines(1);
FastDateFormat dateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss", this.contentHandler.getDefaultTimeZone(), Locale.US, null);
DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();
for (String[] buffer = new String[columnCount]; this.reader.readLine(columnSeparatorChar, buffer) != -1; ) {
long forecastTime = dateFormat.parseToMillis(buffer[0]);
header.setForecastTime(forecastTime);
String qualifier = buffer[1];
header.setQualifierIds(qualifier);
String location = buffer[2];
header.setLocationId(location);
String parameter = buffer[3];
header.setParameterId(parameter);
int hoursSinceForecast = Integer.valueOf(buffer[4]);
this.contentHandler.setTimeSeriesHeader(header);
this.contentHandler.setTime(forecastTime + hoursSinceForecast * TimeUnit.HOUR_MILLIS);
this.contentHandler.setValue(decimalSeparatorChar, buffer[5]);
this.contentHandler.applyCurrentFields();
}
}
}