teichmann@5829: package org.dive4elements.river.importer.parsers; ingo@2832: teichmann@5829: import org.dive4elements.river.importer.ImportFlowVelocityMeasurement; teichmann@5829: import org.dive4elements.river.importer.ImportFlowVelocityMeasurementValue; sascha@2859: ingo@2832: import java.math.BigDecimal; sascha@2859: ingo@2832: import java.text.DateFormat; ingo@2832: import java.text.NumberFormat; ingo@2832: import java.text.ParseException; ingo@2832: import java.text.SimpleDateFormat; sascha@2859: ingo@2832: import java.util.ArrayList; ingo@2832: import java.util.List; ingo@2832: ingo@2832: import org.apache.log4j.Logger; ingo@2832: public class FlowVelocityMeasurementParser extends LineParser { ingo@2832: ingo@2832: private static final Logger log = ingo@2832: Logger.getLogger(FlowVelocityMeasurementParser.class); ingo@2832: ingo@2832: private static final NumberFormat nf = ingo@2832: NumberFormat.getInstance(DEFAULT_LOCALE); ingo@2832: ingo@2832: private static final DateFormat df = ingo@2832: new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); ingo@2832: ingo@2832: ingo@2832: private List measurements; ingo@2832: ingo@2832: private ImportFlowVelocityMeasurement current; ingo@2832: ingo@2832: ingo@2832: public FlowVelocityMeasurementParser() { ingo@2832: measurements = new ArrayList(); ingo@2832: } ingo@2832: ingo@2832: ingo@2832: public List getMeasurements() { ingo@2832: return measurements; ingo@2832: } ingo@2832: ingo@2832: @Override ingo@2832: protected void reset() { ingo@2832: current = new ImportFlowVelocityMeasurement(); ingo@2832: } ingo@2832: ingo@2832: ingo@2832: @Override ingo@2832: protected void finish() { rrenkert@5570: current.setDescription(fileName); ingo@2832: measurements.add(current); ingo@2832: } ingo@2832: ingo@2832: ingo@2832: @Override ingo@4193: protected void handleLine(int lineNum, 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: ingo@2832: public void handleMetaLine(String line) { ingo@2832: } ingo@2832: ingo@2832: ingo@2832: public void handleDataLine(String line) { ingo@2832: 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 { ingo@2832: double km = nf.parse(cols[1]).doubleValue(); ingo@2832: double w = nf.parse(cols[5]).doubleValue(); ingo@2832: double q = nf.parse(cols[6]).doubleValue(); ingo@2832: double v = nf.parse(cols[7]).doubleValue(); ingo@2832: ingo@2832: String timestr = cols[3] + " " + cols[4]; ingo@2832: String description = cols.length > 8 ? cols[8] : null; ingo@2832: ingo@2832: current.addValue(new ImportFlowVelocityMeasurementValue( ingo@2832: df.parse(timestr), ingo@2832: new BigDecimal(km), ingo@2832: new BigDecimal(w), ingo@2832: new BigDecimal(q), ingo@2832: new BigDecimal(v), ingo@2832: description ingo@2832: )); ingo@2832: } ingo@2832: catch (ParseException 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 :