/* ================================================================
 * 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.
 *
 * ----------------------------------------------------------------
 * LmwWallonieTimeSeriesParser.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.TimeZoneUtils;
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 LmwWallonieTimeSeriesParser implements TextParser<TimeSeriesContentHandler> {
    @Override
    public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws Exception {

        contentHandler.addMissingValue("*.***");

        Map<String, String> paraMap = new HashMap<>();
        paraMap.put("1", "height");
        paraMap.put("2", "discharge");
        paraMap.put("5", "rain");

        Map<String, String> unitMap = new HashMap<>();
        unitMap.put("1", "m");
        unitMap.put("2", "m3/s");
        unitMap.put("5", "mm");

        DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();

        String buffer;
        while ((buffer = reader.readLine()) != null) {
            String locId = buffer.substring(0, 11).trim();
            header.setLocationId(locId);
            String param = locId.substring(locId.length() - 1);
            header.setParameterId(paraMap.get(param));
            header.setUnit(unitMap.get(param));
            String date = buffer.substring(32).trim();
            for (int j = 0; j < 3; j++) {
                String valueLine = reader.readLine();
                for (int i = 0; i < 8; i++) {
                    String hours = j * 8 + i > 10 ? "" + (j * 8 + i) : " " + (j * 8 + i);
                    contentHandler.setTime(TimeZoneUtils.parseTimeZone("GMT+01:00"), "yyyyMMddHH", date + hours);
                    contentHandler.setValue('.', valueLine.substring(i * 9, (i + 1) * 9));
                    contentHandler.setTimeSeriesHeader(header);
                    contentHandler.applyCurrentFields();
                }
            }
        }
    }
}

  • No labels