Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernConfiguration.java @ 9481:787fc085459b
TSV introduced; uinfo.inundationWMS-Config
author | gernotbelger |
---|---|
date | Wed, 12 Sep 2018 10:55:09 +0200 |
parents | artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernPropertiesHelper.java@6acd22e86951 |
children | ba0561906f81 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/UedauernConfiguration.java Wed Sep 12 10:55:09 2018 +0200 @@ -0,0 +1,125 @@ +/** 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.uinfo.inundationduration; + +import java.io.File; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.dive4elements.river.artifacts.sinfo.tkhstate.TsvHelper; +import org.dive4elements.river.artifacts.sinfo.tkhstate.TsvHelper.TsvReaderException; + +/** + * @author Domenico Nardi Tironi + * + */ +public class UedauernConfiguration { + + public final static class WmsConfig { + private final String label; + private final String url; + private final String layer; + + public WmsConfig(final String label, final String url, final String layer) { + this.label = label; + this.url = url; + this.layer = layer; + } + + public String getLabel() { + return this.label; + } + + public String getUrl() { + return this.url; + } + + public String getLayer() { + return this.layer; + } + } + + public static enum YearType { + jahre, mittel + } + + private static Map<String, UedauernConfiguration> cache = new HashMap<>(); + + private final Map<String, WmsConfig> wmsConfigs; + + public static synchronized UedauernConfiguration getInstance(final String rivername, final YearType type) throws IOException, TsvReaderException { + + final String cacheKey = type.name() + "#" + rivername; + if (!cache.containsKey(cacheKey)) { + final UedauernConfiguration instance = loadConfiguration(rivername, type); + cache.put(cacheKey, instance); + } + + return cache.get(cacheKey); + } + + private UedauernConfiguration(final String rivername, final YearType type, final Map<String, WmsConfig> wmsConfigs) { + this.wmsConfigs = wmsConfigs; + } + + private static UedauernConfiguration loadConfiguration(final String rivername, final YearType type) throws IOException, TsvReaderException { + + final String configFile = makeFileName(rivername, type); + final File file = TsvHelper.makeFile2(configFile, rivername); + final List<String[]> tsv = TsvHelper.readTsv(file, 3); + + final Map<String, WmsConfig> wmsConfigs = new LinkedHashMap<>(tsv.size()); + + for (final String[] line : tsv) { + final String label = line[0]; + wmsConfigs.put(label, new WmsConfig(label, line[2], line[1])); + } + + return new UedauernConfiguration(rivername, type, wmsConfigs); + } + + private static final String makeFileName(final String river, final YearType type) { + return "wms_uedauern_" + String.valueOf(type) + "_" + river + ".tsv"; + } + + public Collection<String> getLabels() throws UnsupportedEncodingException { + return this.wmsConfigs.keySet(); + } + + public final String getUrl(final String label) throws UnsupportedEncodingException { + final WmsConfig wmsConfig = this.wmsConfigs.get(label); + return wmsConfig.getUrl(); + } + + public String getLayer(final String label) { + final WmsConfig wmsConfig = this.wmsConfigs.get(label); + return wmsConfig.getLayer(); + } + + public static boolean filesExistsForRiver(final String river) { + + final String configFileYears = makeFileName(river, YearType.jahre); + + final File fileJahre = TsvHelper.makeFile2(configFileYears, river); + + final String configFileMittel = makeFileName(river, YearType.mittel); + final File fileMittel = TsvHelper.makeFile2(configFileMittel, river); + + if (TsvHelper.checkFile(fileJahre) == null || TsvHelper.checkFile(fileMittel) == null) + return false; + return true; + } + +} \ No newline at end of file