sascha@177: package de.intevation.flys.importer; sascha@177: sascha@177: import java.io.File; sascha@177: import java.io.IOException; sascha@177: sascha@180: import java.util.List; sascha@180: sascha@188: import java.sql.SQLException; sascha@188: sascha@177: import org.apache.log4j.Logger; sascha@177: sascha@180: import org.hibernate.SessionFactory; sascha@180: import org.hibernate.Session; sascha@180: import org.hibernate.Transaction; sascha@188: import org.hibernate.HibernateException; sascha@180: sascha@180: import de.intevation.flys.backend.SessionFactoryProvider; sascha@180: sascha@177: public class Importer sascha@177: { sascha@177: private static Logger log = Logger.getLogger(Importer.class); sascha@177: sascha@183: public static final ThreadLocal sessionHolder = sascha@183: new ThreadLocal(); sascha@183: sascha@180: protected List rivers; sascha@180: sascha@180: public Importer() { sascha@180: } sascha@180: sascha@180: public Importer(List rivers) { sascha@180: this.rivers = rivers; sascha@180: } sascha@180: sascha@180: public List getRivers() { sascha@180: return rivers; sascha@180: } sascha@180: sascha@180: public void setRivers(List rivers) { sascha@180: this.rivers = rivers; sascha@180: } sascha@180: sascha@180: public void writeRivers() { sascha@182: log.debug("write rivers started"); sascha@188: sascha@183: Session session = sessionHolder.get(); sascha@183: sascha@188: for (ImportRiver river: rivers) { sascha@188: log.debug("writing river '" + river.getName() + "'"); sascha@188: river.storeAnnotations(); sascha@188: session.flush(); sascha@180: } sascha@188: sascha@182: log.debug("write rivers finished"); sascha@180: } sascha@180: sascha@180: public void writeToDatabase() { sascha@180: SessionFactory sessionFactory = sascha@180: SessionFactoryProvider.createSessionFactory(); sascha@180: sascha@183: Session session = sessionFactory.openSession(); sascha@183: sascha@183: sessionHolder.set(session); sascha@183: sascha@180: Transaction tx = null; sascha@180: sascha@180: try { sascha@180: tx = session.beginTransaction(); sascha@180: sascha@188: try { sascha@188: writeRivers(); sascha@188: } sascha@188: catch (HibernateException he) { sascha@188: Throwable t = he.getCause(); sascha@188: while (t instanceof SQLException) { sascha@188: SQLException sqle = (SQLException)t; sascha@188: log.error("SQL exeception chain:", sqle); sascha@188: t = sqle.getNextException(); sascha@188: } sascha@188: throw he; sascha@188: } sascha@180: sascha@180: tx.commit(); sascha@180: } sascha@180: catch (RuntimeException re) { sascha@180: if (tx != null) { sascha@180: tx.rollback(); sascha@180: } sascha@180: throw re; sascha@180: } sascha@180: finally { sascha@183: session.close(); sascha@183: sessionHolder.remove(); sascha@180: } sascha@180: } sascha@180: sascha@177: public static void main(String [] args) { sascha@177: sascha@177: InfoGewParser infoGewParser = new InfoGewParser(); sascha@177: sascha@177: for (String gew: args) { sascha@177: log.info("parsing info gew file: " + gew); sascha@177: try { sascha@177: infoGewParser.parse(new File(gew)); sascha@177: } sascha@177: catch (IOException ioe) { sascha@177: log.error("cannot while parsing: " + gew); sascha@177: } sascha@177: } sascha@180: sascha@189: // TODO: Add a dry run option sascha@180: new Importer(infoGewParser.getRivers()).writeToDatabase(); sascha@177: } sascha@177: } sascha@177: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :