teichmann@5844: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5844: * Software engineering by Intevation GmbH teichmann@5844: * teichmann@5992: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5844: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5992: * documentation coming with Dive4Elements River for details. teichmann@5844: */ teichmann@5844: teichmann@5829: package org.dive4elements.river.importer.parsers; ingo@2832: ingo@2832: import java.math.BigDecimal; ingo@2832: import java.text.DateFormat; ingo@2832: import java.text.NumberFormat; ingo@2832: import java.text.SimpleDateFormat; ingo@2832: import java.util.ArrayList; ingo@2832: import java.util.List; ingo@2832: ingo@2832: import org.apache.log4j.Logger; mschaefer@8989: import org.dive4elements.river.importer.ImportFlowVelocityMeasurement; mschaefer@8989: import org.dive4elements.river.importer.ImportFlowVelocityMeasurementValue; mschaefer@8989: import org.dive4elements.river.importer.common.AbstractParser; ingo@2832: public class FlowVelocityMeasurementParser extends LineParser { ingo@2832: ingo@2832: private static final Logger log = mschaefer@8989: Logger.getLogger(FlowVelocityMeasurementParser.class); ingo@2832: ingo@2832: private static final NumberFormat nf = mschaefer@8989: NumberFormat.getInstance(DEFAULT_LOCALE); ingo@2832: ingo@2832: private static final DateFormat df = mschaefer@8989: new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); ingo@2832: ingo@2832: mschaefer@8989: private final List measurements; ingo@2832: ingo@2832: private ImportFlowVelocityMeasurement current; ingo@2832: ingo@2832: ingo@2832: public FlowVelocityMeasurementParser() { mschaefer@8989: this.measurements = new ArrayList<>(); ingo@2832: } ingo@2832: ingo@2832: ingo@2832: public List getMeasurements() { mschaefer@8989: return this.measurements; ingo@2832: } ingo@2832: ingo@2832: @Override ingo@2832: protected void reset() { mschaefer@8989: this.current = new ImportFlowVelocityMeasurement(); ingo@2832: } ingo@2832: ingo@2832: ingo@2832: @Override ingo@2832: protected void finish() { mschaefer@8989: this.current.setDescription(this.fileName); mschaefer@8989: this.measurements.add(this.current); ingo@2832: } ingo@2832: ingo@2832: ingo@2832: @Override mschaefer@8989: protected void handleLine(final int lineNum, final String line) { ingo@2832: if (line.startsWith(START_META_CHAR)) { ingo@2832: handleMetaLine(stripMetaLine(line)); ingo@2832: } ingo@2832: else { ingo@2832: handleDataLine(line); ingo@2832: } ingo@2832: } ingo@2832: ingo@2832: mschaefer@8989: public void handleMetaLine(final String line) { ingo@2832: } ingo@2832: ingo@2832: mschaefer@8989: public void handleDataLine(final String line) { mschaefer@8989: final String[] cols = line.split(SEPERATOR_CHAR); ingo@2832: ingo@2832: if (cols.length < 8) { ingo@2832: log.warn("skip invalid data line: '" + line + "'"); ingo@2832: return; ingo@2832: } ingo@2832: ingo@2832: try { mschaefer@8989: final BigDecimal km = AbstractParser.parseDecimal(cols[1]); mschaefer@8989: final BigDecimal w = AbstractParser.parseDecimal(cols[5]); mschaefer@8989: final BigDecimal q = AbstractParser.parseDecimal(cols[6]); mschaefer@8989: final BigDecimal v = AbstractParser.parseDecimal(cols[7]); ingo@2832: mschaefer@8989: final String timestr = cols[3] + " " + cols[4]; mschaefer@8989: final String description = cols.length > 8 ? cols[8] : null; mschaefer@8989: mschaefer@8989: this.current.addValue(new ImportFlowVelocityMeasurementValue(df.parse(timestr), km, w, q, v, description)); ingo@2832: } mschaefer@8989: catch (final Exception pe) { tom@5490: log.warn("Unparseable flow velocity values:", pe); ingo@2832: } ingo@2832: } ingo@2832: } ingo@2832: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :