Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedQualityD50TimeRangeConfig.java @ 9481:787fc085459b
TSV introduced; uinfo.inundationWMS-Config
author | gernotbelger |
---|---|
date | Wed, 12 Sep 2018 10:55:09 +0200 |
parents | 6acd22e86951 |
children | 23d97d60b889 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedQualityD50TimeRangeConfig.java Mon Sep 10 17:06:23 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedQualityD50TimeRangeConfig.java Wed Sep 12 10:55:09 2018 +0200 @@ -9,17 +9,17 @@ */ package org.dive4elements.river.artifacts.sinfo.tkhstate; -import java.io.BufferedReader; import java.io.File; -import java.io.FileReader; +import java.io.IOException; import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; -import org.dive4elements.artifacts.common.utils.Config; import org.dive4elements.river.artifacts.model.Calculation; import org.dive4elements.river.artifacts.model.DateRange; +import org.dive4elements.river.artifacts.sinfo.tkhstate.TsvHelper.TsvReaderException; import org.dive4elements.river.model.River; /** @@ -29,75 +29,70 @@ */ public final class BedQualityD50TimeRangeConfig { - private static final String CONFIG_FILE = "d50_sohlkorndurchmesser_%s.properties"; + private static final String CONFIG_FILE = "d50_sohlkorndurchmesser_%s.tsv"; private final Map<String, DateRange> cache = new HashMap<>(); private static BedQualityD50TimeRangeConfig INSTANCE = new BedQualityD50TimeRangeConfig(); - public static synchronized DateRange getDefaults(final River river, final int soundingYear, final Calculation problems) { + public static class BedQualityParseException extends Exception { + + private static final long serialVersionUID = 1L; + + private BedQualityParseException(final String string) { + super(string); + } + } + + public static synchronized DateRange getDefaults(final River river, final int soundingYear, final Calculation problems) + throws BedQualityParseException, IOException, TsvReaderException { return INSTANCE.getBedHeightDefaultsForRiver(river, soundingYear, problems); } - private synchronized DateRange getBedHeightDefaultsForRiver(final River river, final int soundingYear, final Calculation problems) { + private synchronized DateRange getBedHeightDefaultsForRiver(final River river, final int soundingYear, final Calculation problems) + throws BedQualityParseException { final String rivername = river.getName(); final String cacheKey = new StringBuilder().append(rivername).append(";").append(soundingYear).toString(); if (!this.cache.containsKey(cacheKey)) { - final DateRange range = loadBedHeightDefaultsForRiver(river, soundingYear, problems); - this.cache.put(cacheKey, range); - return range; + final File file = TsvHelper.makeFile2(CONFIG_FILE, rivername); + final File fileCheck = TsvHelper.checkFile(file); + if (fileCheck == null) + return null; // automatically dateRange min/max wil be taken + + List<String[]> results = null; + try { + results = TsvHelper.readTsv(file, 4); + } + catch (final TsvReaderException | IOException e) { + problems.addProblem("sinfo.bedqualityd50config.configfile.loaderror", file.getPath(), e.getStackTrace()); + } + if (results != null) { + for (final String[] line : results) { + final CalRange range = new CalRange(parseInput(line[0]), parseInput(line[1]), parseInput(line[2]), parseInput(line[3])); + if (range.isSoundingYearInRange(soundingYear)) { + final DateRange dateRange = new DateRange(range.getStartTimeQuery(), range.getEndTimeQuery()); + this.cache.put(cacheKey, dateRange); + + } + } + } + problems.addProblem("sinfo.bedqualityd50config.configfile.loaderror", file.getPath(), + " Die angegebene d50-sohlkorndurchmesser-config-file enthält keinen gültigen Bereich für das konfigurierte Peiljahr."); + return null; } return this.cache.get(cacheKey); } - private static DateRange loadBedHeightDefaultsForRiver(final River river, final int soundingYear, final Calculation problems) { - final String rivername = river.getName(); - final File configDir = Config.getModulesConfigDirectory(); - - final String filename = String.format(CONFIG_FILE, rivername); - - final File file = new File(configDir, filename); - - if (!file.canRead() && !file.isFile()) { - return null; // no config-file specified or spelling mistake etc. (not necessarily an error) - } - - try (final BufferedReader reader = new BufferedReader(new FileReader(file))) { - - String line; - while ((line = reader.readLine()) != null) { - if ((line = line.trim()).length() == 0 || line.startsWith("#")) { - continue; - } - - final String[] parts = line.split(";"); - - if (parts.length != 4) { - throw new Exception("Invalid number of Tokens; should be 4!"); - } - - final CalRange range = new CalRange(parseInput(parts[0]), parseInput(parts[1]), parseInput(parts[2]), parseInput(parts[3])); - if (range.isSoundingYearInRange(soundingYear)) { - return new DateRange(range.getStartTimeQuery(), range.getEndTimeQuery()); - } - } - return null; - } - catch (final Exception e) { - e.printStackTrace(); - problems.addProblem("sinfo.bedqualityd50config.configfile.loaderror", CONFIG_FILE, e.getMessage()); - return null; - } - } - - private static Integer parseInput(final String value) throws Exception { + private static Integer parseInput(final String raw) throws BedQualityParseException { + final String value = raw.trim(); if (value.toUpperCase().equals("MIN") || value.toUpperCase().equals("MAX")) return null; try { + return Integer.valueOf(value); } catch (final NumberFormatException e) { - throw new Exception("Invalid input; should be year ('yyyy') or 'MIN' or 'MAX'"); + throw new BedQualityParseException("Invalid input; should be year ('yyyy') or 'MIN' or 'MAX'"); } } @@ -120,12 +115,12 @@ private CalRange(final Integer startYearSounding, final Integer endYearSounding, final Integer startYearQuery, final Integer endYearQuery) { - this.startTimeSounding = 1l;// (startYearSounding != null) ? getLongValForYear(startYearSounding, 0, 1) : + this.startTimeSounding = 1L;// (startYearSounding != null) ? getLongValForYear(startYearSounding, 0, 1) : // BedQualityD50KmValueFinder.MIN_DATE.getTime(); - this.startTimeQuery = 1l;// (startYearQuery != null) ? getLongValForYear(startYearQuery, 0, 1) : BedQualityD50KmValueFinder.MIN_DATE.getTime(); - this.endTimeSounding = 1l;// (endYearSounding != null) ? getLongValForYear(endYearSounding, 11, 31) : + this.startTimeQuery = 1L;// (startYearQuery != null) ? getLongValForYear(startYearQuery, 0, 1) : BedQualityD50KmValueFinder.MIN_DATE.getTime(); + this.endTimeSounding = 1L;// (endYearSounding != null) ? getLongValForYear(endYearSounding, 11, 31) : // BedQualityD50KmValueFinder.MAX_DATE.getTime(); - this.endTimeQuery = 1l; // (endYearQuery != null) ? getLongValForYear(endYearQuery, 11, 31) : BedQualityD50KmValueFinder.MAX_DATE.getTime(); + this.endTimeQuery = 1L;// (endYearQuery != null) ? getLongValForYear(endYearQuery, 11, 31) : BedQualityD50KmValueFinder.MAX_DATE.getTime(); }