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: gernotbelger@9127: import java.io.File; gernotbelger@9127: import java.io.FileOutputStream; sascha@998: import java.io.IOException; sascha@998: import java.io.OutputStream; gernotbelger@8903: import java.net.MalformedURLException; gernotbelger@9127: import java.util.HashMap; gernotbelger@9127: import java.util.Map; sascha@998: sascha@998: import org.apache.log4j.Logger; gernotbelger@8903: import org.apache.log4j.PropertyConfigurator; gernotbelger@9232: import org.dive4elements.artifacts.CallContext; gernotbelger@8903: import org.dive4elements.artifacts.common.utils.Config; teichmann@5831: import org.dive4elements.artifacts.common.utils.XMLUtils; teichmann@5831: import org.dive4elements.river.artifacts.datacage.Recommendations; gernotbelger@9127: import org.dive4elements.river.backend.SessionFactoryProvider; gernotbelger@9127: import org.hibernate.Session; gernotbelger@9127: import org.slf4j.bridge.SLF4JBridgeHandler; gernotbelger@9127: import org.w3c.dom.Document; sascha@1015: gernotbelger@9127: public class App { 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"; sascha@1015: gernotbelger@9127: public static final String template = System.getProperty("meta.data.template", "meta-data.xml"); sascha@998: gernotbelger@9127: public static final String userId = System.getProperty("user.id"); sascha@998: gernotbelger@9127: public static final String PARAMETERS = System.getProperty("meta.data.parameters", ""); gernotbelger@9127: gernotbelger@9127: public static final String OUTPUT = System.getProperty("meta.data.output"); sascha@998: sascha@998: public static Map getParameters() { gernotbelger@9127: final HashMap map = new HashMap<>(); gernotbelger@9127: final String[] parts = PARAMETERS.split("\\s*;\\s*"); gernotbelger@9127: for (final String part : parts) { gernotbelger@9127: final String[] kv = part.split("\\s*:\\s*"); sascha@998: if (kv.length < 2 || (kv[0] = kv[0].trim()).length() == 0) { sascha@998: continue; sascha@998: } gernotbelger@9127: final 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@9127: final File configDir = Config.getConfigDirectory(); gernotbelger@9127: final 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@9127: catch (final MalformedURLException mue) { gernotbelger@8903: mue.printStackTrace(System.err); gernotbelger@8903: } gernotbelger@8903: } gernotbelger@8903: } gernotbelger@9127: gernotbelger@9127: public static void main(final String[] args) { sascha@998: gernotbelger@8903: configureLogging(); gernotbelger@9127: gernotbelger@9127: final Recommendations rec = Recommendations.createRecommendations(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@8927: // REMARK/TODO: 'ARTIFACT-OUTS' needs a String-Array, should be handled by parser 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: gernotbelger@9127: final Session session = SessionFactoryProvider.createSessionFactory().openSession(); sascha@998: sascha@998: try { gernotbelger@9232: final CallContext context = null; gernotbelger@9232: rec.recommend(parameters, userId, result, session, context); gernotbelger@9127: } 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; gernotbelger@9127: } else { sascha@998: try { sascha@998: out = new FileOutputStream(OUTPUT); sascha@998: } gernotbelger@9127: catch (final 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@9127: catch (final IOException e) { gernotbelger@8903: log.error(e); gernotbelger@9127: } finally { sascha@998: if (OUTPUT != null) { sascha@998: try { sascha@998: out.close(); sascha@998: } gernotbelger@9127: catch (final 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 :