# HG changeset patch # User mschaefer # Date 1522742521 -7200 # Node ID da5dc74466522c52b2d0b45c8cf0fb86877e9f34 # Parent fe81eb39080c90a27db438159a7d30a13697d783 SLF4J added and configureLogging in main diff -r fe81eb39080c -r da5dc7446652 backend/pom.xml --- a/backend/pom.xml Tue Apr 03 09:54:26 2018 +0200 +++ b/backend/pom.xml Tue Apr 03 10:02:01 2018 +0200 @@ -179,6 +179,16 @@ 1.1.1 runtime + + org.slf4j + jul-to-slf4j + 1.6.1 + + + org.slf4j + slf4j-log4j12 + 1.6.1 + diff -r fe81eb39080c -r da5dc7446652 backend/src/main/java/org/dive4elements/river/importer/Importer.java --- a/backend/src/main/java/org/dive4elements/river/importer/Importer.java Tue Apr 03 09:54:26 2018 +0200 +++ b/backend/src/main/java/org/dive4elements/river/importer/Importer.java Tue Apr 03 10:02:01 2018 +0200 @@ -8,30 +8,26 @@ package org.dive4elements.river.importer; -import org.dive4elements.artifacts.common.utils.XMLUtils; - -import org.dive4elements.river.importer.parsers.AnnotationClassifier; -import org.dive4elements.river.importer.parsers.BundesWasserStrassenParser; -import org.dive4elements.river.importer.parsers.InfoGewParser; - import java.io.File; import java.io.IOException; - +import java.net.MalformedURLException; +import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.sql.SQLException; - import org.apache.log4j.Logger; - +import org.apache.log4j.PropertyConfigurator; +import org.dive4elements.artifacts.common.utils.XMLUtils; +import org.dive4elements.river.backend.utils.StringUtil; +import org.dive4elements.river.importer.parsers.AnnotationClassifier; +import org.dive4elements.river.importer.parsers.BundesWasserStrassenParser; +import org.dive4elements.river.importer.parsers.InfoGewParser; +import org.hibernate.HibernateException; import org.hibernate.Transaction; -import org.hibernate.HibernateException; - +import org.slf4j.bridge.SLF4JBridgeHandler; import org.w3c.dom.Document; -import org.dive4elements.river.backend.utils.StringUtil; - /** Data Importer. Further processing happens per-river. */ public class Importer { @@ -45,15 +41,15 @@ public Importer() { } - public Importer(List rivers) { + public Importer(final List rivers) { this.rivers = rivers; } public List getRivers() { - return rivers; + return this.rivers; } - public void setRivers(List rivers) { + public void setRivers(final List rivers) { this.rivers = rivers; } @@ -61,7 +57,7 @@ public void writeRivers() { log.debug("write rivers started"); - for (ImportRiver river: rivers) { + for (final ImportRiver river: this.rivers) { log.debug("writing river '" + river.getName() + "'"); river.storeDependencies(); ImporterSession.getInstance().getDatabaseSession().flush(); @@ -75,16 +71,15 @@ Transaction tx = null; try { - tx = ImporterSession.getInstance() - .getDatabaseSession().beginTransaction(); + tx = ImporterSession.getInstance().getDatabaseSession().beginTransaction(); try { writeRivers(); } - catch (HibernateException he) { + catch (final HibernateException he) { Throwable t = he.getCause(); while (t instanceof SQLException) { - SQLException sqle = (SQLException) t; + final SQLException sqle = (SQLException) t; log.error("SQL exeception chain:", sqle); t = sqle.getNextException(); } @@ -93,7 +88,7 @@ tx.commit(); } - catch (RuntimeException re) { + catch (final RuntimeException re) { if (tx != null) { tx.rollback(); } @@ -102,14 +97,14 @@ } public static AnnotationClassifier getAnnotationClassifier() { - String annotationTypes = Config.INSTANCE.getAnnotationTypes(); + final String annotationTypes = Config.INSTANCE.getAnnotationTypes(); if (annotationTypes == null) { log.info("no annotation types file configured."); return null; } - File file = new File(annotationTypes); + final File file = new File(annotationTypes); log.info("use annotation types file '" + file + "'"); @@ -118,7 +113,7 @@ return null; } - Document rules = XMLUtils.parseDocument(file, false, null); + final Document rules = XMLUtils.parseDocument(file, false, null); if (rules == null) { log.warn("cannot parse annotation types file."); @@ -130,77 +125,79 @@ /** Starting point for importing river data. */ - public static void main(String [] args) { + public static void main(final String [] args) { - InfoGewParser infoGewParser = new InfoGewParser( - getAnnotationClassifier()); + configureLogging(); - log.info("Start parsing rivers..."); + log.info("START parsing rivers..."); + + final InfoGewParser infoGewParser = new InfoGewParser(getAnnotationClassifier()); File bwastrFile = null; - for (String gew: args) { - log.info("parsing info gew file: " + gew); - File gewFile = new File(gew); + // Main parsing loop for all river gew file paths in args + // FIXME: Multiple rivers lead to reparsing the already parsed rivers again in InfoGewParser.parse... + for (final String gew : args) { + log.info("Parsing info gew file: " + gew); + final File gewFile = new File(gew); if (bwastrFile == null) { - bwastrFile = new File( - gewFile.getParentFile(), BWASTR_ID_CSV_FILE); + bwastrFile = new File(gewFile.getParentFile(), BWASTR_ID_CSV_FILE); } try { infoGewParser.parse(gewFile); } - catch (IOException ioe) { - log.error("error while parsing gew: " + gew, ioe); + catch (final IOException ioe) { + log.error("error parsing gew: " + gew, ioe); System.exit(1); } } - String gew = Config.INSTANCE.getInfoGewFile(); + // Parse a single river gew file specified in the flys.backend.importer.infogew.file property + // (seems to be an alternative to the args way) + final String gew = Config.INSTANCE.getInfoGewFile(); if (gew != null && gew.length() > 0) { - log.info("parsing info gew file: " + gew); - File gewFile = new File(gew); + log.info("Parsing info gew file: " + gew); + final File gewFile = new File(gew); if (bwastrFile == null) { - bwastrFile = new File( - gewFile.getParentFile(), BWASTR_ID_CSV_FILE); + bwastrFile = new File(gewFile.getParentFile(), BWASTR_ID_CSV_FILE); } try { infoGewParser.parse(gewFile); } - catch (IOException ioe) { - log.error("error while parsing gew: " + gew, ioe); + catch (final IOException ioe) { + log.error("error parsing gew: " + gew, ioe); System.exit(1); } } // Look for official numbers. - BundesWasserStrassenParser bwastrIdParser = - new BundesWasserStrassenParser(); + final BundesWasserStrassenParser bwastrIdParser = new BundesWasserStrassenParser(); // Read bwastFile (river-dir + BWASTR_ID_CSV_FILE). if (!Config.INSTANCE.skipBWASTR()) { try{ bwastrIdParser.parse(bwastrFile); - HashMap map = bwastrIdParser.getMap(); + final HashMap map = bwastrIdParser.getMap(); // Now link rivers with official numbers. - for(ImportRiver river: infoGewParser.getRivers()) { - for(Map.Entry entry: map.entrySet()) { - if (StringUtil.containsIgnoreCase( - river.getName(), entry.getKey())) { + for(final ImportRiver river: infoGewParser.getRivers()) { + for(final Map.Entry entry: map.entrySet()) { + if (StringUtil.containsIgnoreCase(river.getName(), entry.getKey())) { river.setOfficialNumber(entry.getValue()); - log.debug(river.getName() - + " is mapped to bwastr " + entry.getValue()); + log.debug(river.getName() + " is mapped to bwastr " + entry.getValue()); } } } - } catch (IOException ioe) { - log.warn("BWASTR-file could not be loaded."); + } + catch (final IOException ioe) { + log.warn("BWASTR-file could not be loaded: " + ioe.getMessage()); } } else { - log.debug("skip reading BWASTR_ID.csv"); + log.debug("Skip reading BWASTR_ID.csv"); } + // Write all parsed objects to the database if (!Config.INSTANCE.dryRun()) { new Importer(infoGewParser.getRivers()).writeToDatabase(); } @@ -208,5 +205,28 @@ log.info("Dry run, not writing to database."); } } + + /** + * Tries to load the Log4j configuration from the property 'log4j.configuration'. + */ + private static final void configureLogging() { + final String configPath = System.getProperty("log4j.configuration"); + try { + final File propFile = new File(configPath); + if (propFile.isFile() && propFile.canRead()) { + try { + PropertyConfigurator.configure(propFile.toURI().toURL()); + SLF4JBridgeHandler.install(); + } + catch (final MalformedURLException mue) { + mue.printStackTrace(System.err); + } + } + } + catch (final Exception e) { + e.printStackTrace(System.err); + } + } + } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :