view artifacts/src/main/java/org/dive4elements/river/artifacts/uinfo/inundationduration/InundationDurationCalculation.java @ 9404:bc9a45d2b1fa

common time range for gauges incl. error messages
author gernotbelger
date Wed, 15 Aug 2018 13:59:09 +0200
parents 0633f963c5be
children 787fc085459b
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.util.List;

import org.apache.commons.lang.math.DoubleRange;
import org.dive4elements.artifacts.CallContext;
import org.dive4elements.river.artifacts.access.RiverAccess;
import org.dive4elements.river.artifacts.model.Calculation;
import org.dive4elements.river.artifacts.model.CalculationResult;
import org.dive4elements.river.artifacts.resources.Resources;
import org.dive4elements.river.artifacts.sinfo.util.CalculationUtils;
import org.dive4elements.river.artifacts.sinfo.util.RiverInfo;
import org.dive4elements.river.artifacts.uinfo.UINFOArtifact;
import org.dive4elements.river.artifacts.uinfo.vegetationzones.VegetationZoneServerClientXChange;
import org.dive4elements.river.model.River;

/**
 * @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();

        final String calcModeLabel = Resources.getMsg(this.context.getMeta(), uinfo.getCalculationMode().name());
        final String user = CalculationUtils.findArtifactUser(this.context, uinfo);

        final RiverAccess access = new RiverAccess(uinfo);

        final InundationDurationAccess indurax = new InundationDurationAccess(uinfo);
        final River river = indurax.getRiver();
        final RiverInfo riverInfo = new RiverInfo(river);
        final DoubleRange calcRange = indurax.getRange();
        final String url = indurax.getWMSUrl();
        final Integer year = indurax.getYear(); // null bei year -> Integer
        final String zonesRaw = indurax.getVegZones();
        final List<VegetationZoneServerClientXChange> zones = VegetationZoneServerClientXChange.parse(zonesRaw);
        final String scenarioUrl = indurax.getWMSScenarioUrl();
        final String scenarioStr = String.valueOf(indurax.getDwspl());

        // TODO: add vegetationzone-values as parameter to url and use this url as veg'zone'url

        final boolean isUseScenario = indurax.getIsUseScenario();
        final Integer[] mittelStartEndYears = indurax.mittelStartEndYears();
        final InundationDurationCalculationResult result = new InundationDurationCalculationResult();

        final String rangeDuration = year != null ? String.valueOf(year)
                : new StringBuilder().append(String.valueOf(mittelStartEndYears[0])).append("-").append(mittelStartEndYears[1]).toString();

        result.addLayer(Resources.getMsg(this.context.getMeta(), "uinfo.export.url.inundationduration.inundationduration", new Object[] { rangeDuration }), url,
                true);
        // TODO: add vegetationzone-values as parameter to url and use this url as veg'zone'url
        result.addLayer(Resources.getMsg(this.context.getMeta(), "uinfo.export.url.inundationduration.vegetation", new Object[] { rangeDuration }), url, false);
        if (isUseScenario) {
            result.addLayer(
                    Resources.getMsg(this.context.getMeta(), "uinfo.export.url.inundationduration.scenario", new Object[] { rangeDuration, scenarioStr }),
                    scenarioUrl, true);
            // TODO: add vegetationzone-values as parameter to url and use this url as veg'zone'url
            result.addLayer(Resources.getMsg(this.context.getMeta(), "uinfo.export.url.inundationduration.vegetation_scenario",
                    new Object[] { rangeDuration, scenarioStr }), scenarioUrl, false);
        }

        return new CalculationResult(result, problems);
    }
}

http://dive4elements.wald.intevation.org