view flys-artifacts/src/main/java/de/intevation/flys/artifacts/access/HistoricalDischargeAccess.java @ 4655:cd44d28d0fbc

Move the access to artifact data to the Access object Use BedHeightAccess class to receive the data from the artifact. This abstracts the data access from the actual artifact.
author Björn Ricks <bjoern.ricks@intevation.de>
date Tue, 11 Dec 2012 09:44:04 +0100
parents d952372e7083
children b195fede1c3b
line wrap: on
line source
package de.intevation.flys.artifacts.access;

import java.util.Date;

import de.intevation.flys.artifacts.FLYSArtifact;
import de.intevation.flys.artifacts.model.Timerange;


public class HistoricalDischargeAccess extends RiverAccess {

    public static enum EvaluationMode {
        W, Q
    }

    public static final String DATA_EVALUATION_TIME = "year_range";
    public static final String DATA_EVALUATION_MODE = "historical_mode";
    public static final String DATA_INPUT_VALUES = "historical_values";

    private Timerange evaluationTimerange;
    private EvaluationMode evaluationMode;

    private double[] qs;
    private double[] ws;

    public HistoricalDischargeAccess(FLYSArtifact artifact) {
        super(artifact);
    }

    /**
     * This method returns the evaluation mode. The evaluation mode W is set, if
     * the <b>DATA_EVALUATION_MODE</b> is 0. Otherwise, the evaluation mode Q is
     * set.
     * 
     * @return EvaluationMode.W if the parameter <i>historical_mode</i> is set
     *         to 0, otherwise EvaluationMode.Q.
     */
    public EvaluationMode getEvaluationMode() {
        if (evaluationMode == null) {
            int mode = getInteger(DATA_EVALUATION_MODE);
            evaluationMode = mode == 0 ? EvaluationMode.W : EvaluationMode.Q;
        }

        return evaluationMode;
    }

    /**
     * This method returns the time range specified by <i>year_range</i>
     * parameter. This parameter has to be a string that consists of two long
     * values (time millis since 1970) separated by a ';'.
     * 
     * @return the evaluation time range specified by <i>year_range</i>.
     */
    public Timerange getEvaluationTimerange() {
        if (evaluationTimerange == null) {
            long[] startend = getLongArray(DATA_EVALUATION_TIME);

            if (startend != null && startend.length > 1) {
                Date start = new Date(startend[0]);
                Date end = new Date(startend[1]);

                evaluationTimerange = new Timerange(start, end);
            }
        }

        return evaluationTimerange;
    }

    /**
     * This method returns the input Q values if the evaluation mode Q is set.
     * Otherwise, this method will return a double array of length 0. The values
     * returned by this method are extracted from string parameter
     * <i>historical_values</i>.
     * 
     * @return the input Q values or a double array of length 0.
     */
    public double[] getQs() {
        if (qs == null) {
            if (getEvaluationMode() == EvaluationMode.Q) {
                qs = getDoubleArray(DATA_INPUT_VALUES);
            }
            else {
                qs = new double[0];
            }
        }

        return qs;
    }

    /**
     * This method returns the input W values if the evaluation mode W is set.
     * Otherwise, this method will return a double array of length 0. The values
     * returned by this method are extracted from string parameter
     * <i>historical_values</i>.
     * 
     * @return the input W values or a double array of length 0.
     */
    public double[] getWs() {
        if (ws == null) {
            if (getEvaluationMode() == EvaluationMode.W) {
                ws = getDoubleArray(DATA_INPUT_VALUES);
            }
            else {
                ws = new double[0];
            }
        }

        return ws;
    }
}

http://dive4elements.wald.intevation.org