Mercurial > dive4elements > river
view flys-backend/src/main/java/de/intevation/flys/importer/ImportRiver.java @ 482:3a99d0295006
Importer: Support parsing "zusaetzliche Laengsschnitte".
flys-backend/trunk@1801 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 03 May 2011 11:32:11 +0000 |
parents | 3169b559ca3c |
children | f1fd9cab6a07 |
line wrap: on
line source
package de.intevation.flys.importer; import java.util.List; import java.util.ArrayList; import java.io.File; import java.io.IOException; import org.apache.log4j.Logger; import de.intevation.flys.model.River; import de.intevation.flys.utils.FileTools; import org.hibernate.Session; import org.hibernate.Query; public class ImportRiver { private static Logger log = Logger.getLogger(ImportRiver.class); public static final String PEGEL_GLT = "PEGEL.GLT"; public static final String EXTRA_LONGITUDINALS = "Zus.L\u00e4ngsschnitte"; protected String name; protected File wstFile; protected File bbInfoFile; protected List<ImportGauge> gauges; protected List<ImportAnnotation> annotations; protected List<ImportWst> extraWsts; protected ImportWst wst; protected River peer; public ImportRiver() { extraWsts = new ArrayList<ImportWst>(); } public ImportRiver(String name, File wstFile, File bbInfoFile) { this(); this.name = name; this.wstFile = wstFile; this.bbInfoFile = bbInfoFile; } public String getName() { return name; } public void setName(String name) { this.name = name; } public File getWstFile() { return wstFile; } public void setWstFile(File wstFile) { this.wstFile = wstFile; } public File getBBInfo() { return bbInfoFile; } public void setBBInfo(File bbInfoFile) { this.bbInfoFile = bbInfoFile; } public ImportWst getWst() { return wst; } public void setWst(ImportWst wst) { this.wst = wst; } public void parseDependencies() throws IOException { parseGauges(); parseAnnotations(); parseWst(); parseExtraWsts(); } public void parseExtraWsts() throws IOException { log.info("Parse extra longitudinal wst files"); File riverDir = wstFile.getParentFile().getParentFile(); File extraDir = FileTools.repair( new File(riverDir, EXTRA_LONGITUDINALS)); if (!extraDir.isDirectory() || !extraDir.canRead()) { log.info("no extra longitudinal wst file directory found"); return; } File [] files = extraDir.listFiles(); if (files == null) { log.warn("cannot read extra longitudinal wst file directory"); return; } for (File file: files) { if (!file.isFile() || !file.canRead()) { continue; } String name = file.getName().toLowerCase(); if (!(name.endsWith(".zus") || name.endsWith(".wst"))) { continue; } log.debug("Found WST file: " + file); WstParser wstParser = new WstParser(); wstParser.parse(file); ImportWst iw = wstParser.getWst(); iw.setKind(1); extraWsts.add(iw); } } public void parseWst() throws IOException { WstParser wstParser = new WstParser(); wstParser.parse(wstFile); wst = wstParser.getWst(); } public void parseGauges() throws IOException { File gltFile = new File(wstFile.getParentFile(), PEGEL_GLT); gltFile = FileTools.repair(gltFile); if (!gltFile.isFile() || !gltFile.canRead()) { log.warn("cannot read gauges from '" + gltFile + "'"); return; } PegelGltParser pgltp = new PegelGltParser(); pgltp.parse(gltFile); gauges = pgltp.getGauges(); for (ImportGauge gauge: gauges) { gauge.parseDependencies(); } } public void parseAnnotations() throws IOException { File riverDir = wstFile.getParentFile().getParentFile(); AnnotationsParser aparser = new AnnotationsParser(); aparser.parse(riverDir); annotations = aparser.getAnnotations(); } public void storeDependencies() { storeAnnotations(); storeGauges(); storeWst(); storeExtraWsts(); } public void storeWst() { River river = getPeer(); wst.storeDependencies(river); } public void storeExtraWsts() { log.info("store extra wsts"); River river = getPeer(); for (ImportWst wst: extraWsts) { log.debug("name: " + wst.getDescription()); wst.storeDependencies(river); } } public void storeAnnotations() { River river = getPeer(); for (ImportAnnotation annotation: annotations) { annotation.getPeer(river); } } public void storeGauges() { log.info("store gauges:"); River river = getPeer(); for (ImportGauge gauge: gauges) { log.info("\tgauge: " + gauge.getName()); gauge.storeDependencies(river); } } public River getPeer() { if (peer == null) { Session session = Importer.sessionHolder.get(); Query query = session.createQuery("from River where name=:name"); query.setString("name", name); List<River> rivers = query.list(); if (rivers.isEmpty()) { peer = new River(name); session.save(peer); } else { peer = rivers.get(0); } } return peer; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :