view artifacts/src/main/java/org/dive4elements/river/artifacts/states/RangeState.java @ 9102:21e65960a9e3

fix-analysis distance range bugfix
author gernotbelger
date Mon, 28 May 2018 18:18:21 +0200
parents 1116079e6624
children
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
 * Software engineering by Intevation GmbH
 *
 * 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.states;

import org.apache.log4j.Logger;
import org.dive4elements.artifacts.Artifact;
import org.dive4elements.river.artifacts.D4EArtifact;
import org.dive4elements.river.artifacts.access.RangeAccess;

/**
 * State in which km range is set.
 * 
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public abstract class RangeState extends DefaultState {

    /** The log that is used in this class. */
    private final Logger log = Logger.getLogger(RangeState.class);

    public RangeState() {
    }

    protected abstract double[] getMinMax(Artifact artifact);

    protected boolean validateBounds(final double fromValid, final double toValid, final double from, final double to) throws IllegalArgumentException {
        if (from < fromValid || from > toValid) {
            this.log.error("Invalid 'from'. " + from + " is smaller than " + fromValid);
            // error message used in client to resolve i18n
            throw new IllegalArgumentException("error_feed_from_out_of_range");
        } else if (to > toValid || to < fromValid) {
            this.log.error("Invalid 'to'. " + to + " is bigger than " + toValid);
            // error message used in client to resolve i18n
            throw new IllegalArgumentException("error_feed_to_out_of_range");
        }

        return true;
    }

    /**
     * Validates a given range with a given valid range.
     *
     * @param fromValid
     *            Valid lower value of the range.
     * @param toValid
     *            Valid upper value of the range.
     * @param from
     *            The lower value.
     * @param to
     *            The upper value.
     * @param step
     *            The step width.
     *
     * @return true, if everything was fine, otherwise an exception is thrown.
     */
    protected boolean validateBounds(final double fromValid, final double toValid, final double from, final double to, final double step)
            throws IllegalArgumentException {
        this.log.debug("RangeState.validateRange");

        // XXX The step width is not validated at the moment!
        return validateBounds(fromValid, toValid, from, to);
    }

    @Override
    public boolean validate(final Artifact artifact) throws IllegalArgumentException {
        final D4EArtifact flys = (D4EArtifact) artifact;

        try {
            final RangeAccess rangeAccess = new RangeAccess(flys);
            final double from = rangeAccess.getFrom();
            final double to = rangeAccess.getTo();
            final double step = rangeAccess.getStep();

            final double[] minmax = getMinMax(flys);

            return validateBounds(minmax[0], minmax[1], from, to, step);
        }
        catch (final NumberFormatException nfe) {
            throw new IllegalArgumentException("error_invalid_double_value");
        }
        catch (final NullPointerException npe) {
            throw new IllegalArgumentException("error_empty_state");
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org