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@199: public static final boolean DRY_RUN = sascha@199: Boolean.getBoolean("flys.backend.importer.dry.run"); sascha@199: sascha@765: public static final String ANNOTATION_TYPES = sascha@765: "flys.backend.importer.annotation.types"; sascha@765: 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@765: String annotationTypes = System.getProperty(ANNOTATION_TYPES); 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: 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@199: if (!DRY_RUN) { 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 :