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.ArrayList; gernotbelger@9415: import java.util.Date; gernotbelger@9415: import java.util.List; gernotbelger@9415: gernotbelger@9415: import org.dive4elements.river.artifacts.model.fixings.FixingsOverview.FixColumn; 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 FixColumnLoader extends BatchLoader> { gernotbelger@9415: gernotbelger@9415: private static final String SQL_FIXING_COLUMNS_BATCH = "SELECT " + "wc.wst_id AS wst_id," + "wc.id AS wst_column_id," gernotbelger@9415: + "ti.start_time AS start_time," + "wc.name AS name " + "FROM wst_columns wc " + "JOIN time_intervals ti ON wc.time_interval_id = ti.id " gernotbelger@9415: + "WHERE " + "wc.wst_id IN ($IDS) " + "ORDER BY wc.wst_id, position"; gernotbelger@9415: gernotbelger@9415: public FixColumnLoader(final List columns, final Session session) { gernotbelger@9415: super(columns, session, SQL_FIXING_COLUMNS_BATCH); gernotbelger@9415: } gernotbelger@9415: gernotbelger@9415: @Override gernotbelger@9415: protected void fill(final SQLQuery query) { gernotbelger@9415: query.addScalar("wst_id", StandardBasicTypes.INTEGER).addScalar("wst_column_id", StandardBasicTypes.INTEGER) gernotbelger@9415: .addScalar("start_time", StandardBasicTypes.TIMESTAMP).addScalar("name", StandardBasicTypes.STRING); gernotbelger@9415: gernotbelger@9415: int lastId = Integer.MIN_VALUE; gernotbelger@9415: List cols = new ArrayList<>(); gernotbelger@9415: gernotbelger@9415: final List columns = query.list(); gernotbelger@9415: for (final Object[] c : columns) { gernotbelger@9415: final int wid = (Integer) c[0]; gernotbelger@9415: gernotbelger@9415: if (wid != lastId && !cols.isEmpty()) { gernotbelger@9415: cache(lastId, cols); gernotbelger@9415: cols = new ArrayList<>(); gernotbelger@9415: } gernotbelger@9415: cols.add(new FixColumn((Integer) c[1], (Date) c[2], (String) c[3])); gernotbelger@9415: gernotbelger@9415: lastId = wid; gernotbelger@9415: } gernotbelger@9415: if (!cols.isEmpty()) { gernotbelger@9415: cache(lastId, cols); gernotbelger@9415: } gernotbelger@9415: } gernotbelger@9415: }