Mercurial > dive4elements > river
view backend/src/main/java/org/dive4elements/river/importer/parsers/InfoGewParser.java @ 6890:8ca5d0e3c438 double-precision
BWASTR-Import: name of tributary contains name of river, not the other way round.
author | Tom Gottfried <tom.gottfried@intevation.de> |
---|---|
date | Wed, 21 Aug 2013 15:32:53 +0200 |
parents | 4c3ccf2b0304 |
children | 24408bce2fdb |
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.util.List; import java.util.ArrayList; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.io.IOException; import java.io.LineNumberReader; import java.io.FileInputStream; import java.io.InputStreamReader; import org.apache.log4j.Logger; import org.dive4elements.artifacts.common.utils.FileTools; import org.dive4elements.river.importer.ImportRiver; /** Processes files mentioned in an info file for a river. */ public class InfoGewParser { private static Logger log = Logger.getLogger(InfoGewParser.class); public static final String ENCODING = "ISO-8859-1"; public static final Pattern GEWAESSER = Pattern.compile("^\\s*Gew\u00e4sser\\s*:\\s*(.+)"); public static final Pattern WST_DATEI = Pattern.compile("^\\s*WSTDatei\\s*:\\s*(.+)"); public static final Pattern BB_INFO = Pattern.compile("^\\s*B\\+B-Info\\s*:\\s*(.+)"); protected ArrayList<ImportRiver> rivers; protected AnnotationClassifier annotationClassifier; public InfoGewParser() { this(null); } public InfoGewParser(AnnotationClassifier annotationClassifier) { rivers = new ArrayList<ImportRiver>(); this.annotationClassifier = annotationClassifier; } public List<ImportRiver> getRivers() { return rivers; } public static final String normalize(String f) { return f.replace("\\", "/").replace("/", File.separator); } /** Handle a gew, wst, or bb_info file. */ public void parse(File file) throws IOException { LineNumberReader in = null; File root = file.getParentFile(); try { in = new LineNumberReader( new InputStreamReader( new FileInputStream(file), ENCODING)); String line = null; String riverName = null; File wstFile = null; File bbInfoFile = null; while ((line = in.readLine()) != null) { if ((line = line.trim()).length() == 0) { continue; } Matcher m = GEWAESSER.matcher(line); if (m.matches()) { String river = m.group(1); log.info("Found river '" + river + "'"); if (riverName != null) { rivers.add(new ImportRiver( riverName, wstFile, bbInfoFile, annotationClassifier)); } riverName = river; wstFile = null; bbInfoFile = null; } else if ((m = WST_DATEI.matcher(line)).matches()) { String wstFilename = m.group(1); File wst = new File(wstFilename = normalize(wstFilename)); if (!wst.isAbsolute()) { wst = new File(root, wstFilename); } wst = FileTools.repair(wst); log.info("Found wst file '" + wst + "'"); if (!wst.isFile() || !wst.canRead()) { log.error("cannot access WST file '" + wstFilename + "'"); continue; } wstFile = wst; } else if ((m = BB_INFO.matcher(line)).matches()) { //TODO: Make it relative to the wst file. String bbInfo = m.group(1); bbInfoFile = new File(normalize(bbInfo)); } } if (riverName != null) { rivers.add(new ImportRiver( riverName, wstFile, bbInfoFile, annotationClassifier)); } } finally { if (in != null) { in.close(); } } for (ImportRiver river: rivers) { river.parseDependencies(); } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :