gernotbelger@9415: /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde gernotbelger@9415: * Software engineering by gernotbelger@9415: * Björnsen Beratende Ingenieure GmbH gernotbelger@9415: * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt gernotbelger@9415: * gernotbelger@9415: * This file is Free Software under the GNU AGPL (>=v3) gernotbelger@9415: * and comes with ABSOLUTELY NO WARRANTY! Check out the gernotbelger@9415: * documentation coming with Dive4Elements River for details. gernotbelger@9415: */ gernotbelger@9415: package org.dive4elements.river.artifacts.model.fixings; gernotbelger@9415: gernotbelger@9415: import java.util.List; gernotbelger@9415: gernotbelger@9415: import org.dive4elements.river.utils.BatchLoader; gernotbelger@9415: import org.hibernate.SQLQuery; gernotbelger@9415: import org.hibernate.Session; gernotbelger@9415: import org.hibernate.type.StandardBasicTypes; gernotbelger@9415: gernotbelger@9415: final class KMRangeLoader extends BatchLoader { gernotbelger@9415: gernotbelger@9415: private static final String SQL_FIXING_COLUMN_KM_RANGE_BATCH = "SELECT " + "wst_column_id," + "MIN(position) AS start_km," + "MAX(position) AS stop_km " gernotbelger@9415: + "FROM " + "wst_column_values " + "WHERE " + "wst_column_id IN ($IDS) " + "GROUP BY wst_column_id"; gernotbelger@9415: gernotbelger@9415: public KMRangeLoader(final List columns, final Session session) { gernotbelger@9415: super(columns, session, SQL_FIXING_COLUMN_KM_RANGE_BATCH); gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: @Override gernotbelger@9415: protected void fill(final SQLQuery query) { gernotbelger@9415: query.addScalar("wst_column_id", StandardBasicTypes.INTEGER).addScalar("start_km", StandardBasicTypes.DOUBLE).addScalar("stop_km", gernotbelger@9415: StandardBasicTypes.DOUBLE); gernotbelger@9415: gernotbelger@9415: final List ranges = query.list(); gernotbelger@9415: for (final Object[] r : ranges) { gernotbelger@9415: final Integer cid = (Integer) r[0]; gernotbelger@9415: final double[] vs = new double[] { (Double) r[1], (Double) r[2] }; gernotbelger@9415: cache(cid, vs); gernotbelger@9415: } gernotbelger@9415: } gernotbelger@9415: }