sascha@146: package de.intevation.flys.artifacts.model; sascha@146: sascha@146: import java.util.List; sascha@146: import java.util.Map; sascha@146: import java.util.HashMap; sascha@146: import java.util.Arrays; sascha@146: sascha@146: import java.io.Serializable; sascha@146: sascha@146: import org.hibernate.SessionFactory; sascha@146: import org.hibernate.Session; sascha@146: import org.hibernate.Query; sascha@146: sascha@146: import org.apache.log4j.Logger; sascha@146: sascha@146: import de.intevation.flys.backend.SessionFactoryProvider; sascha@146: sascha@146: import de.intevation.flys.model.Gauge; sascha@146: import de.intevation.flys.model.DischargeTable; sascha@146: import de.intevation.flys.model.DischargeTableValue; sascha@146: sascha@146: public class DischargeTables sascha@146: implements Serializable sascha@146: { sascha@146: private static Logger log = Logger.getLogger(DischargeTables.class); sascha@146: sascha@146: protected List gaugeNames; sascha@146: sascha@146: protected String riverName; sascha@146: sascha@146: protected Map values; sascha@146: sascha@146: public DischargeTables() { sascha@146: } sascha@146: sascha@146: public DischargeTables(String riverName, String [] gaugeNames) { sascha@146: this(riverName, Arrays.asList(gaugeNames)); sascha@146: } sascha@146: sascha@146: public DischargeTables(String riverName, List gaugeNames) { sascha@146: this.riverName = riverName; sascha@146: this.gaugeNames = gaugeNames; sascha@146: } sascha@146: sascha@146: public Map getValues() { sascha@146: if (values == null) { sascha@146: values = loadValues(); sascha@146: } sascha@146: return values; sascha@146: } sascha@146: sascha@146: protected Map loadValues() { sascha@146: Map values = new HashMap(); sascha@146: sascha@146: SessionFactory sf = SessionFactoryProvider.getSessionFactory(); sascha@146: Session session = sf.openSession(); sascha@146: sascha@146: try { sascha@146: Query gaugeQuery = session.createQuery( sascha@146: "from Gauge where name=:gauge and river.name=:river"); sascha@146: gaugeQuery.setParameter("river", riverName); sascha@146: sascha@146: for (String gaugeName: gaugeNames) { sascha@146: gaugeQuery.setParameter("gauge", gaugeName); sascha@146: List gauges = gaugeQuery.list(); sascha@146: if (gauges.isEmpty()) { sascha@146: log.warn( sascha@146: "no gauge '"+gaugeName+"' at river '"+riverName+"'"); sascha@146: continue; sascha@146: } sascha@146: Gauge gauge = gauges.get(0); sascha@146: sascha@146: List tables = gauge.getDischargeTables(); sascha@146: sascha@146: if (tables.isEmpty()) { sascha@146: log.warn( sascha@146: "no discharge table for gauge '" + gaugeName + "'"); sascha@146: continue; sascha@146: } sascha@146: sascha@146: // TODO: Filter by time interval sascha@146: DischargeTable table = tables.get(0); sascha@146: sascha@146: List dtvs = sascha@146: table.getDischargeTableValues(); sascha@146: sascha@146: double [] vs = new double[dtvs.size() << 1]; sascha@146: sascha@146: int idx = 0; sascha@146: for (DischargeTableValue dtv: dtvs) { sascha@146: vs[idx++] = dtv.getW().doubleValue(); sascha@146: vs[idx++] = dtv.getQ().doubleValue(); sascha@146: } sascha@146: sascha@146: values.put(gaugeName, vs); sascha@146: } sascha@146: sascha@146: return values; sascha@146: } sascha@146: finally { sascha@146: session.close(); sascha@146: } sascha@146: } sascha@146: } sascha@146: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :