view flys-artifacts/src/main/java/de/intevation/flys/artifacts/states/RangeState.java @ 4255:670e98f5a441

Fixed leak while merging facets. The ThemeList that is used by OutputHelper to sort the Facets for an Output now uses a list to store the ManagedFacets. The correct order is made up by sorting the List using Collections.sort() function of the Java JDK. Therfore, the ManagedFacet class implements the Comparable interface. The return value of its compareTo(other) method depends on the value of the 'position' field.
author Ingo Weinzierl <weinzierl.ingo@googlemail.com>
date Thu, 25 Oct 2012 14:01:46 +0200
parents 022f62c75878
children 1358d0c8481c
line wrap: on
line source
package de.intevation.flys.artifacts.states;

import org.apache.log4j.Logger;

import de.intevation.artifacts.Artifact;

import de.intevation.artifactdatabase.data.StateData;

import de.intevation.flys.artifacts.FLYSArtifact;


/**
 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
 */
public abstract class RangeState extends DefaultState {

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


    public RangeState() {
    }


    protected abstract String   getLowerField();
    protected abstract String   getUpperField();
    protected abstract String   getStepField();
    protected abstract double[] getMinMax(Artifact artifact);


    protected boolean validateBounds(
        double fromValid, double toValid,
        double from,      double to)
    throws IllegalArgumentException
    {
        if (from < fromValid) {
            logger.error(
                "Invalid 'from'. " + from + " is smaller than " + fromValid);
            throw new IllegalArgumentException("error_feed_from_out_of_range");
        }
        else if (to > toValid) {
            logger.error(
                "Invalid 'to'. " + to + " is bigger than " + toValid);
            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(
        double fromValid, double toValid,
        double from,      double to,      double step)
    throws IllegalArgumentException
    {
        logger.debug("RangeState.validateRange");

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


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

        StateData dFrom = getData(flys, getLowerField());
        StateData dTo   = getData(flys, getUpperField());
        StateData dStep = getData(flys, getStepField());

        String fromStr = dFrom != null ? (String) dFrom.getValue() : null;
        String toStr   = dTo   != null ? (String) dTo.getValue()   : null;
        String stepStr = dStep != null ? (String) dStep.getValue() : null;

        if (fromStr == null || toStr == null || stepStr == null) {
            throw new IllegalArgumentException("error_empty_state");
        }

        try {
            double from = Double.parseDouble(fromStr);
            double to   = Double.parseDouble(toStr);
            double step = Double.parseDouble(stepStr);

            double[] minmax = getMinMax(flys);

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

http://dive4elements.wald.intevation.org