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.sinfo.parsers; mschaefer@8971: mschaefer@8971: import java.io.File; 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.Config; mschaefer@8971: import org.dive4elements.river.importer.ImportRiver; mschaefer@8971: import org.dive4elements.river.importer.common.AbstractParser; mschaefer@9652: import org.dive4elements.river.importer.common.ParsingState; mschaefer@8971: import org.dive4elements.river.importer.sinfo.importitem.BedMobilityKmLineImport; mschaefer@8971: import org.dive4elements.river.importer.sinfo.importitem.BedMobilitySeriesImport; mschaefer@8971: import org.dive4elements.river.model.sinfo.BedMobility; mschaefer@8971: import org.dive4elements.river.model.sinfo.BedMobilityValue; mschaefer@8971: mschaefer@8971: /** mschaefer@8971: * Reads and parses an bed mobility file mschaefer@8971: * mschaefer@8971: * @author Matthias Schäfer mschaefer@8971: * mschaefer@8971: */ mschaefer@8971: public class BedMobilityParser extends AbstractParser { mschaefer@8971: mschaefer@8971: /***** FIELDS *****/ mschaefer@8971: mschaefer@8971: private static final Logger log = Logger.getLogger(BedMobilityParser.class); mschaefer@8971: mschaefer@8971: private static final String MOBILE_KEYWORD = "mobil"; mschaefer@8971: mschaefer@9652: private static final String STARR_KEYWORD = "starr"; mschaefer@9652: mschaefer@9012: private static final String IMPORT_FILENAME = "Einteilung_der_Gewaessersohle.csv"; mschaefer@8971: mschaefer@8971: mschaefer@8971: /***** CONSTRUCTORS *****/ mschaefer@8971: mschaefer@8971: public BedMobilityParser(final File importPath, final File rootRelativePath, final ImportRiver river) { mschaefer@8971: super(importPath, rootRelativePath, river); mschaefer@8971: } mschaefer@8971: mschaefer@8971: mschaefer@8971: /***** METHODS *****/ mschaefer@8971: mschaefer@8971: @Override mschaefer@8971: protected Logger getLog() { mschaefer@8971: return log; mschaefer@8971: } mschaefer@8971: mschaefer@8971: /** mschaefer@8971: * Whether this import type shall be skipped mschaefer@8971: */ mschaefer@8971: public static boolean shallSkip() { mschaefer@8971: return Config.INSTANCE.skipSInfoBedMobility(); mschaefer@8971: } mschaefer@8971: mschaefer@8971: /** mschaefer@8971: * Creates a list of parsers for all bed mobility import files in a directory mschaefer@8971: */ mschaefer@8971: public static List createParsers(final File importDir, final File relativeDir, final ImportRiver river) { mschaefer@8971: final List parsers = new ArrayList<>(); mschaefer@8988: final File importFile = new File(importDir, IMPORT_FILENAME); mschaefer@8988: if (importFile.exists()) mschaefer@8988: parsers.add(new BedMobilityParser(importFile, new File(relativeDir, IMPORT_FILENAME), river)); mschaefer@8971: return parsers; mschaefer@8971: } mschaefer@8971: mschaefer@8971: @Override mschaefer@8971: protected BedMobilitySeriesImport createSeriesImport(final String filename) { mschaefer@8971: return new BedMobilitySeriesImport(filename); mschaefer@8971: } mschaefer@8971: mschaefer@8971: @Override mschaefer@8971: protected BedMobilityKmLineImport createKmLineImport(final Double km, final String[] values) { mschaefer@9652: if (values[1].equalsIgnoreCase(STARR_KEYWORD)) mschaefer@9652: return new BedMobilityKmLineImport(km, false); mschaefer@9652: else if (values[1].equalsIgnoreCase(MOBILE_KEYWORD)) mschaefer@9652: return new BedMobilityKmLineImport(km, values[1].equalsIgnoreCase(MOBILE_KEYWORD)); mschaefer@9652: logLineError("Invalid Gewässersohle value"); mschaefer@9652: this.headerParsingState = ParsingState.STOP; mschaefer@9652: return null; mschaefer@8971: } mschaefer@8971: mschaefer@8971: @Override mschaefer@8971: protected boolean handleMetaOther() { mschaefer@8971: return super.handleMetaOther(); mschaefer@8971: } mschaefer@8971: }