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

}

  • No labels