Mercurial > dive4elements > river
view flys-backend/src/main/java/de/intevation/flys/importer/parsers/PegelGltParser.java @ 4768:99f9e371371b
Move distance calculation to Coordinate class. Use inheritance instead of composition in Anchor class. Made Anchor class static. Use epsilon equal comparision when checking for same station: Boy, do you ever learn that sharp equal comparison of doubles is not a clever idea!?
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Fri, 04 Jan 2013 15:35:51 +0100 |
parents | 976ead36192d |
children |
line wrap: on
line source
package de.intevation.flys.importer.parsers; import java.io.File; import java.util.List; import java.util.ArrayList; import java.io.IOException; import java.io.LineNumberReader; import java.io.FileInputStream; import java.io.InputStreamReader; import java.math.BigDecimal; import org.apache.log4j.Logger; import de.intevation.artifacts.common.utils.FileTools; import de.intevation.flys.importer.ImportGauge; import de.intevation.flys.importer.ImportRange; public class PegelGltParser { private static Logger log = Logger.getLogger(PegelGltParser.class); public static final String ENCODING = "ISO-8859-1"; public static final String KM = "km:"; protected List<ImportGauge> gauges; public PegelGltParser() { gauges = new ArrayList<ImportGauge>(); } public List<ImportGauge> getGauges() { return gauges; } public void parse(File file) throws IOException { File parent = file.getParentFile(); log.info("parsing GLT file '" + file + "'"); LineNumberReader in = null; try { in = new LineNumberReader( new InputStreamReader( new FileInputStream(file), ENCODING)); String line = null; while ((line = in.readLine()) != null) { if ((line = line.trim()).length() == 0) { continue; } int kmPos = line.indexOf(KM); if (kmPos < 0) { log.warn("GLT: no gauge found in line " + in.getLineNumber()); continue; } String gaugeName = line.substring(0, kmPos).trim(); log.info("Found gauge '" + gaugeName + "'"); line = line.substring(kmPos + KM.length()).trim(); String [] parts = line.split("\\s+"); if (parts.length < 4) { log.warn("GLT: line " + in.getLineNumber() + " has not enough columns."); continue; } BigDecimal from = new BigDecimal(parts[0].replace(",", ".")); BigDecimal to = new BigDecimal(parts[1].replace(",", ".")); if (from.compareTo(from) > 0) { BigDecimal t = from; from = to; to = t; } ImportRange range = new ImportRange(from, to); File staFile = FileTools.repair(new File(parent, parts[2])); File atFile = FileTools.repair(new File(parent, parts[3])); if (log.isDebugEnabled()) { log.debug("\tfrom: " + from); log.debug("\tto: " + to); log.debug("\tsta: " + staFile); log.debug("\tat: " + atFile); } gauges.add(new ImportGauge(range, staFile, atFile)); } } finally { if (in != null) { in.close(); } } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :