/* ================================================================
 * Delft FEWS
 * ================================================================
 *
 * Project Info:  http://www.wldelft.nl/soft/fews/index.html
 * Project Lead:  Karel Heynert (karel.heynert@wldelft.nl)
 *
 * (C) Copyright 2003, by WL | Delft Hydraulics
 *                        P.O. Box 177
 *                        2600 MH  Delft
 *                        The Netherlands
 *                        http://www.wldelft.nl
 *
 * DELFT-FEWS is a sophisticated collection of modules designed
 * for building a FEWS customised to the specific requirements
 * of individual agencies. An open modelling approach allows users
 * to add their own modules in an efficient way.
 *
 * ----------------------------------------------------------------
 * LmwKnmiCsvTimeSeriesParser.java
 * ----------------------------------------------------------------
 * (C) Copyright 2003, by WL | Delft Hydraulics
 *
 * Original Author:  pelgrim
 * Contributor(s):
 *
 * Changes:
 * --------
 * 9/24/13 : Version 1 ();
 *
 *
 */

package nl.wldelft.timeseriesparsers;

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.HashMap;
import java.util.Map;

public class LmwKnmiCsvTimeSeriesParser implements TextParser<TimeSeriesContentHandler> {
    @Override
    public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws Exception {
        Map<String, String> unitMap = new HashMap<String, String>();
        String fileName = "LmwKnmiCsvParameterUnits.txt";
        LineReader paramUnits = new LineReader(this.getClass().getResourceAsStream(fileName), fileName);
        String[] paramUnitSet;
        String line;
        String unit;
        while ((line = paramUnits.readLine()) != null) {
            paramUnitSet = line.split("\t");
            unit = paramUnitSet.length >=2 ? paramUnitSet[1] : "";
            unitMap.put(paramUnitSet[0], unit);
        }

        DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();
        String[] buffer = new String[7];
        while ( reader.readLine(',', buffer) != -1 ) {
            contentHandler.setTime(contentHandler.getDefaultTimeZone(), "yyyyMMddHHmm", buffer[1].trim() + buffer[2].trim());
            header.setLocationId(buffer[0]);
            header.setParameterId(buffer[4]);
            header.setUnit(unitMap.get(buffer[4].trim()));
            contentHandler.setValue('.', buffer[5]);
            contentHandler.setTimeSeriesHeader(header);
            contentHandler.applyCurrentFields();
        }
    }

}
  • No labels