view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/DischargeTables.java @ 315:94c176fdcb89

Removed the SessionHolder and adapted imports. flys-artifacts/trunk@1701 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 15 Apr 2011 09:52:37 +0000
parents ea3a438a7021
children 07e642030172
line wrap: on
line source
package de.intevation.flys.artifacts.model;

import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Arrays;

import java.io.Serializable;

import org.hibernate.Session;
import org.hibernate.Query;

import org.apache.log4j.Logger;

import de.intevation.flys.backend.SessionHolder;
import de.intevation.flys.model.Gauge;
import de.intevation.flys.model.DischargeTable;
import de.intevation.flys.model.DischargeTableValue;

public class DischargeTables
implements   Serializable
{
    private static Logger log = Logger.getLogger(DischargeTables.class);

    protected List<String> gaugeNames;

    protected String riverName;

    protected double scale;

    protected Map<String, double [][]> values;

    public DischargeTables() {
    }

    public DischargeTables(String riverName, String [] gaugeNames) {
        this(riverName, Arrays.asList(gaugeNames));
    }

    public DischargeTables(String riverName, List<String> gaugeNames) {
        scale           = Double.NaN;
        this.riverName  = riverName;
        this.gaugeNames = gaugeNames;
    }

    public Map<String, double [][]> getValues(double scale) {
        if (values == null || scale != this.scale) {
            values = loadValues(scale);
            this.scale = scale;
        }
        return values;
    }

    protected Map<String, double [][]> loadValues(double scale) {
        Map<String, double [][]> values = new HashMap<String, double [][]>();

        Session session = SessionHolder.HOLDER.get();

        Query gaugeQuery = session.createQuery(
            "from Gauge where name=:gauge and river.name=:river");
        gaugeQuery.setParameter("river", riverName);

        for (String gaugeName: gaugeNames) {
            gaugeQuery.setParameter("gauge", gaugeName);
            List<Gauge> gauges = gaugeQuery.list();
            if (gauges.isEmpty()) {
                log.warn(
                    "no gauge '"+gaugeName+"' at river '"+riverName+"'");
                continue;
            }
            Gauge gauge = gauges.get(0);

            List<DischargeTable> tables = gauge.getDischargeTables();

            if (tables.isEmpty()) {
                log.warn(
                    "no discharge table for gauge '" + gaugeName + "'");
                continue;
            }

            // TODO: Filter by time interval
            DischargeTable table = tables.get(0);

            List<DischargeTableValue> dtvs =
                table.getDischargeTableValues();

            double [][] vs = new double[2][dtvs.size()];

            int idx = 0;
            for (DischargeTableValue dtv: dtvs) {
                vs[0][idx] = dtv.getQ().doubleValue() * scale;
                vs[1][idx] = dtv.getW().doubleValue() * scale;
                ++idx;
            }

            values.put(gaugeName, vs);
        }

        return values;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org