mschaefer@8971: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
mschaefer@8971: * Software engineering by
mschaefer@8971: * Björnsen Beratende Ingenieure GmbH
mschaefer@8971: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
mschaefer@8971: *
mschaefer@8971: * This file is Free Software under the GNU AGPL (>=v3)
mschaefer@8971: * and comes with ABSOLUTELY NO WARRANTY! Check out the
mschaefer@8971: * documentation coming with Dive4Elements River for details.
mschaefer@8971: */
mschaefer@8971:
mschaefer@8971: package org.dive4elements.river.importer.uinfo;
mschaefer@8971:
mschaefer@8971: import java.io.File;
mschaefer@8971: import java.io.IOException;
mschaefer@8971: import java.util.ArrayList;
mschaefer@8971: import java.util.List;
mschaefer@8971:
mschaefer@8971: import org.apache.log4j.Logger;
mschaefer@8971: import org.dive4elements.river.importer.ImportRiver;
mschaefer@8971: import org.dive4elements.river.importer.common.ImportParser;
mschaefer@8971: import org.dive4elements.river.importer.uinfo.parsers.SalixParser;
mschaefer@8971:
mschaefer@8971: /**
mschaefer@8971: * Import all S-INFO files of a river from its import directory and subdirectories
mschaefer@8971: *
mschaefer@8971: * Requires river and its gauges to exist in the database already
mschaefer@8971: *
mschaefer@8971: * @author Matthias Schäfer
mschaefer@8971: *
mschaefer@8971: */
mschaefer@8971: public class UInfoImporter
mschaefer@8971: {
mschaefer@8971: /***** FIELDS *****/
mschaefer@8971:
mschaefer@8971: private static final Logger log = Logger.getLogger(UInfoImporter.class);
mschaefer@8971:
mschaefer@8971: private static final String UINFO_DIR = "Oekologie";
mschaefer@8971:
mschaefer@8971: private enum UInfoDirName {
mschaefer@8971: BASICS("Basisdaten"), //
mschaefer@8992: SALIX("Salix-Linie" + File.separator + "Salix-Linie");
mschaefer@8971:
mschaefer@8971: private final String dirname;
mschaefer@8971:
mschaefer@8971: UInfoDirName(final String dirname) {
mschaefer@8971: this.dirname = dirname;
mschaefer@8971: }
mschaefer@8971:
mschaefer@8971: public String getDir() {
mschaefer@8971: return this.dirname;
mschaefer@8971: }
mschaefer@8971: public File getFile() {
mschaefer@8971: return new File(getDir());
mschaefer@8971: }
mschaefer@8971:
mschaefer@8971: public File buildPath(final File rootDir) {
mschaefer@8971: return new File(rootDir, getDir());
mschaefer@8971: }
mschaefer@8971: }
mschaefer@8971:
mschaefer@8971: /**
mschaefer@8971: * Series of river's stations with bed mobility flag.
mschaefer@8971: */
mschaefer@8971: private final List parsers;
mschaefer@8971:
mschaefer@8971: /**
mschaefer@8971: * Path of the S-INFO data directory of the importing river.
mschaefer@8971: */
mschaefer@8971: private File rootDir;
mschaefer@8971:
mschaefer@8971:
mschaefer@8971: /***** CONSTRUCTOR *****/
mschaefer@8971:
mschaefer@8971: public UInfoImporter() {
mschaefer@8971: this.parsers = new ArrayList<>();
mschaefer@8971: }
mschaefer@8971:
mschaefer@8971: /***** METHODS *****/
mschaefer@8971:
mschaefer@8971: /**
mschaefer@8971: * Inits the parser list regarding the skip flags.
mschaefer@8971: */
mschaefer@8971: public void setup(final File riverDir, final ImportRiver river) {
mschaefer@8971: this.rootDir = new File(riverDir, UINFO_DIR);
mschaefer@8971: log.info("Parse U-INFO files from " + this.rootDir);
mschaefer@8971: this.parsers.clear();
mschaefer@8971: if (!SalixParser.shallSkip()) {
mschaefer@8971: if (!this.parsers.addAll(SalixParser.createParsers(UInfoDirName.SALIX.buildPath(this.rootDir), UInfoDirName.SALIX.getFile(), river)))
mschaefer@8971: log.info("Salix: no files found");
mschaefer@8971: }
mschaefer@8971: else {
mschaefer@8971: log.info("Salix: skipped");
mschaefer@8971: }
mschaefer@8971: }
mschaefer@8971:
mschaefer@8971: /**
mschaefer@8971: * Imports the files according to the active parser list
mschaefer@8971: */
mschaefer@8971: public void parse() throws IOException {
mschaefer@8971: for (final ImportParser parser : this.parsers)
mschaefer@8971: parser.parse();
mschaefer@8971: }
mschaefer@8971:
mschaefer@8971: /**
mschaefer@8971: * Stores all pending import objects
mschaefer@8971: */
mschaefer@8971: public void store() {
mschaefer@8971: for (final ImportParser parser : this.parsers)
mschaefer@8971: parser.store();
mschaefer@8971: }
mschaefer@8971:
mschaefer@8971: }