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