view artifacts/src/main/java/org/dive4elements/river/artifacts/sinfo/SINFOArtifact.java @ 9596:fbfd66e8fb81

Softwaretests...20181219 6.2.2: Sinfo/Ued Haupt-/Extremwerte update for current km, W/Q of selected WSPL initially visible
author mschaefer
date Tue, 05 Feb 2019 15:43:27 +0100
parents 45bbd2c232f8
children 1d4262a68f1f
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.sinfo;

import org.apache.commons.lang.StringUtils;
import org.dive4elements.artifactdatabase.state.Facet;
import org.dive4elements.artifactdatabase.state.FacetActivity;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.sinfo.common.D50Processor;
import org.dive4elements.river.artifacts.sinfo.common.FlowDepthDevelopmentPerYearProcessor;
import org.dive4elements.river.artifacts.sinfo.common.FlowDepthDevelopmentProcessor;
import org.dive4elements.river.artifacts.sinfo.common.FlowDepthProcessor;
import org.dive4elements.river.artifacts.sinfo.common.TauProcessor;
import org.dive4elements.river.artifacts.sinfo.common.VelocityProcessor;

/**
 * The default SINFO artifact.
 *
 * @author Gernot Belger
 */
public class SINFOArtifact extends D4EArtifact {

    private static final long serialVersionUID = 1L;

    /** Error message that is thrown if no mode has been chosen. */
    private static final String ERROR_NO_CALCULATION_MODE = "error_feed_no_calculation_mode";

    /**
     * Error message that is thrown if an invalid calculation mode has been
     * chosen.
     */
    private static final String ERROR_INVALID_CALCULATION_MODE = "error_feed_invalid_calculation_mode";

    /** The name of the artifact. */
    private static final String ARTIFACT_NAME = "sinfo";

    private static final String FIELD_RIVER = "river";

    private static final String FIELD_MODE = "calculation_mode";

    static {
        // Active/deactivate facets.
        // BEWARE: we can only define one activity for "sinfo", so we use the artifact as place for this
        FacetActivity.Registry.getInstance().register("sinfo", new FacetActivity() {
            @Override
            public Boolean isInitialActive(final Artifact artifact, final Facet facet, final String output) {

                final String name = facet.getName();

                if ("sinfo_tkk".equals(output)) {
                    if (FlowDepthProcessor.FACET_FLOW_DEPTH_FILTERED.equals(name))
                        return Boolean.FALSE;
                    if (VelocityProcessor.FACET_TKH_VELOCITY_FILTERED.equals(name))
                        return Boolean.FALSE;
                    if (TauProcessor.FACET_TKH_TAU_FILTERED.equals(name))
                        return Boolean.FALSE;
                    if (D50Processor.FACET_TKH_D50_FILTERED.equals(name))
                        return Boolean.FALSE;
                }

                if ("sinfo_flow_depth_development".equals(output)) {
                    if (FlowDepthProcessor.FACET_FLOW_DEPTH_CURRENT_FILTERED.equals(name))
                        return Boolean.FALSE;
                    if (FlowDepthProcessor.FACET_FLOW_DEPTH_HISTORICAL_FILTERED.equals(name))
                        return Boolean.FALSE;
                    if (FlowDepthDevelopmentProcessor.FACET_WATERLEVEL_DIFFERENCE_FILTERED.equals(name))
                        return Boolean.FALSE;
                    if (FlowDepthDevelopmentProcessor.FACET_BEDHEIGHT_DIFFERENCE_FILTERED.equals(name))
                        return Boolean.FALSE;
                }

                if (FlowDepthProcessor.FACET_FLOW_DEPTH_RAW.equals(name))
                    return Boolean.FALSE;
                if (FlowDepthProcessor.FACET_FLOW_DEPTH_TKH_RAW.equals(name))
                    return Boolean.FALSE;
                if (FlowDepthProcessor.FACET_FLOW_DEPTH_CURRENT_RAW.equals(name))
                    return Boolean.FALSE;
                if (FlowDepthProcessor.FACET_FLOW_DEPTH_HISTORICAL_RAW.equals(name))
                    return Boolean.FALSE;
                if (FlowDepthProcessor.FACET_FLOW_DEPTH_MIN_RAW.equals(name))
                    return Boolean.FALSE;
                if (FlowDepthProcessor.FACET_FLOW_DEPTH_MAX_RAW.equals(name))
                    return Boolean.FALSE;

                if (FlowDepthDevelopmentProcessor.FACET_FLOW_DEPTH_DEVELOPMENT_RAW.equals(name))
                    return Boolean.FALSE;
                if (FlowDepthDevelopmentPerYearProcessor.FACET_FLOW_DEPTH_DEVELOPMENT_PER_YEAR_RAW.equals(name))
                    return Boolean.FALSE;

                // if (FloodDurationCurveProcessor.FACET_FLOOD_DURATION_MAINVALUES_W.equals(name))
                // return Boolean.FALSE;
                // if (FloodDurationCurveProcessor.FACET_FLOOD_DURATION_MAINVALUES_Q.equals(name))
                // return Boolean.FALSE;

                return null;
            }
        });
    }

    /**
     * Default constructor, because it's serializable.
     */
    public SINFOArtifact() {
    }

    /**
     * Returns the name of the concrete artifact.
     *
     * @return the name of the concrete artifact.
     */
    @Override
    public String getName() {
        return ARTIFACT_NAME;
    }

    public SinfoCalcMode getCalculationMode() {

        final String calc = getDataAsString(FIELD_MODE);
        if (calc == null) {
            throw new IllegalArgumentException(ERROR_NO_CALCULATION_MODE);
        }

        try {
            return SinfoCalcMode.valueOf(StringUtils.trimToEmpty(calc).toLowerCase());
        }
        catch (final Exception e) {
            throw new IllegalArgumentException(ERROR_INVALID_CALCULATION_MODE, e);
        }
    }

    public String getRiver() {
        return getDataAsString(FIELD_RIVER);
    }
}

http://dive4elements.wald.intevation.org