sascha@177: package de.intevation.flys.importer; sascha@177: sascha@765: import de.intevation.artifacts.common.utils.XMLUtils; sascha@765: sascha@1211: import de.intevation.flys.importer.parsers.InfoGewParser; sascha@1211: import de.intevation.flys.importer.parsers.AnnotationClassifier; sascha@1211: 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.Transaction; sascha@188: import org.hibernate.HibernateException; sascha@180: sascha@765: import org.w3c.dom.Document; sascha@765: sascha@177: public class Importer sascha@177: { sascha@177: private static Logger log = Logger.getLogger(Importer.class); sascha@177: 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@188: for (ImportRiver river: rivers) { sascha@188: log.debug("writing river '" + river.getName() + "'"); sascha@190: river.storeDependencies(); sascha@497: ImporterSession.getInstance().getDatabaseSession().flush(); sascha@180: } sascha@188: sascha@182: log.debug("write rivers finished"); sascha@180: } sascha@180: sascha@180: public void writeToDatabase() { sascha@183: sascha@180: Transaction tx = null; sascha@180: sascha@180: try { sascha@497: tx = ImporterSession.getInstance() sascha@497: .getDatabaseSession().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: } sascha@180: sascha@765: public static AnnotationClassifier getAnnotationClassifier() { sascha@1223: String annotationTypes = Config.INSTANCE.getAnnotationTypes(); sascha@765: sascha@765: if (annotationTypes == null) { sascha@766: log.info("no annotation types file configured."); sascha@765: return null; sascha@765: } sascha@765: sascha@765: File file = new File(annotationTypes); sascha@765: sascha@766: log.info("use annotation types file '" + file + "'"); sascha@766: sascha@765: if (!(file.isFile() && file.canRead())) { sascha@765: log.warn("annotation type file '" + file + "' is not readable."); sascha@765: return null; sascha@765: } sascha@765: sascha@765: Document rules = XMLUtils.parseDocument(file); sascha@765: sascha@765: if (rules == null) { sascha@765: log.warn("cannot parse annotation types file."); sascha@765: return null; sascha@765: } sascha@765: sascha@765: return new AnnotationClassifier(rules); sascha@765: } sascha@765: sascha@177: public static void main(String [] args) { sascha@177: sascha@765: InfoGewParser infoGewParser = new InfoGewParser( sascha@765: getAnnotationClassifier()); sascha@177: ingo@2806: log.info("Start parsing rivers..."); ingo@2806: 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: ingo@2804: String gew = Config.INSTANCE.getInfoGewFile(); ingo@2804: if (gew != null && gew.length() > 0) { ingo@2804: log.info("parsing info gew file: " + gew); ingo@2804: try { ingo@2804: infoGewParser.parse(new File(gew)); ingo@2804: } ingo@2804: catch (IOException ioe) { ingo@2804: log.error("cannot parse file: " + gew); ingo@2804: } ingo@2804: } ingo@2804: sascha@1223: if (!Config.INSTANCE.dryRun()) { sascha@199: new Importer(infoGewParser.getRivers()).writeToDatabase(); sascha@199: } sascha@177: } sascha@177: } sascha@177: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :