view artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixColumnLoader.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.Date;
import java.util.List;

import org.dive4elements.river.artifacts.model.fixings.FixingsOverview.FixColumn;
import org.dive4elements.river.utils.BatchLoader;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.type.StandardBasicTypes;

final class FixColumnLoader extends BatchLoader<List<FixColumn>> {

    private static final String SQL_FIXING_COLUMNS_BATCH = "SELECT " + "wc.wst_id     AS wst_id," + "wc.id         AS wst_column_id,"
            + "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 "
            + "WHERE " + "wc.wst_id IN ($IDS) " + "ORDER BY wc.wst_id, position";

    public FixColumnLoader(final List<Integer> columns, final Session session) {
        super(columns, session, SQL_FIXING_COLUMNS_BATCH);
    }

    @Override
    protected void fill(final SQLQuery query) {
        query.addScalar("wst_id", StandardBasicTypes.INTEGER).addScalar("wst_column_id", StandardBasicTypes.INTEGER)
        .addScalar("start_time", StandardBasicTypes.TIMESTAMP).addScalar("name", StandardBasicTypes.STRING);

        int lastId = Integer.MIN_VALUE;
        List<FixColumn> cols = new ArrayList<>();

        final List<Object[]> columns = query.list();
        for (final Object[] c : columns) {
            final int wid = (Integer) c[0];

            if (wid != lastId && !cols.isEmpty()) {
                cache(lastId, cols);
                cols = new ArrayList<>();
            }
            cols.add(new FixColumn((Integer) c[1], (Date) c[2], (String) c[3]));

            lastId = wid;
        }
        if (!cols.isEmpty()) {
            cache(lastId, cols);
        }
    }
}

http://dive4elements.wald.intevation.org