Mercurial > dive4elements > river
diff artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationAccess.java @ 9537:bf6b63208f34
Work on uinfo inundation duration calculation.
Using proxy-wms to induce additional style information (work in progress).
author | gernotbelger |
---|---|
date | Wed, 17 Oct 2018 11:23:17 +0200 |
parents | 787fc085459b |
children | ba0561906f81 |
line wrap: on
line diff
--- a/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationAccess.java Tue Oct 16 16:42:22 2018 +0200 +++ b/artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationAccess.java Wed Oct 17 11:23:17 2018 +0200 @@ -11,8 +11,10 @@ package org.dive4elements.river.artifacts.uinfo.inundationduration; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; -import org.dive4elements.artifacts.CallMeta; +import org.dive4elements.artifacts.CallContext; import org.dive4elements.river.artifacts.access.RangeAccess; import org.dive4elements.river.artifacts.common.EpochYearAccessHelper; import org.dive4elements.river.artifacts.resources.Resources; @@ -38,6 +40,34 @@ private final EpochYearAccessHelper helper; + public static enum WmsClassification { + asIs { + @Override + public String configureAddress(final String serverAddress, final String url, final String vegetationZoneId) { + return url; + } + }, + vegetationZone { + @Override + public String configureAddress(final String serverAddress, final String url, final String vegetationZoneId) { + + try { + final String urlEncoded = URLEncoder.encode(url, "UTF-8"); + final String vegZoneIdEncoded = URLEncoder.encode(vegetationZoneId, "UTF-8"); + + return String.format("%s/%s/%s/%s", serverAddress, VegetationWmsResource.BASE_PATH, vegZoneIdEncoded, urlEncoded); + } + catch (final UnsupportedEncodingException e) { + /* should never happen */ + e.printStackTrace(); + return null; + } + } + }; + + public abstract String configureAddress(String serverAddress, String url, String vegetationZoneId); + } + // Fields from state: // // calculation_mode (String) @@ -64,47 +94,42 @@ return false; } - public WmsLayer createWMSLayer(final CallMeta meta, final String i10nKey) { + public WmsLayer createWMSLayer(final CallContext context, final String i10nKey, final WmsClassification classification, final String vegZoneId) + throws IOException, TsvReaderException { final YearType type = isUseYear() ? YearType.jahre : YearType.mittel; final String selectedElement = getSelectedLabel(); - final String layerLabel = Resources.getMsg(meta, i10nKey, new Object[] { selectedElement }); - - try { - final UedauernConfiguration helper = UedauernConfiguration.getInstance(getRiverName(), type); - final String url = helper.getUrl(selectedElement); - final String layer = helper.getLayer(selectedElement); + final String layerLabel = Resources.getMsg(context.getMeta(), i10nKey, new Object[] { selectedElement }); - return new WmsLayer(layerLabel, url, layer, true); - } - catch (final IOException | TsvReaderException e) { - e.printStackTrace(); - } - return null; - + return createWMSLayer(context, layerLabel, type, selectedElement, classification, vegZoneId); } - public WmsLayer createScenarioWMSLayer(final CallMeta meta, final String i10nKey) { + public WmsLayer createScenarioWMSLayer(final CallContext context, final String i10nKey, final WmsClassification classification, final String vegZoneId) + throws IOException, TsvReaderException { // FIXME: use scenario-cm as label, and scenario-type final YearType type = YearType.jahre; - final String selectedElement = Integer.toString(getDwspl()); - - final String layerLabel = Resources.getMsg(meta, i10nKey, new Object[] { selectedElement }); - try { - final UedauernConfiguration helper = UedauernConfiguration.getInstance(getRiverName(), type); - final String url = helper.getUrl(selectedElement); - final String layer = helper.getLayer(selectedElement); + final String selectedElement = Integer.toString(getDwspl()); + final String layerLabel = Resources.getMsg(context.getMeta(), i10nKey, new Object[] { selectedElement }); - return new WmsLayer(layerLabel, url, layer, false); - } - catch (final IOException | TsvReaderException e) { - e.printStackTrace(); - } - return null; + return createWMSLayer(context, layerLabel, type, selectedElement, classification, vegZoneId); + } + private WmsLayer createWMSLayer(final CallContext context, final String layerLabel, final YearType type, final String selectedElement, + final WmsClassification classification, final String vegZoneId) + throws IOException, TsvReaderException { + + final String serverAddress = context.getDatabase().getServerAddress(); + + final UedauernConfiguration config = UedauernConfiguration.getInstance(getRiverName(), type); + final String url = config.getUrl(selectedElement); + final String layer = config.getLayer(selectedElement); + + final String realUrl = classification.configureAddress(serverAddress, url, vegZoneId); + + return new WmsLayer(layerLabel, realUrl, layer, classification == WmsClassification.asIs); } private String getSelectedLabel() {