You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

/* ================================================================
 * 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.
 *
 * ----------------------------------------------------------------
 * ColumnPerLocationCsvParser.java
 * ----------------------------------------------------------------
 * (C) Copyright 2003, by WL | Delft Hydraulics
 *
 * Original Author:  akker_o
 * Contributor(s):   
 *
 * Changes:
 * --------
 * 13-Mar-17 : Version 1 ();
 * 
 *
 */

package nl.wldelft.timeseriesparsers;

import nl.wldelft.util.ColumnSeparatorConsumer;
import nl.wldelft.util.DateTimePatternConsumer;
import nl.wldelft.util.DecimalSeparatorConsumer;
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.IOException;
import java.util.TimeZone;

/**
 *  @see <a href="https://publicwiki.deltares.nl/display/FEWSDOC/LocationIdsHeaderCsv">wiki</a>
 */
public class LocationIdsHeaderCsvParser implements TextParser<TimeSeriesContentHandler>, DecimalSeparatorConsumer, ColumnSeparatorConsumer, DateTimePatternConsumer {
    private String dateTimePattern = "dd/MM/yyyy HH:mm:ss";
    private char decimalSeparator = '.';
    private char columnSeparator = ',';

    @Override
    public void parse(LineReader reader, String virtualFileName, TimeSeriesContentHandler contentHandler) throws IOException {
        contentHandler.addMissingValue("-");
        reader.setSkipEmptyLines(true);

        DefaultTimeSeriesHeader header = new DefaultTimeSeriesHeader();
        String[] headerLine = reader.readLine(columnSeparator);
        for (int i = 1; i < headerLine.length; i++) {
            header.setLocationId(headerLine[i]);
            contentHandler.createTimeSeriesHeaderAlias(i, header);
        }
        TimeZone timeZone = contentHandler.getDefaultTimeZone();

        for (String[] buffer = new String[headerLine.length]; reader.readLine(columnSeparator, '\"', buffer) != -1; ) {
            contentHandler.setTime(timeZone, dateTimePattern, buffer[0]);
            for (int i = 1; i < buffer.length; i++) {
                contentHandler.setTimeSeriesHeader(i);
                contentHandler.setValue(decimalSeparator, buffer[i]);
                contentHandler.applyCurrentFields();
            }
        }
    }

    @Override
    public void setColumnSeparator(char columnSeparator) {
        this.columnSeparator = columnSeparator;
    }

    @Override
    public void setDecimalSeparator(char decimalSeparator) {
        this.decimalSeparator = decimalSeparator;
    }

    @Override
    public void setDateTimePattern(String dateTimePattern) {
        this.dateTimePattern = dateTimePattern;
    }

}
  • No labels