view flys-backend/src/main/java/de/intevation/flys/importer/Importer.java @ 199:ed38839a6b08

Ported over some WST parsing stuff from desktop flys flys-backend/trunk@1538 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Tue, 22 Mar 2011 15:48:09 +0000
parents d40da430d2fe
children 67fd63e4ef66
line wrap: on
line source
package de.intevation.flys.importer;

import java.io.File;
import java.io.IOException;

import java.util.List;

import java.sql.SQLException;

import org.apache.log4j.Logger;

import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.HibernateException;

import de.intevation.flys.backend.SessionFactoryProvider;

public class Importer
{
    private static Logger log = Logger.getLogger(Importer.class);

    public static final boolean DRY_RUN =
        Boolean.getBoolean("flys.backend.importer.dry.run");

    public static final ThreadLocal<Session> sessionHolder =
        new ThreadLocal<Session>();

    protected List<ImportRiver> rivers;

    public Importer() {
    }

    public Importer(List<ImportRiver> rivers) {
        this.rivers = rivers;
    }

    public List<ImportRiver> getRivers() {
        return rivers;
    }

    public void setRivers(List<ImportRiver> rivers) {
        this.rivers = rivers;
    }

    public void writeRivers() {
        log.debug("write rivers started");

        Session session = sessionHolder.get();

        for (ImportRiver river: rivers) {
            log.debug("writing river '" + river.getName() + "'");
            river.storeDependencies();
            session.flush();
        }

        log.debug("write rivers finished");
    }

    public void writeToDatabase() {
        SessionFactory sessionFactory =
            SessionFactoryProvider.createSessionFactory();

        Session session = sessionFactory.openSession();

        sessionHolder.set(session);

        Transaction tx = null;

        try {
            tx = session.beginTransaction();

            try {
                writeRivers();
            }
            catch (HibernateException he) {
                Throwable t = he.getCause();
                while (t instanceof SQLException) {
                    SQLException sqle = (SQLException)t;
                    log.error("SQL exeception chain:", sqle);
                    t = sqle.getNextException();
                }
                throw he;
            }

            tx.commit();
        }
        catch (RuntimeException re) {
            if (tx != null) {
                tx.rollback();
            }
            throw re;
        }
        finally {
            session.close();
            sessionHolder.remove();
        }
    }

    public static void main(String [] args) {

        InfoGewParser infoGewParser = new InfoGewParser();

        for (String gew: args) {
            log.info("parsing info gew file: " + gew);
            try {
                infoGewParser.parse(new File(gew));
            }
            catch (IOException ioe) {
                log.error("cannot while parsing: " + gew);
            }
        }

        if (!DRY_RUN) {
            new Importer(infoGewParser.getRivers()).writeToDatabase();
        }
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org