view backend/src/main/java/org/dive4elements/river/importer/parsers/BedHeightSingleParser.java @ 7417:cf8d37ed4d34

BedHeightSingleParser: fix no-data-line detection.
author Tom Gottfried <tom@intevation.de>
date Wed, 23 Oct 2013 09:59:46 +0200
parents 495cde925702
children 3a0522f1a532
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * 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.parsers;

import java.text.ParseException;

import org.apache.log4j.Logger;

import org.dive4elements.river.importer.ImportBedHeight;
import org.dive4elements.river.importer.ImportBedHeightSingle;
import org.dive4elements.river.importer.ImportBedHeightSingleValue;


public class BedHeightSingleParser extends BedHeightParser {

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


    @Override
    protected ImportBedHeight newImportBedHeight(String description) {
        return new ImportBedHeightSingle(description);
    }


    /**
     * Create ImportBedHeightSingleValue from a line of csv file, add
     * it to the ImportBedHeight.
     */
    @Override
    protected void handleDataLine(ImportBedHeight obj, String line) {
        String[] values = line.split(SEPERATOR_CHAR, -1);

        if (values == null) {
            log.warn("BSP: Error while parsing data line: '" + line + "'");
            return;
        }

        Double km;

        try {
            km = new Double(nf.parse(values[0]).doubleValue());

            Double key = Double.valueOf(km);

            if (kmExists.contains(key)) {
                log.warn("duplicate station '" + km + "': -> ignored");
                return;
            }

            kmExists.add(key);
        }
        catch (ParseException e) {
            // We expect a lot of ";;;;;;" lines.
            return;
        }

        // Handle gaps like "10,0;;;;;".
        if (values.length <= 2) {
            // Do not import line without useful data
            if (values.length < 2) {
                return;
            }
            if (values[1].length() == 0) {
                return;
            }
        }

        Double height = null;
        if (values[1].length() > 0) {
            try {
                height = new Double(nf.parse(values[1]).doubleValue());
            }
            catch (ParseException e) {
                log.warn("BSP: unparseable height " + values[1]);
            }
        }

        Double uncertainty = null;
        if (values[2].length() > 0) {
            try {
                uncertainty = new Double(nf.parse(values[2]).doubleValue());
            }
            catch (ParseException e) {
                log.warn("BSP: unparseable uncertainty value " + values[2]);
            }
        }

        Double dataGap = null;
        if (values[3].length() > 0) {
            try {
                dataGap = new Double(nf.parse(values[3]).doubleValue());
            }
            catch (ParseException e) {
                log.warn("BSP: unparseable data gap " + values[3]);
            }
        }

        Double soundingWidth = null;
        if (values[4].length() > 0) {
            try {
                soundingWidth = new Double(nf.parse(values[4]).doubleValue());
            }
            catch (ParseException e) {
                log.warn("BSP: unparseable sounding width " + values[4]);
            }
        }

        Double width = null;
        if (values[5].length() > 0) {
            try {
                width = new Double(nf.parse(values[5]).doubleValue());
            }
            catch (ParseException e) {
                log.warn("BSP: unparseable width " + values[5]);
            }
        }

        ImportBedHeightSingleValue value = new ImportBedHeightSingleValue(
            (ImportBedHeightSingle) obj,
            km,
            height,
            uncertainty,
            dataGap,
            soundingWidth,
            width);

        obj.addValue(value);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org