view artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculation.java @ 9559:ba0561906f81

Uinfo inundation duration workflow (vegetation zones, scenario), wms-config changed
author gernotbelger
date Wed, 24 Oct 2018 18:40:38 +0200
parents 709a73badd48
children
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
 * Software engineering by
 *  Björnsen Beratende Ingenieure GmbH
 *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */
package org.dive4elements.river.artifacts.uinfo.inundationduration;

import java.io.IOException;

import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.sinfo.tkhstate.TsvHelper.TsvReaderException;
import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
import org.dive4elements.river.artifacts.uinfo.inundationduration.InundationDurationCalculationResult.WmsLayer;
import org.dive4elements.river.artifacts.uinfo.inundationduration.UedauernConfiguration.YearType;

/**
 * @author Domenico Nardi Tironi
 *
 */
final class InundationDurationCalculation {

    private final CallContext context;

    public InundationDurationCalculation(final CallContext context) {
        this.context = context;
    }

    public CalculationResult calculate(final UINFOArtifact uinfo) {
        final Calculation problems = new Calculation();

        try {
            final InundationDurationAccess indurax = new InundationDurationAccess(uinfo);

            // VegetationZones have been removed - these two lines should be deleted
            // final String zonesRaw = indurax.getVegZones();
            // final List<VegetationZoneServerClientXChange> zones = VegetationZoneServerClientXChange.parse(zonesRaw);
            // FIXME: instead find out a-uuid of referenced vegetations
            // FIXME:
            // final String vegZoneId = "unknown";

            final boolean isUseScenario = indurax.getIsUseScenario();

            final InundationDurationCalculationResult result = new InundationDurationCalculationResult();

            final String selectedItem = indurax.getSelectedLabel();
            final YearType type = indurax.isUseYear() ? YearType.jahre : YearType.mittel;
            final UedauernConfiguration config = UedauernConfiguration.getInstance(indurax.getRiverName(), type);

            addLayer(indurax, "uinfo.export.url.inundationduration.inundationduration", selectedItem, config.getDefaultWmsConfig(selectedItem), result, true);
            addLayer(indurax, "uinfo.export.url.inundationduration.vegetation", selectedItem, config.getVegWmsConfig(selectedItem), result, false);

            if (isUseScenario) {

                final UedauernConfiguration configSzenario = UedauernConfiguration.getInstance(indurax.getRiverName(), YearType.szenario);

                final String selectedScenario = indurax.getSelectedSzenario();

                addLayer(indurax, "uinfo.export.url.inundationduration.scenario", selectedScenario, configSzenario.getDefaultWmsConfig(selectedScenario),
                        result, true);

                addLayer(indurax, "uinfo.export.url.inundationduration.vegetation_scenario", selectedScenario, configSzenario.getVegWmsConfig(selectedScenario),
                        result, false);

                // // TODO: add vegetationzone-values as styles to layer
                // final WmsLayer scenarioVegetationLayer = indurax.createScenarioWMSLayer(this.context.getMeta(),
                // "uinfo.export.url.inundationduration.vegetation_scenario");
                // result.addLayer(scenarioVegetationLayer);
            }

            return new CalculationResult(result, problems);
        }
        catch (IOException | TsvReaderException e) {
            e.printStackTrace();
            problems.addProblem("Invalid server configuration: " + e.getLocalizedMessage());
            return new CalculationResult(null, problems);
        }
    }

    private void addLayer(final InundationDurationAccess indurax, final String label, final String selectedItem, final UedauernConfiguration.WmsConfig config,
            final InundationDurationCalculationResult result, final boolean show) throws IOException, TsvReaderException {
        if (config != null) {
            final WmsLayer layer = indurax.createWMSLayer(this.context, label, selectedItem, config, show);
            if (layer != null)
                result.addLayer(layer);
        }
    }
}

http://dive4elements.wald.intevation.org