Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/ColumnQRangeLoader.java @ 9646:0380717105ba
Implemented alternative fitting strategy for Log-Linear function.
author | Gernot Belger <g.belger@bjoernsen.de> |
---|---|
date | Mon, 02 Dec 2019 17:56:15 +0100 |
parents | 9744ce3c3853 |
children |
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde * Software engineering by * Björnsen Beratende Ingenieure GmbH * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.artifacts.model.fixings; import java.util.ArrayList; import java.util.List; import org.dive4elements.river.utils.BatchLoader; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.type.StandardBasicTypes; final class ColumnQRangeLoader extends BatchLoader<List<double[]>> { private static final String SQL_FIXING_COLUMN_Q_RANGES_BATCH = "SELECT " + "wcqr.wst_column_id AS wst_column_id," + "wqr.q AS q," + "r.a AS start_km," + "r.b AS stop_km " + "FROM wst_column_q_ranges wcqr " + "JOIN wst_q_ranges wqr ON wcqr.wst_q_range_id = wqr.id " + "JOIN ranges r ON wqr.range_id = r.id " + "WHERE " + "wcqr.wst_column_id IN ($IDS) " + "ORDER BY wcqr.wst_column_id, r.a"; public ColumnQRangeLoader(final List<Integer> columns, final Session session) { super(columns, session, SQL_FIXING_COLUMN_Q_RANGES_BATCH); } @Override protected void fill(final SQLQuery query) { query.addScalar("wst_column_id", StandardBasicTypes.INTEGER).addScalar("q", StandardBasicTypes.DOUBLE).addScalar("start_km", StandardBasicTypes.DOUBLE) .addScalar("stop_km", StandardBasicTypes.DOUBLE); int lastId = Integer.MIN_VALUE; List<double[]> column = new ArrayList<>(); final List<Object[]> ranges = query.list(); for (final Object[] r : ranges) { final int cid = (Integer) r[0]; if (cid != lastId && !column.isEmpty()) { cache(lastId, column); column = new ArrayList<>(); } column.add(new double[] { (Double) r[1], (Double) r[2], (Double) r[3] }); lastId = cid; } if (!column.isEmpty()) { cache(lastId, column); } } }