/* ================================================================
 * 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.
 *
 * ----------------------------------------------------------------
 * TvaHoutlyWaterviewTimeSeriesParser.java
 * ----------------------------------------------------------------
 * (C) Copyright 2003, by WL | Delft Hydraulics
 *
 * Original Author:  pelgrim
 * Contributor(s):   
 *
 * Changes:
 * --------
 * 17-Apr-14 : 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.io.File;
import java.util.HashMap;

public class TvaHourlyWaterViewCsvTimeSeriesParser implements TextParser<TimeSeriesContentHandler> {

    private static final HashMap<Integer, String> PARAMETER_COLUMNS = new HashMap<>();

    public TvaHourlyWaterViewCsvTimeSeriesParser() {
        PARAMETER_COLUMNS.put(0, "HeadElev");
        PARAMETER_COLUMNS.put(1, "TailElev");
        PARAMETER_COLUMNS.put(2, "TurbDisch");
        PARAMETER_COLUMNS.put(6, "Spill");
        PARAMETER_COLUMNS.put(7, "PumpCFS");
        PARAMETER_COLUMNS.put(8, "PumpMWH");
        PARAMETER_COLUMNS.put(11, "GenMWH");
        PARAMETER_COLUMNS.put(14, "StationServ");
        PARAMETER_COLUMNS.put(34, "GrossGenMWH");
        PARAMETER_COLUMNS.put(37, "GrossPumpMWH");
        PARAMETER_COLUMNS.put(42, "WVStrtTime");
        PARAMETER_COLUMNS.put(43, "RiverDO");
        PARAMETER_COLUMNS.put(44, "RiverTemp");
        PARAMETER_COLUMNS.put(45, "Wv4");
    }

    @Override
    public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws Exception {
        DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();

        String fileName = new File(reader.getVirtualFileName()).getName();

        String locationId = determineLocationId(fileName);
        header.setLocationId(locationId);

        String dateTime = determineDateTime(fileName);

        String[] buffer = reader.readLine(',', '"');
        contentHandler.setTime(contentHandler.getDefaultTimeZone(), "yyyyMMddHH", dateTime);

        for(Integer i:PARAMETER_COLUMNS.keySet()){
            if(buffer[i].isEmpty()) continue;
            header.setParameterId(PARAMETER_COLUMNS.get(i));
            contentHandler.setTimeSeriesHeader(header);
            contentHandler.setValue('.', buffer[i]);
            contentHandler.applyCurrentFields();
        }

    }

    private static String determineDateTime(String virtualFileName) {
        return virtualFileName.substring(3, 13);
    }

    private static String determineLocationId(String fileName) {
        return fileName.substring(0, 3);
    }
}

  • No labels