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() {

http://dive4elements.wald.intevation.org