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@9178: import java.util.HashMap; gernotbelger@9178: import java.util.LinkedHashMap; gernotbelger@9178: import java.util.Map; gernotbelger@9178: import java.util.Properties; gernotbelger@9178: gernotbelger@9178: import org.apache.commons.lang.text.StrSubstitutor; gernotbelger@9178: import org.dive4elements.artifacts.CallMeta; gernotbelger@9178: import org.dive4elements.artifacts.common.utils.Config; gernotbelger@9178: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@9178: gernotbelger@9178: /** gernotbelger@9178: * @author Domenico Nardi Tironi gernotbelger@9178: * gernotbelger@9178: */ gernotbelger@9178: public class UedauernPropertiesHelper { gernotbelger@9178: gernotbelger@9178: private static UedauernPropertiesHelper instance; gernotbelger@9178: private final String CONFIG_FILE; gernotbelger@9178: private final String rivername; gernotbelger@9178: private Integer[] mittelStartEnde = null; gernotbelger@9178: private String[] einzeljahre = null; gernotbelger@9178: private String mittelUrl = null; gernotbelger@9178: private Properties properties = null; gernotbelger@9178: gernotbelger@9178: public UedauernPropertiesHelper(final String rivername) { gernotbelger@9178: this.rivername = rivername; gernotbelger@9178: this.CONFIG_FILE = makeFileName(rivername); gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: public static synchronized UedauernPropertiesHelper getInstance(final String rivername) { gernotbelger@9178: if (UedauernPropertiesHelper.instance == null || !UedauernPropertiesHelper.instance.getRivername().equals(rivername)) { gernotbelger@9178: gernotbelger@9178: UedauernPropertiesHelper.instance = new UedauernPropertiesHelper(rivername); gernotbelger@9178: } gernotbelger@9178: return UedauernPropertiesHelper.instance; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: private String getRivername() { gernotbelger@9178: return this.rivername; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: private static final String makeFileName(final String river) { gernotbelger@9178: return "uinfo_uedauern_aue_" + river + ".properties"; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: public LinkedHashMap getExtraLayers(final CallMeta meta) { gernotbelger@9178: final LinkedHashMap entries = new LinkedHashMap<>(); gernotbelger@9178: gernotbelger@9178: final Integer[] totalEpoch = getMittelStartEnd(); gernotbelger@9178: final Object[] args = new Object[] { String.valueOf(totalEpoch[0]), String.valueOf(totalEpoch[1]) }; gernotbelger@9178: gernotbelger@9178: // final ResourceBundle rb = ResourceBundle.getBundle("Name"); gernotbelger@9178: entries.put("state.uinfo.totalepoch", Resources.getMsg(meta, "state.uinfo.totalepoch", args)); // gernotbelger@9178: // String.valueOf: avoid formatting gernotbelger@9178: // (3.333,00 gernotbelger@9178: gernotbelger@9178: return entries; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: private Properties getProperties() { gernotbelger@9178: if (this.properties == null) { gernotbelger@9178: this.properties = Config.loadProperties(this.CONFIG_FILE); gernotbelger@9178: } gernotbelger@9178: return this.properties; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: private final Integer[] getMittelStartEnd() { gernotbelger@9178: if (this.mittelStartEnde == null) { gernotbelger@9178: final Integer mittel_start = Integer.valueOf(getProperties().get("mittel_start").toString()); gernotbelger@9178: final Integer mittel_ende = Integer.valueOf(getProperties().get("mittel_ende").toString()); gernotbelger@9178: this.mittelStartEnde = new Integer[] { mittel_start, mittel_ende }; // lazy gernotbelger@9178: gernotbelger@9178: } gernotbelger@9178: return this.mittelStartEnde; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: public String[] getEinzeljahre() { gernotbelger@9178: if (this.einzeljahre == null) { // lazy gernotbelger@9178: final Object years = getProperties().get("jahre"); gernotbelger@9178: if (years != null) { gernotbelger@9178: this.einzeljahre = years.toString().split(","); gernotbelger@9178: } gernotbelger@9178: } gernotbelger@9178: return this.einzeljahre; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: public final String getMittelUrl() { gernotbelger@9178: if (this.mittelUrl == null) { // lazy gernotbelger@9178: this.mittelUrl = getProperties().get("mittel_url").toString(); gernotbelger@9178: } gernotbelger@9178: return this.mittelUrl; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: public final String urlFromYear(final int year) { gernotbelger@9178: // besser kein lazy-loading, da der user nochmal zurück gehen und das Jahr ändern könnte... gernotbelger@9178: final String templateUrl = getProperties().get("url").toString(); gernotbelger@9178: final Map tokens = new HashMap<>(); gernotbelger@9178: tokens.put("jahr", String.valueOf(year)); gernotbelger@9178: final StrSubstitutor subst = new StrSubstitutor(tokens); gernotbelger@9178: final String yearUrl = subst.replace(templateUrl); gernotbelger@9178: return yearUrl; gernotbelger@9178: } gernotbelger@9178: gernotbelger@9178: public static boolean fileExistsForRiver(final String river) { gernotbelger@9178: final Properties properties = Config.loadProperties(makeFileName(river)); gernotbelger@9178: if (properties.size() == 0) { gernotbelger@9178: return false; gernotbelger@9178: } gernotbelger@9178: return true; gernotbelger@9178: } gernotbelger@9178: }