package nl.wldelft.fews.system.plugin.dataImport; import nl.wldelft.util.TimeUnit; import nl.wldelft.util.TextUtils; import nl.wldelft.util.io.LineReader; import nl.wldelft.util.io.TextParser; import nl.wldelft.util.timeseries.DefaultTimeSeriesHeader; import nl.wldelft.util.timeseries.TimeSeriesContentHandler; /** * The KnmiEpsTimeSeriesParser parses ensemble files of Knmi */ public class KnmiEpsTimeSeriesParser implements TextParser<TimeSeriesContentHandler> { private TimeSeriesContentHandler contentHandler = null; private LineReader reader = null; private long forecastTime = Long.MIN_VALUE; private String[] buffer = new String[1000]; @Override public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws Exception { this.reader = reader; this.contentHandler = contentHandler; this.contentHandler.addMissingValue(99999F); DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader(); header.setCurrentReader(reader); header.setLocationId(TextUtils.leftFrom(reader.readLine(), ' ')); while (reader.readLine(' ', buffer) != -1) { String parameterId = buffer[0]; header.setForecastTime("yyyyMMddHH", buffer[1], contentHandler.getDefaultTimeZone()); forecastTime = header.getForecastTime(); header.setParameterId(parameterId + "_deterministic"); contentHandler.setNewTimeSeriesHeader(header); parseValues(); header.setParameterId(parameterId + "_control"); contentHandler.setNewTimeSeriesHeader(header); parseValues(); for (int i = 0; i < 50; i++) { header.setParameterId(parameterId + "_ensemble"); header.setEnsembleMemberIndex(i); contentHandler.setNewTimeSeriesHeader(header); parseValues(); } } } private void parseValues() throws Exception { int size = reader.readLine(' ', buffer); for (int i = 0; i < size; i++) { contentHandler.setTime(forecastTime + i * 6 * TimeUnit.HOUR_MILLIS); contentHandler.setValue('.', buffer[i]); contentHandler.applyCurrentFields(); } } }