HydroQuebecPRNTimeSeriesParser.java
package nl.wldelft.timeseriesparsers;

import nl.wldelft.util.FastDateFormat;
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.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.TimeZone;

/**
 * Created by pelgrim on 08-May-17.
 */
public class HydroQuebecPRNTimeSeriesParser implements TextParser<TimeSeriesContentHandler> {

    public static final TimeZone EST = TimeZone.getTimeZone("EST");
    public static final FastDateFormat DATE_FORMAT = FastDateFormat.getInstance("yyyyMMdd", EST, Locale.US, null);

    @Override
    public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws Exception {

        String[] buffer = reader.readLine(' ');
        Date date = DATE_FORMAT.parse(buffer[buffer.length - 1]);
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTimeZone(EST);
        calendar.setTime(date);
        calendar.add(Calendar.HOUR, 9);
        DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();
        header.setForecastTime(EST, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), 0);

        reader.skipLines(7);

        header.setParameterId("Q");
        calendar.setTime(date);
        calendar.add(Calendar.HOUR, 7);
        for (buffer = new String[5]; reader.readLine(' ', buffer) != -1; ) {
            calendar.add(Calendar.HOUR, 1);
            contentHandler.setTime(EST, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), 0);
            header.setLocationId("Carillon");
            contentHandler.setValue('.', buffer[1]);
            contentHandler.setTimeSeriesHeader(header);
            contentHandler.applyCurrentFields();

            contentHandler.setTime(EST, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), 0);
            header.setLocationId("Cornwall");
            contentHandler.setValue('.', buffer[2]);
            contentHandler.setTimeSeriesHeader(header);
            contentHandler.applyCurrentFields();

            contentHandler.setTime(EST, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND), 0);
            header.setLocationId("Lac St-Franc");
            contentHandler.setValue('.', buffer[3]);
            contentHandler.setTimeSeriesHeader(header);
            contentHandler.applyCurrentFields();
        }



    }
}

  • No labels