gernotbelger@9178: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9178: * Software engineering by gernotbelger@9178: * Björnsen Beratende Ingenieure GmbH gernotbelger@9178: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9178: * gernotbelger@9178: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9178: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9178: * documentation coming with Dive4Elements River for details. gernotbelger@9178: */ gernotbelger@9178: package org.dive4elements.river.artifacts.uinfo.inundationduration; gernotbelger@9178: gernotbelger@9481: import java.io.File; gernotbelger@9198: import java.io.IOException; gernotbelger@9481: import java.io.UnsupportedEncodingException; gernotbelger@9481: import java.util.Collection; gernotbelger@9178: import java.util.HashMap; gernotbelger@9178: import java.util.LinkedHashMap; gernotbelger@9481: import java.util.List; gernotbelger@9178: import java.util.Map; gernotbelger@9178: gernotbelger@9559: import org.apache.commons.lang.StringUtils; gernotbelger@9481: import org.dive4elements.river.artifacts.sinfo.tkhstate.TsvHelper; gernotbelger@9481: import org.dive4elements.river.artifacts.sinfo.tkhstate.TsvHelper.TsvReaderException; gernotbelger@9178: gernotbelger@9178: /** gernotbelger@9178: * @author Domenico Nardi Tironi gernotbelger@9178: * gernotbelger@9178: */ gernotbelger@9481: public class UedauernConfiguration { gernotbelger@9178: gernotbelger@9481: public final static class WmsConfig { gernotbelger@9481: private final String label; gernotbelger@9481: private final String url; gernotbelger@9559: private final String layer_default; gernotbelger@9178: gernotbelger@9481: public WmsConfig(final String label, final String url, final String layer) { gernotbelger@9481: this.label = label; gernotbelger@9481: this.url = url; gernotbelger@9559: this.layer_default = layer; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9481: public String getLabel() { gernotbelger@9481: return this.label; gernotbelger@9481: } gernotbelger@9178: gernotbelger@9481: public String getUrl() { gernotbelger@9481: return this.url; gernotbelger@9198: } gernotbelger@9481: gernotbelger@9481: public String getLayer() { gernotbelger@9559: return this.layer_default; gernotbelger@9198: } gernotbelger@9178: } gernotbelger@9184: gernotbelger@9481: public static enum YearType { gernotbelger@9559: jahre, mittel, szenario gernotbelger@9184: } gernotbelger@9184: gernotbelger@9559: private final int DEFAULT_WMS_INDEX = 0; gernotbelger@9559: private final int VEGETATIONZONE_WMS_INDEX = 1; gernotbelger@9559: gernotbelger@9481: private static Map cache = new HashMap<>(); gernotbelger@9481: gernotbelger@9559: private final Map wmsConfigs; gernotbelger@9481: gernotbelger@9481: public static synchronized UedauernConfiguration getInstance(final String rivername, final YearType type) throws IOException, TsvReaderException { gernotbelger@9481: gernotbelger@9481: final String cacheKey = type.name() + "#" + rivername; gernotbelger@9481: if (!cache.containsKey(cacheKey)) { gernotbelger@9481: final UedauernConfiguration instance = loadConfiguration(rivername, type); gernotbelger@9481: cache.put(cacheKey, instance); gernotbelger@9481: } gernotbelger@9481: gernotbelger@9481: return cache.get(cacheKey); gernotbelger@9184: } gernotbelger@9481: gernotbelger@9559: private UedauernConfiguration(final String rivername, final YearType type, final Map wmsConfigs) { gernotbelger@9481: this.wmsConfigs = wmsConfigs; gernotbelger@9481: } gernotbelger@9481: gernotbelger@9481: private static UedauernConfiguration loadConfiguration(final String rivername, final YearType type) throws IOException, TsvReaderException { gernotbelger@9481: gernotbelger@9481: final String configFile = makeFileName(rivername, type); gernotbelger@9481: final File file = TsvHelper.makeFile2(configFile, rivername); gernotbelger@9559: final List tsv = TsvHelper.readTsv(file, 5); gernotbelger@9481: gernotbelger@9559: final Map wmsConfigs = new LinkedHashMap<>(tsv.size()); gernotbelger@9481: gernotbelger@9481: for (final String[] line : tsv) { gernotbelger@9559: if (line != null && line.length > 0 && !StringUtils.isEmpty(line[0])) { gernotbelger@9559: final String label = line[0]; gernotbelger@9559: WmsConfig defaultConfig = null; gernotbelger@9559: WmsConfig vegZoneConfig = null; gernotbelger@9559: gernotbelger@9559: if (line.length > 2 && !StringUtils.isEmpty(line[1]) && !StringUtils.isEmpty(line[2])) { gernotbelger@9559: defaultConfig = new WmsConfig(label, line[2], line[1]); gernotbelger@9559: gernotbelger@9559: if (line.length > 4 && !StringUtils.isEmpty(line[3]) && !StringUtils.isEmpty(line[4])) { gernotbelger@9559: vegZoneConfig = new WmsConfig(label, line[4], line[3]); gernotbelger@9559: } gernotbelger@9559: } gernotbelger@9559: wmsConfigs.put(label, new WmsConfig[] { defaultConfig, vegZoneConfig }); gernotbelger@9559: } gernotbelger@9481: } gernotbelger@9481: return new UedauernConfiguration(rivername, type, wmsConfigs); gernotbelger@9481: } gernotbelger@9481: gernotbelger@9481: private static final String makeFileName(final String river, final YearType type) { gernotbelger@9481: return "wms_uedauern_" + String.valueOf(type) + "_" + river + ".tsv"; gernotbelger@9481: } gernotbelger@9481: gernotbelger@9481: public Collection getLabels() throws UnsupportedEncodingException { gernotbelger@9481: return this.wmsConfigs.keySet(); gernotbelger@9481: } gernotbelger@9481: gernotbelger@9559: public WmsConfig getDefaultWmsConfig(final String label) { gernotbelger@9559: return this.getConfig(label, this.DEFAULT_WMS_INDEX); gernotbelger@9481: } gernotbelger@9481: gernotbelger@9559: public WmsConfig getVegWmsConfig(final String label) { gernotbelger@9559: return this.getConfig(label, this.VEGETATIONZONE_WMS_INDEX); gernotbelger@9559: } gernotbelger@9559: gernotbelger@9559: private WmsConfig getConfig(final String label, final int index) { gernotbelger@9559: if (this.wmsConfigs.containsKey(label)) gernotbelger@9559: if (this.wmsConfigs.get(label) != null && index < this.wmsConfigs.get(label).length) gernotbelger@9559: return this.wmsConfigs.get(label)[index]; gernotbelger@9559: gernotbelger@9559: return null; gernotbelger@9481: } gernotbelger@9481: gernotbelger@9481: public static boolean filesExistsForRiver(final String river) { gernotbelger@9481: gernotbelger@9559: for (final YearType t : YearType.values()) { gernotbelger@9559: final String configFile = makeFileName(river, t); gernotbelger@9559: final File file = TsvHelper.makeFile2(configFile, river); gernotbelger@9481: gernotbelger@9559: if (TsvHelper.checkFile(file) == null) gernotbelger@9559: return false; gernotbelger@9559: } gernotbelger@9481: gernotbelger@9481: return true; gernotbelger@9481: } gernotbelger@9481: gernotbelger@9178: }