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