gernotbelger@9069: /* Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9069: * Software engineering by gernotbelger@9069: * Björnsen Beratende Ingenieure GmbH gernotbelger@9069: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9069: * gernotbelger@9069: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9069: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9069: * documentation coming with Dive4Elements River for details. gernotbelger@9069: */ gernotbelger@9069: gernotbelger@9069: package org.dive4elements.river.artifacts.uinfo.inundationduration; gernotbelger@9069: gernotbelger@9481: import java.io.IOException; gernotbelger@9481: gernotbelger@9537: import org.dive4elements.artifacts.CallContext; gernotbelger@9069: import org.dive4elements.river.artifacts.access.RangeAccess; gernotbelger@9070: import org.dive4elements.river.artifacts.common.EpochYearAccessHelper; gernotbelger@9481: import org.dive4elements.river.artifacts.resources.Resources; gernotbelger@9481: import org.dive4elements.river.artifacts.sinfo.tkhstate.TsvHelper.TsvReaderException; gernotbelger@9069: import org.dive4elements.river.artifacts.uinfo.UINFOArtifact; gernotbelger@9069: import org.dive4elements.river.artifacts.uinfo.UinfoCalcMode; gernotbelger@9481: import org.dive4elements.river.artifacts.uinfo.inundationduration.InundationDurationCalculationResult.WmsLayer; gernotbelger@9559: import org.dive4elements.river.artifacts.uinfo.inundationduration.UedauernConfiguration.WmsConfig; gernotbelger@9069: gernotbelger@9069: /** gernotbelger@9069: * Access to the flow depth calculation type specific SInfo artifact data. gernotbelger@9069: * REMARK: this class is NOT intended to be hold in the results (or anywhere else), in order to avoid a permanent gernotbelger@9069: * reference to the artifact instance. gernotbelger@9069: * Hence we do NOT cache any data. gernotbelger@9069: * gernotbelger@9069: * @author Gernot Belger gernotbelger@9069: */ gernotbelger@9069: final class InundationDurationAccess extends RangeAccess { gernotbelger@9069: gernotbelger@9070: private final EpochYearAccessHelper helper; gernotbelger@9069: gernotbelger@9559: // public static enum WmsClassification { gernotbelger@9559: // asIs { gernotbelger@9559: // @Override gernotbelger@9559: // public String configureAddress(final WmsConfig config) { gernotbelger@9559: // return config.getUrl(); gernotbelger@9559: // } gernotbelger@9559: // } gernotbelger@9559: // // , gernotbelger@9559: // // vegetationZone { gernotbelger@9559: // // @Override gernotbelger@9559: // // public String configureAddress(final String serverAddress, final String url, final String vegetationZoneId) { gernotbelger@9559: // // gernotbelger@9559: // // try { gernotbelger@9559: // // final String urlEncoded = URLEncoder.encode(url, "UTF-8"); gernotbelger@9559: // // final String vegZoneIdEncoded = URLEncoder.encode(vegetationZoneId, "UTF-8"); gernotbelger@9559: // // gernotbelger@9559: // // return String.format("%s/%s/%s/%s", serverAddress, VegetationWmsResource.BASE_PATH, vegZoneIdEncoded, urlEncoded); gernotbelger@9559: // // } gernotbelger@9559: // // catch (final UnsupportedEncodingException e) { gernotbelger@9559: // // /* should never happen */ gernotbelger@9559: // // e.printStackTrace(); gernotbelger@9559: // // return null; gernotbelger@9559: // // } gernotbelger@9559: // // } gernotbelger@9559: // // } gernotbelger@9559: // ; gernotbelger@9559: // gernotbelger@9559: // public abstract String configureAddress(final WmsConfig config); gernotbelger@9559: // } gernotbelger@9537: gernotbelger@9069: // Fields from state: gernotbelger@9069: // gernotbelger@9069: // calculation_mode (String) gernotbelger@9069: // ld_from, ld_to gernotbelger@9069: // ye_select (String; state.uinfo.totalepoch oder state.uinfo.year) gernotbelger@9481: // year_epoch_select gernotbelger@9069: // totalepoch (String; TODO: minmax totalEpoch herausfinden und setzen (nicht hier.. aber trotzdem die Erinnerung hier)) gernotbelger@9069: // use_scenario boolean (danach kommt kein radioBtn, sondern sedimentheight-Eingabe) gernotbelger@9069: // sedimentheight String gernotbelger@9069: // gernotbelger@9069: // vegzones (String) TODO: MIT VegetationzonesAccess zusammenlegen gernotbelger@9069: gernotbelger@9069: public InundationDurationAccess(final UINFOArtifact uinfo) { gernotbelger@9069: super(uinfo); gernotbelger@9069: /* assert calculation mode */ gernotbelger@9069: final UinfoCalcMode calculationMode = uinfo.getCalculationMode(); gernotbelger@9070: this.helper = new EpochYearAccessHelper(uinfo); gernotbelger@9069: assert (calculationMode == UinfoCalcMode.uinfo_inundation_duration); gernotbelger@9069: } gernotbelger@9069: gernotbelger@9481: public boolean isUseYear() { gernotbelger@9481: if (this.helper.getYearEpoch().equals("state.uinfo.year")) gernotbelger@9481: return true; gernotbelger@9481: return false; gernotbelger@9069: } gernotbelger@9069: gernotbelger@9559: // public WmsLayer createWMSLayer(final CallContext context, final String i10nKey, final WmsConfig classification) gernotbelger@9559: // throws IOException, TsvReaderException { gernotbelger@9559: // gernotbelger@9559: // final YearType type = isUseYear() ? YearType.jahre : YearType.mittel; gernotbelger@9559: // final String selectedElement = getSelectedLabel(); gernotbelger@9559: // gernotbelger@9559: // final String layerLabel = Resources.getMsg(context.getMeta(), i10nKey, new Object[] { selectedElement }); gernotbelger@9559: // gernotbelger@9559: // return createWMSLayer(context, layerLabel, type, selectedElement, classification); gernotbelger@9559: // } gernotbelger@9178: gernotbelger@9559: // public WmsLayer createScenarioWMSLayer(final CallContext context, final String i10nKey, final WmsConfig gernotbelger@9559: // classification, final String vegZoneId) gernotbelger@9559: // throws IOException, TsvReaderException { gernotbelger@9559: // gernotbelger@9559: // // FIXME: use scenario-cm as label, and scenario-type gernotbelger@9559: // final YearType type = YearType.jahre; gernotbelger@9559: // gernotbelger@9559: // final String selectedElement = Integer.toString(getDwspl()); gernotbelger@9559: // final String layerLabel = Resources.getMsg(context.getMeta(), i10nKey, new Object[] { selectedElement }); gernotbelger@9559: // gernotbelger@9559: // return createWMSLayer(context, layerLabel, type, selectedElement, classification); gernotbelger@9559: // } gernotbelger@9481: gernotbelger@9559: public WmsLayer createWMSLayer(final CallContext context, final String layerLabel, final String selectedItem, final WmsConfig config, gernotbelger@9559: final boolean showLayerLink) throws IOException, TsvReaderException { gernotbelger@9481: gernotbelger@9559: // final String serverAddress = context.getDatabase().getServerAddress(); gernotbelger@9559: // final UedauernConfiguration config = UedauernConfiguration.getInstance(getRiverName(), type); gernotbelger@9559: gernotbelger@9559: final String layerLabelFinal = Resources.getMsg(context.getMeta(), layerLabel, new Object[] { selectedItem }); gernotbelger@9559: final String url = config.getUrl(); gernotbelger@9559: final String layer = config.getLayer(); gernotbelger@9559: gernotbelger@9559: if (url != null && layer != null) { gernotbelger@9559: // final String realUrl = classification.configureAddress(serverAddress, url, vegZoneId); gernotbelger@9559: gernotbelger@9559: return new WmsLayer(layerLabelFinal, url, layer, showLayerLink); gernotbelger@9559: } gernotbelger@9559: return null; gernotbelger@9069: } gernotbelger@9069: gernotbelger@9559: public String getSelectedLabel() { gernotbelger@9481: return this.getString("year_epoch_select"); gernotbelger@9481: } gernotbelger@9481: gernotbelger@9559: public String getSelectedSzenario() { gernotbelger@9481: if (getIsUseScenario()) gernotbelger@9559: return super.getString("inundation_scenario"); gernotbelger@9481: gernotbelger@9184: return null; gernotbelger@9184: } gernotbelger@9184: gernotbelger@9190: public boolean getIsUseScenario() { gernotbelger@9190: return super.getBoolean("use_scenario"); gernotbelger@9190: } gernotbelger@9069: }