teichmann@5863: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde teichmann@5863: * Software engineering by Intevation GmbH teichmann@5863: * teichmann@5994: * This file is Free Software under the GNU AGPL (>=v3) teichmann@5863: * and comes with ABSOLUTELY NO WARRANTY! Check out the teichmann@5994: * documentation coming with Dive4Elements River for details. teichmann@5863: */ teichmann@5863: teichmann@5831: package org.dive4elements.river.artifacts.datacage.templating; sascha@998: sascha@998: import java.util.Map; sascha@998: import java.util.HashMap; sascha@998: sascha@998: import java.io.IOException; sascha@998: import java.io.OutputStream; gernotbelger@8903: import java.net.MalformedURLException; sascha@998: import java.io.File; sascha@998: import java.io.FileOutputStream; sascha@998: teichmann@5831: import org.dive4elements.river.backend.SessionFactoryProvider; sascha@998: sascha@998: import org.hibernate.Session; gernotbelger@8903: import org.slf4j.bridge.SLF4JBridgeHandler; sascha@998: import org.w3c.dom.Document; sascha@998: sascha@998: import org.apache.log4j.Logger; gernotbelger@8903: import org.apache.log4j.PropertyConfigurator; gernotbelger@8903: import org.dive4elements.artifacts.common.utils.Config; teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils; sascha@998: teichmann@5831: import org.dive4elements.river.artifacts.datacage.Recommendations; sascha@1015: sascha@998: public class App sascha@998: { sascha@998: private static Logger log = Logger.getLogger(App.class); sascha@998: gernotbelger@8903: /** gernotbelger@8903: * The logging is done via Log4j. To configure the logging gernotbelger@8903: * a file 'log4j.properties' is search in the configuration directory. gernotbelger@8903: */ gernotbelger@8903: private static final String LOG4J_PROPERTIES = "log4j.properties"; gernotbelger@8903: sascha@1046: public static final String template = sascha@1046: System.getProperty("meta.data.template", "meta-data.xml"); sascha@1015: sascha@1015: public static final String userId = sascha@1015: System.getProperty("user.id"); sascha@998: sascha@998: public static final String PARAMETERS = sascha@998: System.getProperty("meta.data.parameters", ""); sascha@998: sascha@998: public static final String OUTPUT = sascha@998: System.getProperty("meta.data.output"); sascha@998: sascha@998: public static Map getParameters() { sascha@998: HashMap map = new HashMap(); sascha@998: String [] parts = PARAMETERS.split("\\s*;\\s*"); sascha@998: for (String part: parts) { sascha@998: String [] kv = part.split("\\s*:\\s*"); sascha@998: if (kv.length < 2 || (kv[0] = kv[0].trim()).length() == 0) { sascha@998: continue; sascha@998: } sascha@998: String [] values = kv[1].split("\\s*,\\s*"); sascha@998: map.put(kv[0], values.length == 1 ? values[0] : values); sascha@998: } sascha@998: return map; sascha@998: } sascha@998: gernotbelger@8903: /** gernotbelger@8903: * Trys to load the Log4j configuration from ${config.dir}/log4j.properties. gernotbelger@8903: */ gernotbelger@8903: private static final void configureLogging() { gernotbelger@8903: File configDir = Config.getConfigDirectory(); gernotbelger@8903: File propFile = new File(configDir, LOG4J_PROPERTIES); gernotbelger@8903: gernotbelger@8903: if (propFile.isFile() && propFile.canRead()) { gernotbelger@8903: try { gernotbelger@8903: PropertyConfigurator.configure(propFile.toURI().toURL()); gernotbelger@8903: SLF4JBridgeHandler.install(); gernotbelger@8903: } gernotbelger@8903: catch (MalformedURLException mue) { gernotbelger@8903: mue.printStackTrace(System.err); gernotbelger@8903: } gernotbelger@8903: } gernotbelger@8903: } gernotbelger@8903: sascha@998: public static void main(String [] args) { sascha@998: gernotbelger@8903: configureLogging(); gernotbelger@8903: sascha@1015: Recommendations rec = Recommendations.createRecommendations( sascha@1046: new File(template)); sascha@1015: sascha@1015: if (rec == null) { sascha@1015: System.err.println("No recommendations created"); sascha@1015: return; sascha@1015: } sascha@998: sascha@998: final Document result = XMLUtils.newDocument(); sascha@998: sascha@998: final Map parameters = getParameters(); gernotbelger@8903: parameters.put("ARTIFACT-OUTS", new String[] { "LONGITUDINAL_SECTION" }); gernotbelger@8903: parameters.put("PARAMETERS", parameters); gernotbelger@8903: parameters.put("USER-ID", userId); sascha@998: sascha@998: Session session = SessionFactoryProvider sascha@998: .createSessionFactory() sascha@998: .openSession(); sascha@998: sascha@998: try { sascha@1015: rec.recommend(parameters, userId, result, session); sascha@998: } sascha@998: finally { sascha@998: session.close(); sascha@998: } sascha@998: sascha@998: OutputStream out; sascha@998: sascha@998: if (OUTPUT == null) { sascha@998: out = System.out; sascha@998: } sascha@998: else { sascha@998: try { sascha@998: out = new FileOutputStream(OUTPUT); sascha@998: } sascha@998: catch (IOException ioe) { sascha@998: log.error(ioe); sascha@998: return; sascha@998: } sascha@998: } sascha@998: sascha@998: try { gernotbelger@8903: out.write('\n'); sascha@998: XMLUtils.toStream(result, out); gernotbelger@8903: out.write('\n'); gernotbelger@8903: } gernotbelger@8903: catch (IOException e) { gernotbelger@8903: log.error(e); sascha@998: } sascha@998: finally { sascha@998: if (OUTPUT != null) { sascha@998: try { sascha@998: out.close(); sascha@998: } sascha@998: catch (IOException ioe) { sascha@998: log.error(ioe); sascha@998: } sascha@998: } sascha@998: } sascha@998: System.exit(0); sascha@998: } sascha@998: } sascha@998: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :