// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.core; import java.util.logging.ConsoleHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import org.openstreetmap.osmosis.core.cli.CommandLineParser; import org.openstreetmap.osmosis.core.pipeline.common.Pipeline; /** * The main entry point for the command line application. * * @author Brett Henderson */ public final class Osmosis { private static final Logger LOG = Logger.getLogger(Osmosis.class.getName()); /** * This class cannot be instantiated. */ private Osmosis() { } /** * The entry point to the application. * * @param args * The command line arguments. */ public static void main(String[] args) { try { run(args); System.exit(0); } catch (Throwable t) { LOG.log(Level.SEVERE, "Execution aborted.", t); } System.exit(1); } /** * This contains the real functionality of the main method. It is kept * separate to allow the application to be invoked within other applications * without a System.exit being called. * <p> * Typically an application shouldn't directly invoke this method, it should * instantiate its own pipeline. * * @param args * The command line arguments. */ public static void run(String[] args) { CommandLineParser commandLineParser; TaskRegistrar taskRegistrar; Pipeline pipeline; long startTime; long finishTime; startTime = System.currentTimeMillis(); configureLoggingConsole(); commandLineParser = new CommandLineParser(); // Parse the command line arguments into a consumable form. commandLineParser.parse(args); // Configure the new logging level. configureLoggingLevel(commandLineParser.getLogLevelIndex()); LOG.info("Osmosis Version " + OsmosisConstants.VERSION); taskRegistrar = new TaskRegistrar(); taskRegistrar.initialize(commandLineParser.getPlugins()); pipeline = new Pipeline(taskRegistrar.getFactoryRegister()); LOG.info("Preparing pipeline."); pipeline.prepare(commandLineParser.getTaskInfoList()); LOG.info("Launching pipeline execution."); pipeline.execute(); LOG.info("Pipeline executing, waiting for completion."); pipeline.waitForCompletion(); LOG.info("Pipeline complete."); finishTime = System.currentTimeMillis(); LOG.info("Total execution time: " + (finishTime - startTime) + " milliseconds."); } /** * Configures logging to write all output to the console. */ private static void configureLoggingConsole() { Logger rootLogger; Handler consoleHandler; rootLogger = Logger.getLogger(""); // Remove any existing handlers. for (Handler handler : rootLogger.getHandlers()) { rootLogger.removeHandler(handler); } // Add a new console handler. consoleHandler = new ConsoleHandler(); consoleHandler.setLevel(Level.ALL); rootLogger.addHandler(consoleHandler); } /** * Configures the logging level. * * @param level * The index of the logging level to apply. */ private static void configureLoggingLevel(int logLevelIndex) { Logger rootLogger; rootLogger = Logger.getLogger(""); // Set the required logging level. rootLogger.setLevel(LogLevels.getLogLevel(logLevelIndex)); // Set spring logging to one level lower. Logger.getLogger("org.springframework").setLevel(LogLevels.getLogLevel(logLevelIndex - 1)); // Minimise the JPF logging. Logger.getLogger("org.java.plugin").setLevel(Level.WARNING); } }