ingo@4152: package de.intevation.flys.artifacts.access; ingo@4152: ingo@4152: import java.util.Date; ingo@4152: ingo@4152: import de.intevation.flys.artifacts.FLYSArtifact; ingo@4152: import de.intevation.flys.artifacts.model.Timerange; ingo@4152: ingo@4152: ingo@4152: public class HistoricalDischargeAccess extends RiverAccess { ingo@4152: ingo@4232: public static enum EvaluationMode { ingo@4232: W, Q ingo@4232: } ingo@4232: ingo@4152: public static final String DATA_EVALUATION_TIME = "year_range"; ingo@4233: public static final String DATA_EVALUATION_MODE = "historical_mode"; ingo@4233: public static final String DATA_INPUT_VALUES = "historical_values"; ingo@4152: ingo@4152: private Timerange evaluationTimerange; ingo@4232: private EvaluationMode evaluationMode; ingo@4152: ingo@4233: private double[] qs; ingo@4233: private double[] ws; ingo@4233: ingo@4152: public HistoricalDischargeAccess(FLYSArtifact artifact) { ingo@4152: super(artifact); ingo@4152: } ingo@4152: ingo@4233: /** ingo@4233: * This method returns the evaluation mode. The evaluation mode W is set, if ingo@4233: * the DATA_EVALUATION_MODE is 0. Otherwise, the evaluation mode Q is ingo@4233: * set. ingo@4233: * ingo@4233: * @return EvaluationMode.W if the parameter historical_mode is set ingo@4233: * to 0, otherwise EvaluationMode.Q. ingo@4233: */ ingo@4232: public EvaluationMode getEvaluationMode() { ingo@4232: if (evaluationMode == null) { ingo@4233: int mode = getInteger(DATA_EVALUATION_MODE); ingo@4232: evaluationMode = mode == 0 ? EvaluationMode.W : EvaluationMode.Q; ingo@4232: } ingo@4232: ingo@4232: return evaluationMode; ingo@4232: } ingo@4232: ingo@4233: /** ingo@4233: * This method returns the time range specified by year_range ingo@4233: * parameter. This parameter has to be a string that consists of two long ingo@4233: * values (time millis since 1970) separated by a ';'. ingo@4233: * ingo@4233: * @return the evaluation time range specified by year_range. ingo@4233: */ ingo@4152: public Timerange getEvaluationTimerange() { ingo@4152: if (evaluationTimerange == null) { ingo@4152: long[] startend = getLongArray(DATA_EVALUATION_TIME); ingo@4152: ingo@4152: if (startend != null && startend.length > 1) { ingo@4152: Date start = new Date(startend[0]); ingo@4152: Date end = new Date(startend[1]); ingo@4152: ingo@4152: evaluationTimerange = new Timerange(start, end); ingo@4152: } ingo@4152: } ingo@4152: ingo@4152: return evaluationTimerange; ingo@4152: } ingo@4233: ingo@4233: /** ingo@4233: * This method returns the input Q values if the evaluation mode Q is set. ingo@4233: * Otherwise, this method will return a double array of length 0. The values ingo@4233: * returned by this method are extracted from string parameter ingo@4233: * historical_values. ingo@4233: * ingo@4233: * @return the input Q values or a double array of length 0. ingo@4233: */ ingo@4233: public double[] getQs() { ingo@4233: if (qs == null) { ingo@4233: if (getEvaluationMode() == EvaluationMode.Q) { ingo@4233: qs = getDoubleArray(DATA_INPUT_VALUES); ingo@4233: } ingo@4233: else { ingo@4233: qs = new double[0]; ingo@4233: } ingo@4233: } ingo@4233: ingo@4233: return qs; ingo@4233: } ingo@4233: ingo@4233: /** ingo@4233: * This method returns the input W values if the evaluation mode W is set. ingo@4233: * Otherwise, this method will return a double array of length 0. The values ingo@4233: * returned by this method are extracted from string parameter ingo@4233: * historical_values. ingo@4233: * ingo@4233: * @return the input W values or a double array of length 0. ingo@4233: */ ingo@4233: public double[] getWs() { ingo@4233: if (ws == null) { ingo@4233: if (getEvaluationMode() == EvaluationMode.W) { ingo@4233: ws = getDoubleArray(DATA_INPUT_VALUES); ingo@4233: } ingo@4233: else { ingo@4233: ws = new double[0]; ingo@4233: } ingo@4233: } ingo@4233: ingo@4233: return ws; ingo@4233: } ingo@4152: }