# HG changeset patch # User gernotbelger # Date 1536072123 -7200 # Node ID 6acd22e86951760464f1b12924c967c150a2f7be # Parent c01f1e65903b4aad21fb2fa5b9054af790587f62 Improvements on Config-Files diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/modules/d50_sohlkorndurchmesser_Rhein.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/modules/d50_sohlkorndurchmesser_Rhein.properties Tue Sep 04 16:42:03 2018 +0200 @@ -0,0 +1,19 @@ +# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen sowie SINFO-Flie\u00dftiefen zu ermittelnden D50-Sohlkorndurchmesser. +# Je Gew\u00e4sser ist optional eine Datei mit Namen "sinfo_tkh_d50_sohlkorndurchmesser_.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten! +# Liegt f\u00fcr ein Gew\u00e4sser keine Konfiguration vor, findet keine Beschr\u00e4nkung der Abfragezeitr\u00e4ume f\u00fcr die D50-Daten statt und es werden alle verf\u00fcgbaren Daten verwendet. +# Die Datei ist im Charset 'ISO-8859-1' zu kodieren. + +# Die Datei definiert f\u00fcr beliebig viele Peil-Zeitr\u00e4ume, in der die in Flys zu w\u00e4hlenden Peilung sich befinden kann, jeweils einen Abfragezeitraum f\u00fcr die D50-Daten. +# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen: +#;;; + +# S\u00e4mtliche Werte werden im Format "JJJJ" angegeben. Es wird dabei immer in Intervallen auf Datumsbasis gerechnet. +# Der Startzeitpunkt ist der 01.01. und der Endzeitpunkt der 31.12. des jeweils spezifizierten Jahres. +# Die Intervalle k\u00f6nnen zu einer Seite offen sein. Statt einer Jahreseingabe erfolgt hierbei die Eingabe +# 'MIN' f\u00fcr ein negativ unendliches Startdatum sowie +# 'MAX' f\u00fcr ein positiv unendliches Enddatum. + +# \u00c4nderungen werden erst nach einem Neustart des Servers wirksam. + +MIN;1999;MIN;1999 +2000;MAX;2000;MAX diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/modules/standard_sohlhoehen_Beispielfluss.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/modules/standard_sohlhoehen_Beispielfluss.properties Tue Sep 04 16:42:03 2018 +0200 @@ -0,0 +1,15 @@ +# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen. +# Je Gew\u00e4sser ist eine Datei mit Namen "standard_sohlhoehen_.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten! +# Die Datei ist im Charset 'ISO-8859-1' zu kodieren. + +# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche. +# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen: +# = ; + +# 'Sohlh\u00f6he' entspricht dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank. +# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km +# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km + +# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen. +# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden. +DGM-2004_Epoche-2-SOBEK = 0.0;182.4 diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/modules/standard_sohlhoehen_Elbe.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/modules/standard_sohlhoehen_Elbe.properties Tue Sep 04 16:42:03 2018 +0200 @@ -0,0 +1,15 @@ +# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen. +# Je Gew\u00e4sser ist eine Datei mit Namen "standard_sohlhoehen_.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten! +# Die Datei ist im Charset 'ISO-8859-1' zu kodieren. + +# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche. +# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen: +# = ; + +# 'Sohlh\u00f6he' entspriche dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank. +# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km +# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km + +# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen. +# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden. +DGM-2004_Epoche-2-SOBEK = 0.0;584.0 diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/modules/standard_sohlhoehen_Rhein.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/modules/standard_sohlhoehen_Rhein.properties Tue Sep 04 16:42:03 2018 +0200 @@ -0,0 +1,15 @@ +# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen. +# Je Gew\u00e4sser ist eine Datei mit Namen "standard_sohlhoehen_.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten! +# Die Datei ist im Charset 'ISO-8859-1' zu kodieren. + +# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche. +# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen: +# = ; + +# 'Sohlh\u00f6he' entspriche dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank. +# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km +# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km + +# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen. +# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden. +FP-QP-2006_Epoche_NHN = 335.0;620.0 diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/modules/wms_uedauern_Beispielfluss.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/modules/wms_uedauern_Beispielfluss.properties Tue Sep 04 16:42:03 2018 +0200 @@ -0,0 +1,12 @@ +# TODO: doku + +jahre=1995,1996,1997 +#url=htps://geoportal.bafg.de/wms/${jahr} +url=http://osm.intevation.de/bfg/service? +scenario_url=http://www.pegelonline.wsv.de/webservices/gis/wms/aktuell? + +#mittel_url=htps://geoportal.bafg.de/wms/${jahr} +mittel_url=http://geo4.service24.rlp.de/wms/dop_basis.fcgi? +mittel_scenario_url=http://sg.geodatenzentrum.de/wms_dop? +mittel_start=1988 +mittel_ende=2000 \ No newline at end of file diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/modules/wms_uedauern_Elbe.properties --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/doc/conf/modules/wms_uedauern_Elbe.properties Tue Sep 04 16:42:03 2018 +0200 @@ -0,0 +1,8 @@ +jahre=1995,1996,1997 +url=htps://geoportal.bafg.de/wms/${jahr} +scenario_url=htps://geoportal.bafg.de/wms/${jahr}_${scenario} + +mittel_url=htps://geoportal.bafg.de/wms/ +mittel_start=1998 +mittel_ende=2000 +mittel_scenario_url=htps://geoportal.bafg.de/wms/${scenario} diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/sinfo_tkh_sohlhoehen_Beispielfluss.properties --- a/artifacts/doc/conf/sinfo_tkh_sohlhoehen_Beispielfluss.properties Fri Aug 31 17:11:32 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -# Konfigurationsdatei f\u00fcr die in der Berechnungsart SINFO-Transportk\u00f6rperh\u00f6hen zu verwendenden Sohlh\u00f6hen. -# Je Gew\u00e4sser ist eine Datei mit Namen "sinfo_tkh_sohlhoehen_.properties" anzulegen. Gro\u00df-/Kleinschriebung beim Gew\u00e4ssernamen ist zu beachten! -# Die Datei ist im Charset 'ISO-8859-1' zu kodieren. - -# Die Datei definiert die Standardm\u00e4\u00dfig zu verwendenden Sohlh\u00f6hen und deren G\u00fcltigkeitsbereiche. -# Pro Sohlh\u00f6he ist eine Zeile folgender Form anzulegen: -# = ; - -# 'Sohlh\u00f6he' entspricht dem Feld 'description' in der Tabelle 'bed_height' der D4E Datenbank. -# 'von km' entpsricht dem Start des G\u00fcltigkeitsbereichs in km -# 'bis km' entpsricht dem Ende des G\u00fcltigkeitsbereichs in km - -# Der G\u00fcltigkeitsbereich schr\u00e4nkt den zu verwendenden Daten bereich der Sohlh\u00f6he f\u00fcr die TKH Berechnung ein, die Daten in der Datenbank k\u00f6nnen einen gr\u00f6\u00dferen G\u00fcltigkeitsbereich besitzen. -# Leerzeichen im Namen der Sohlh\u00f6he m\u00fcssen mit u0020 kodiert werden. -DGM-2004_Epoche-2-SOBEK = 0.0;182.4 diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/uinfo_uedauern_aue_Beispielfluss.properties --- a/artifacts/doc/conf/uinfo_uedauern_aue_Beispielfluss.properties Fri Aug 31 17:11:32 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -jahre=1995,1996,1997 -#url=htps://geoportal.bafg.de/wms/${jahr} -url=http://osm.intevation.de/bfg/service? -scenario_url=htps://geoportal.bafg.de/wms/${jahr}_${scenario} - -#mittel_url=htps://geoportal.bafg.de/wms/${jahr} -mittel_url=http://osm.intevation.de/bfg/service? -mittel_scenario_url=htps://geoportal.bafg.de/wms/${scenario} -mittel_start=8888 -mittel_ende=2000 \ No newline at end of file diff -r c01f1e65903b -r 6acd22e86951 artifacts/doc/conf/uinfo_uedauern_aue_Elbe.properties --- a/artifacts/doc/conf/uinfo_uedauern_aue_Elbe.properties Fri Aug 31 17:11:32 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -jahre=1995,1996,1997 -url=htps://geoportal.bafg.de/wms/${jahr} -scenario_url=htps://geoportal.bafg.de/wms/${jahr}_${scenario} - -mittel_url=htps://geoportal.bafg.de/wms/ -mittel_start=1998 -mittel_ende=2000 -mittel_scenario_url=htps://geoportal.bafg.de/wms/${scenario} diff -r c01f1e65903b -r 6acd22e86951 artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedQualityD50TimeRangeConfig.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/BedQualityD50TimeRangeConfig.java Tue Sep 04 16:42:03 2018 +0200 @@ -0,0 +1,154 @@ +/** 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.artifacts.sinfo.tkhstate; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +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.model.River; + +/** + * Represents the contents of the 'bedheights.properties' files. + * + * @author Gernot Belger + */ +public final class BedQualityD50TimeRangeConfig { + + private static final String CONFIG_FILE = "d50_sohlkorndurchmesser_%s.properties"; + + private final Map cache = new HashMap<>(); + + private static BedQualityD50TimeRangeConfig INSTANCE = new BedQualityD50TimeRangeConfig(); + + public static synchronized DateRange getDefaults(final River river, final int soundingYear, final Calculation problems) { + return INSTANCE.getBedHeightDefaultsForRiver(river, soundingYear, problems); + } + + private synchronized DateRange getBedHeightDefaultsForRiver(final River river, final int soundingYear, final Calculation problems) { + 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; + } + 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 { + 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'"); + } + } + + private static class CalRange { + private final long startTimeSounding; + private final long endTimeSounding; + + private final long startTimeQuery; + private final long endTimeQuery; + + private final static Calendar cal = Calendar.getInstance(); + + private Date getStartTimeQuery() { + return new Date(this.startTimeQuery); + } + + private Date getEndTimeQuery() { + return new Date(this.endTimeQuery); + } + + private CalRange(final Integer startYearSounding, final Integer endYearSounding, final Integer startYearQuery, final Integer endYearQuery) { + + 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) : + // BedQualityD50KmValueFinder.MAX_DATE.getTime(); + this.endTimeQuery = 1l; // (endYearQuery != null) ? getLongValForYear(endYearQuery, 11, 31) : BedQualityD50KmValueFinder.MAX_DATE.getTime(); + + } + + private long getLongValForYear(final int year, final int month0based, final int dayOfMonth) { + cal.clear(); + cal.set(year, month0based, dayOfMonth); + + return cal.getTimeInMillis(); + } + + private boolean isSoundingYearInRange(final int soundingYear) { + cal.clear(); + + cal.set(soundingYear, 5, 5); // random date in the middle of the year + + final Long time = cal.getTimeInMillis(); + + if (time > this.startTimeSounding && time < this.endTimeSounding) + return true; + + return false; + } + + } + +} diff -r c01f1e65903b -r 6acd22e86951 artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeightsConfig.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeightsConfig.java Fri Aug 31 17:11:32 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/tkhstate/DefaultBedHeightsConfig.java Tue Sep 04 16:42:03 2018 +0200 @@ -29,8 +29,7 @@ */ final class DefaultBedHeightsConfig { - private static final String CONFIG_FILE = "sinfo_tkh_sohlhoehen_%s.properties"; - + private static final String CONFIG_FILE = "standard_sohlhoehen_%s.properties"; public static class DefaultBedHeight { @@ -56,7 +55,6 @@ private DefaultBedHeightsConfig() { } - private synchronized Collection getBedHeightDefaultsForRiver(final River river, final Calculation problems) { final String rivername = river.getName(); @@ -75,7 +73,7 @@ final String rivername = river.getName(); final String filename = String.format(CONFIG_FILE, rivername); - final Properties properties = Config.loadProperties(filename); + final Properties properties = Config.loadProperties(filename, Config.getModulesConfigDirectory()); final Set keys = properties.stringPropertyNames(); diff -r c01f1e65903b -r 6acd22e86951 artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernPropertiesHelper.java --- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernPropertiesHelper.java Fri Aug 31 17:11:32 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernPropertiesHelper.java Tue Sep 04 16:42:03 2018 +0200 @@ -52,7 +52,7 @@ } private static final String makeFileName(final String river) { - return "uinfo_uedauern_aue_" + river + ".properties"; + return "wms_uedauern_" + river + ".properties"; } public LinkedHashMap getExtraLayers(final CallMeta meta) { @@ -71,7 +71,7 @@ private Properties getProperties() { if (this.properties == null) { try { - this.properties = Config.loadProperties(this.CONFIG_FILE); + this.properties = Config.loadProperties(this.CONFIG_FILE, Config.getModulesConfigDirectory()); } catch (final IOException e) { e.printStackTrace(); @@ -119,7 +119,7 @@ public static boolean fileExistsForRiver(final String river) { try { - Config.loadProperties(makeFileName(river)); + Config.loadProperties(makeFileName(river), Config.getModulesConfigDirectory()); return true; } catch (final IOException e) { diff -r c01f1e65903b -r 6acd22e86951 artifacts/src/main/resources/messages.properties --- a/artifacts/src/main/resources/messages.properties Fri Aug 31 17:11:32 2018 +0200 +++ b/artifacts/src/main/resources/messages.properties Tue Sep 04 16:42:03 2018 +0200 @@ -802,6 +802,7 @@ sinfo.bedheightsfinder.configfile.loaderror = Failed to load config file ''{0}'': {1} sinfo.bedheightsfinder.notfound = Failed to access sounding with id ''{0}'' sinfo.bedheightsfinder.empty = The bed heights do not contain any values for the selected calculation range +sinfo.bedqualityd50config.configfile.loaderror = Fehler beim Auslesen der Datei ''{0}'' zur Spezifikation der Zeitr\u00e4ume zur Berechnung der D50-Sohlkorndurchmesser: {1} sinfo_calc_flow_depth_development=Flie\u00dftiefenentwicklung sinfo_calc_flow_depth_minmax=Minimale und Maximale Flie\u00dftiefe diff -r c01f1e65903b -r 6acd22e86951 artifacts/src/main/resources/messages_de.properties --- a/artifacts/src/main/resources/messages_de.properties Fri Aug 31 17:11:32 2018 +0200 +++ b/artifacts/src/main/resources/messages_de.properties Tue Sep 04 16:42:03 2018 +0200 @@ -802,6 +802,7 @@ sinfo.bedheightsfinder.configfile.loaderror = Fehler beim Laden der Konfigurationsdatei ''{0}'': {1} sinfo.bedheightsfinder.notfound = Keine Sohlh\u00f6he mit id ''{0}'' vorhanden sinfo.bedheightsfinder.empty = Die Sohlh\u00f6hen enthalten keine Werte f\u00fcr die gew\u00e4hlte Berechnungsstrecke +sinfo.bedqualityd50config.configfile.loaderror = Fehler beim Auslesen der Datei ''{0}'' zur Spezifikation der Zeitr\u00e4ume zur Berechnung der D50-Sohlkorndurchmesser: {1} sinfo_calc_flow_depth_development=Flie\u00dftiefenentwicklung sinfo_calc_flow_depth_minmax=Minimale und Maximale Flie\u00dftiefe