Mercurial > dive4elements > river
view backend/src/main/java/org/dive4elements/river/importer/parsers/SedimentLoadLSParser.java @ 8043:bd0dea643440
Divide SedimentLoadLSParser into AbstractSedimentLoadParser and SedimentLoadLSParser to be able to reuse code for a new SedimentLoadParser for data at measurement stations.
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Wed, 16 Jul 2014 19:11:31 +0200 |
parents | 9342d7fe0ee7 |
children | d86cc6a17b7a |
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.io.File; import java.io.IOException; import java.text.NumberFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.dive4elements.river.importer.ImportGrainFraction; import org.dive4elements.river.importer.ImportSedimentLoadLS; import org.dive4elements.river.importer.ImportSedimentLoadLSValue; import org.dive4elements.river.importer.ImportTimeInterval; import org.dive4elements.river.importer.ImportUnit; import org.dive4elements.river.model.GrainFraction; /** Parses sediment load longitudinal section files. */ public class SedimentLoadLSParser extends AbstractSedimentLoadParser { private static final Logger log = Logger.getLogger(SedimentLoadLSParser.class); protected List<ImportSedimentLoadLS> sedimentLoadLSs; protected ImportSedimentLoadLS[] current; public SedimentLoadLSParser() { sedimentLoadLSs = new ArrayList<ImportSedimentLoadLS>(); } @Override protected void reset() { current = null; grainFraction = null; unit = null; } @Override protected void finish() { if (current != null) { for (ImportSedimentLoadLS isy: current) { sedimentLoadLSs.add(isy); } } description = null; } @Override protected void handleDataLine(String line) { String[] vals = line.split(SEPERATOR_CHAR); if (vals == null || vals.length < columnNames.length-1) { log.warn("SLLSP: skip invalid data line: '" + line + "'"); return; } try { Double km = nf.parse(vals[0]).doubleValue(); for (int i = 1, n = columnNames.length-1; i < n; i++) { String curVal = vals[i]; if (curVal != null && curVal.length() > 0) { current[i-1].addValue(new ImportSedimentLoadLSValue( km, nf.parse(vals[i]).doubleValue() )); } } } catch (ParseException pe) { log.warn("SLLSP: unparseable number in data row '" + line + "':", pe); } } @Override protected void initializeSedimentLoads() { // skip first column (Fluss-km) and last column (Hinweise) current = new ImportSedimentLoadLS[columnNames.length-2]; Integer kind; if (inputFile.getAbsolutePath().contains("amtliche Epochen")) { kind = new Integer(1); } else { kind = new Integer(0); } for (int i = 0, n = columnNames.length; i < n-2; i++) { current[i] = new ImportSedimentLoadLS(this.description); current[i].setTimeInterval(getTimeInterval(columnNames[i+1])); current[i].setUnit(unit); current[i].setGrainFraction(grainFraction); current[i].setKind(kind); } } public List<ImportSedimentLoadLS> getSedimentLoadLSs() { return sedimentLoadLSs; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :