view backend/src/main/java/org/dive4elements/river/importer/sinfo/parsers/TkhColumnParser.java @ 9655:1f57381b3bb5

Importer (s/u-info) extensions: uniform formatting of from-to series names, warning instead of cancelling in case of missing tkh column values, detecting, logging and skipping columns with wrong unit
author mschaefer
date Mon, 23 Mar 2020 15:16:35 +0100
parents bf8a9df86f32
children
line wrap: on
line source
/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
 * Software engineering by
 *  Björnsen Beratende Ingenieure GmbH
 *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */

package org.dive4elements.river.importer.sinfo.parsers;

import java.io.File;

import org.apache.log4j.Logger;
import org.dive4elements.river.importer.ImportRiver;
import org.dive4elements.river.importer.common.AbstractParser;
import org.dive4elements.river.importer.common.ParsingState;
import org.dive4elements.river.importer.sinfo.importitem.TkhColumnSeriesImport;
import org.dive4elements.river.importer.sinfo.importitem.TkhKmLineImport;
import org.dive4elements.river.importer.sinfo.importitem.TkhSeriesImport;
import org.dive4elements.river.model.sinfo.TkhColumn;
import org.dive4elements.river.model.sinfo.TkhValue;

/**
 * Reads and parses a column of a TKH file
 *
 * @author Matthias Schäfer
 *
 */
public class TkhColumnParser extends AbstractParser<TkhColumn, TkhValue, TkhKmLineImport, TkhColumnSeriesImport> {

    /***** FIELDS *****/

    private static final Logger log = Logger.getLogger(TkhColumnParser.class);

    private final TkhSeriesImport parent;

    private final int colIndex;

    private final String colName;


    /***** CONSTRUCTORS *****/

    public TkhColumnParser(final File importPath, final File rootRelativePath, final ImportRiver river, final TkhSeriesImport parent, final int colIndex,
            final String colName) {
        super(importPath, rootRelativePath, river);
        this.parent = parent;
        this.colIndex = colIndex;
        this.colName = colName;
    }


    /***** METHODS *****/

    @Override
    protected Logger getLog() {
        return log;
    }

    @Override
    protected void logStartInfo() {
        getLog().info(String.format("Start parsing column %d '%s':;'%s'", this.colIndex + 1, this.colName, this.rootRelativePath));
    }

    @Override
    protected boolean handleMetaOther() {
        this.headerParsingState = ParsingState.IGNORE;
        return false;
    }

    @Override
    protected TkhColumnSeriesImport createSeriesImport(final String filename) {
        return new TkhColumnSeriesImport(filename, this.parent, this.colName, this.rootRelativePath);
    }

    @Override
    protected TkhKmLineImport createKmLineImport(final Double km, final String[] values) {
        final Number value = parseDoubleCheckNull(values, this.colIndex);
        if ((value == null) || Double.isNaN(value.doubleValue())) {
            logLineWarning("Column %d: " + INVALID_VALUE_ERROR_FORMAT, this.colIndex + 1, "TKH");
            return null;
        }
        // convert from cm to m
        final double tkh = value.doubleValue() / 100.0;
        return new TkhKmLineImport(km, tkh);
    }
}

http://dive4elements.wald.intevation.org