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