view flys-backend/src/main/java/de/intevation/flys/importer/ImportFlowVelocityModel.java @ 5416:4ee97d914501

Morpho-Importer: Do not mask database exceptions as broken files
author Tom Gottfried <tom.gottfried@intevation.de>
date Tue, 26 Mar 2013 09:39:34 +0100
parents c7ce7c9e405e
children 3bd786772798
line wrap: on
line source
package de.intevation.flys.importer;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import org.hibernate.Session;
import org.hibernate.Query;
import org.hibernate.exception.ConstraintViolationException;

import de.intevation.flys.model.DischargeZone;
import de.intevation.flys.model.FlowVelocityModel;
import de.intevation.flys.model.River;


public class ImportFlowVelocityModel {

    private static final Logger log = Logger
        .getLogger(ImportFlowVelocityModel.class);

    private String description;

    private ImportDischargeZone dischargeZone;

    private List<ImportFlowVelocityModelValue> values;

    private FlowVelocityModel peer;

    public ImportFlowVelocityModel() {
        values = new ArrayList<ImportFlowVelocityModelValue>();
    }

    public ImportFlowVelocityModel(ImportDischargeZone dischargeZone,
        String description) {
        this();

        this.dischargeZone = dischargeZone;
        this.description = description;
    }

    public void setDischargeZone(ImportDischargeZone dischargeZone) {
        this.dischargeZone = dischargeZone;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void addValue(ImportFlowVelocityModelValue value) {
        this.values.add(value);
    }

    public void storeDependencies(River river) {
        log.debug("store dependencies");

        if (dischargeZone == null) {
            log.warn("skip flow velocity model: No discharge zone specified.");
            return;
        }

        dischargeZone.storeDependencies(river);

        FlowVelocityModel peer = getPeer(river);

        if (peer != null) {
            int i = 0;

            for (ImportFlowVelocityModelValue value : values) {
                value.storeDependencies(peer);
                i++;
            }

            log.info("stored " + i + " flow velocity model values.");
        }
    }

    public FlowVelocityModel getPeer(River river) {
        if (peer == null) {
            Session session = ImporterSession.getInstance()
                .getDatabaseSession();

            DischargeZone zone = dischargeZone.getPeer(river);

            Query query = session.createQuery("from FlowVelocityModel where "
                + "   dischargeZone=:dischargeZone");

            //query.setParameter("river", river);
            query.setParameter("dischargeZone", zone);

            List<FlowVelocityModel> model = query.list();

            if (model.isEmpty()) {
                //peer = new FlowVelocityModel(river, zone);
                peer = new FlowVelocityModel(zone);
                session.save(peer);
            }
            else {
                peer = model.get(0);
            }
        }

        return peer;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org