Mercurial > dive4elements > river
view backend/src/main/java/org/dive4elements/river/importer/sinfo/SInfoImporter.java @ 9578:3dfcb6e1c4d6
Use of SessionHolder replaced by ImporterSession if query executed in the importer
author | mschaefer |
---|---|
date | Tue, 11 Dec 2018 14:40:36 +0100 |
parents | a44200bf0547 |
children | ac41551a8e4d |
line wrap: on
line source
/* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * 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.sinfo; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.dive4elements.river.importer.ImportRiver; import org.dive4elements.river.importer.common.ImportParser; import org.dive4elements.river.importer.sinfo.parsers.BedMobilityParser; import org.dive4elements.river.importer.sinfo.parsers.ChannelParser; import org.dive4elements.river.importer.sinfo.parsers.CollisionParser; import org.dive4elements.river.importer.sinfo.parsers.DailyDischargeParser; import org.dive4elements.river.importer.sinfo.parsers.DepthEvolutionParser; import org.dive4elements.river.importer.sinfo.parsers.FlowDepthParser; import org.dive4elements.river.importer.sinfo.parsers.InfrastructureParser; import org.dive4elements.river.importer.sinfo.parsers.SelectedAdditionalParser; import org.dive4elements.river.importer.sinfo.parsers.TkhParser; /** * Import all S-INFO files of a river from its import directory and subdirectories<br /> * <br /> * Requires river and its gauges to exist in the database already * * @author Matthias Schäfer * */ public class SInfoImporter { /***** FIELDS *****/ private static final Logger log = Logger.getLogger(SInfoImporter.class); private static final String SINFO_DIR = "Schifffahrt"; private enum SInfoDirName { BASICS("Basisdaten"), // SELECTED_ADDITIONAL("Selektierte_Zusaetzliche_Laengsschnitte"), // INFRASTRUCTURE("Infrastrukturen_BWaStr"), // CHANNEL("Zu_gewaehrleistende_Fahrrinnenverhaeltnisse"), // COLLISION_EINZEL("Grundberuehrungen" + File.separator + "Einzeljahre"), // TKH_NATUR("Transportkoerperhoehen" + File.separator + "Naturmessungen"), // TKH_BERECHNUNG("Transportkoerperhoehen" + File.separator + "Berechnungsergebnisse"), // FLOW_DEPTH("Modellierte_Datensaetze" + File.separator + "Fliesstiefen"), // DEPTH_EVOLUTION_AKTUELL("Fliesstiefenentwicklung" + File.separator + "Bezug_aktueller_GlW"), // DEPTH_EVOLUTION_ETAPPEN("Fliesstiefenentwicklung" + File.separator + "GlW-Etappen"); private final String dirname; SInfoDirName(final String dirname) { this.dirname = dirname; } public String getDir() { return this.dirname; } public File getFile() { return new File(getDir()); } public File buildPath(final File rootDir) { return new File(rootDir, getDir()); } } /** * Series of river's stations with bed mobility flag. */ private final List<ImportParser> parsers; /** * Path of the S-INFO data directory of the importing river. */ private File rootDir; /***** CONSTRUCTOR *****/ public SInfoImporter() { this.parsers = new ArrayList<>(); } /***** METHODS *****/ /** * Inits the parser list regarding the skip flags. */ public void setup(final File riverDir, final ImportRiver river) { this.rootDir = new File(riverDir, SINFO_DIR); log.info("Parse S-INFO files from " + this.rootDir); this.parsers.clear(); if (!BedMobilityParser.shallSkip()) { if (!this.parsers.addAll(BedMobilityParser.createParsers(SInfoDirName.BASICS.buildPath(this.rootDir), SInfoDirName.BASICS.getFile(), river))) log.info("Bed mobility: no files found"); } else { log.info("Bed mobility: skipped"); } if (!SelectedAdditionalParser.shallSkip()) { if (!this.parsers.addAll(SelectedAdditionalParser.createParsers(SInfoDirName.SELECTED_ADDITIONAL.buildPath(this.rootDir), SInfoDirName.SELECTED_ADDITIONAL.getFile(), river))) log.info("Selected additionals: no files found"); } else { log.info("Selected additionals: skipped"); } if (!InfrastructureParser.shallSkip()) { if (!this.parsers.addAll(InfrastructureParser.createParsers(SInfoDirName.INFRASTRUCTURE.buildPath(this.rootDir), SInfoDirName.INFRASTRUCTURE.getFile(), river))) log.info("Infrastructure: no files found"); } else { log.info("Infrastructure: skipped"); } if (!ChannelParser.shallSkip()) { if (!this.parsers.addAll(ChannelParser.createParsers(SInfoDirName.CHANNEL.buildPath(this.rootDir), SInfoDirName.CHANNEL.getFile(), river))) log.info("Channel: no files found"); } else { log.info("Channel: skipped"); } if (!CollisionParser.shallSkip()) { boolean added = false; added = this.parsers.addAll(CollisionParser.createParsers(SInfoDirName.COLLISION_EINZEL.buildPath(this.rootDir), SInfoDirName.COLLISION_EINZEL.getFile(), river)); if (!added) log.info("Collision: no files found"); } else { log.info("Collision: skipped"); } if (!DailyDischargeParser.shallSkip()) { if (!this.parsers.addAll(DailyDischargeParser.createParsers(SInfoDirName.BASICS.buildPath(this.rootDir), SInfoDirName.BASICS.getFile(), river))) log.info("Daily discharge: no files found"); } else { log.info("Daily discharge: skipped"); } if (!TkhParser.shallSkip()) { boolean added = false; added = this.parsers.addAll(TkhParser.createParsers(SInfoDirName.TKH_NATUR.buildPath(this.rootDir), SInfoDirName.TKH_NATUR.getFile(), river)); added |= this.parsers.addAll(TkhParser.createParsers(SInfoDirName.TKH_BERECHNUNG.buildPath(this.rootDir), SInfoDirName.TKH_BERECHNUNG.getFile(), river)); if (!added) log.info("Tkh: no files found"); } else { log.info("Tkh: skipped"); } if (!FlowDepthParser.shallSkip()) { if (!this.parsers.addAll(FlowDepthParser.createParsers(SInfoDirName.FLOW_DEPTH.buildPath(this.rootDir), SInfoDirName.FLOW_DEPTH.getFile(), river))) log.info("FlowDepth: no files found"); } else { log.info("FlowDepth: skipped"); } if (!DepthEvolutionParser.shallSkip()) { boolean added = false; added = this.parsers.addAll(DepthEvolutionParser.createParsers(SInfoDirName.DEPTH_EVOLUTION_AKTUELL.buildPath(this.rootDir), SInfoDirName.DEPTH_EVOLUTION_AKTUELL.getFile(), river)); added |= this.parsers.addAll(DepthEvolutionParser.createParsers(SInfoDirName.DEPTH_EVOLUTION_ETAPPEN.buildPath(this.rootDir), SInfoDirName.DEPTH_EVOLUTION_ETAPPEN.getFile(), river)); if (!added) log.info("Depth evolution: no files found"); } else { log.info("Depth evolution: skipped"); } } /** * Imports the files according to the active parser list */ public void parse() throws IOException { for (final ImportParser parser : this.parsers) parser.parse(); } /** * Stores all pending import objects */ public void store() { for (final ImportParser parser : this.parsers) parser.store(); } }