view artifacts/src/main/java/org/dive4elements/river/artifacts/model/fixings/FixColumnLoader.java @ 9415:9744ce3c3853

Rework of fixanalysis computation and dWt and WQ facets. Got rid of strange remapping and bitshifting code by explicitely saving the column information and using it in the facets. The facets also put the valid station range into their xml-metadata
author gernotbelger
date Thu, 16 Aug 2018 16:27:53 +0200
parents
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