teichmann@5829: package org.dive4elements.river.importer.parsers; sascha@1211: sascha@1211: import java.io.File; sascha@1211: sascha@1211: import java.util.List; sascha@1211: import java.util.ArrayList; sascha@1211: sascha@1211: import java.io.IOException; sascha@1211: import java.io.LineNumberReader; sascha@1211: import java.io.FileInputStream; sascha@1211: import java.io.InputStreamReader; sascha@1211: sascha@1211: import java.math.BigDecimal; sascha@1211: sascha@1211: import org.apache.log4j.Logger; sascha@1211: teichmann@5829: import org.dive4elements.artifacts.common.utils.FileTools; sascha@1211: teichmann@5829: import org.dive4elements.river.importer.ImportGauge; teichmann@5829: import org.dive4elements.river.importer.ImportRange; sascha@1211: sascha@1211: public class PegelGltParser sascha@1211: { sascha@1211: private static Logger log = Logger.getLogger(PegelGltParser.class); sascha@1211: sascha@1211: public static final String ENCODING = "ISO-8859-1"; sascha@1211: sascha@1211: public static final String KM = "km:"; sascha@1211: sascha@1211: protected List gauges; sascha@1211: sascha@1211: public PegelGltParser() { sascha@1211: gauges = new ArrayList(); sascha@1211: } sascha@1211: sascha@1211: public List getGauges() { sascha@1211: return gauges; sascha@1211: } sascha@1211: sascha@1211: public void parse(File file) throws IOException { sascha@1211: sascha@1211: File parent = file.getParentFile(); sascha@1211: sascha@1211: log.info("parsing GLT file '" + file + "'"); sascha@1211: LineNumberReader in = null; sascha@1211: try { sascha@1211: in = sascha@1211: new LineNumberReader( sascha@1211: new InputStreamReader( sascha@1211: new FileInputStream(file), ENCODING)); sascha@1211: sascha@1211: String line = null; sascha@1211: while ((line = in.readLine()) != null) { sascha@1211: if ((line = line.trim()).length() == 0) { sascha@1211: continue; sascha@1211: } sascha@1211: sascha@1211: int kmPos = line.indexOf(KM); sascha@1211: if (kmPos < 0) { sascha@3660: log.warn("GLT: no gauge found in line " + in.getLineNumber()); sascha@1211: continue; sascha@1211: } sascha@1211: sascha@1211: String gaugeName = line.substring(0, kmPos).trim(); sascha@1211: log.info("Found gauge '" + gaugeName + "'"); sascha@1211: sascha@1211: line = line.substring(kmPos + KM.length()).trim(); sascha@1211: sascha@1211: String [] parts = line.split("\\s+"); sascha@1211: if (parts.length < 4) { sascha@3660: log.warn("GLT: line " + in.getLineNumber() sascha@3660: + " has not enough columns."); sascha@1211: continue; sascha@1211: } sascha@1211: sascha@1211: BigDecimal from = new BigDecimal(parts[0].replace(",", ".")); sascha@1211: BigDecimal to = new BigDecimal(parts[1].replace(",", ".")); sascha@1211: if (from.compareTo(from) > 0) { sascha@1211: BigDecimal t = from; from = to; to = t; sascha@1211: } sascha@1211: ImportRange range = new ImportRange(from, to); sascha@1211: File staFile = FileTools.repair(new File(parent, parts[2])); sascha@1211: File atFile = FileTools.repair(new File(parent, parts[3])); sascha@1211: sascha@1211: if (log.isDebugEnabled()) { sascha@1211: log.debug("\tfrom: " + from); sascha@1211: log.debug("\tto: " + to); sascha@1211: log.debug("\tsta: " + staFile); sascha@1211: log.debug("\tat: " + atFile); sascha@1211: } sascha@1211: sascha@1211: gauges.add(new ImportGauge(range, staFile, atFile)); sascha@1211: } sascha@1211: } sascha@1211: finally { sascha@1211: if (in != null) { sascha@1211: in.close(); sascha@1211: } sascha@1211: } sascha@1211: } sascha@1211: } sascha@1211: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :