/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.start; import java.io.PrintStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; import de.rcenvironment.core.configuration.CommandLineArguments; import de.rcenvironment.core.start.common.Instance; import de.rcenvironment.core.start.common.InstanceRunner; import de.rcenvironment.core.toolkitbridge.api.StaticToolkitHolder; import de.rcenvironment.toolkit.modules.introspection.api.StatusCollectionService; /** * This class represents the default application. * * @author Sascha Zur * @author Robert Mischke */ public class Application implements IApplication { // note: when changing this message, check whether the Instance Management stdout listener needs backwards compatibility code private static final String STDOUT_MESSAGE_EARLY_STARTUP_COMPLETE = "Early startup complete, running main application"; private final Log log = LogFactory.getLog(getClass()); @Override public Object start(IApplicationContext context) throws Exception { org.eclipse.core.runtime.Platform.addLogListener(new EclipseLogListener()); // check command-line options for validity; TODO convert into validator? if (CommandLineArguments.hasConfigurationErrors()) { log.error("Error parsing command-line options; shutting down"); // no Eclipse return value for "error", so just terminate return IApplication.EXIT_OK; } Instance.setHeadless(CommandLineArguments.isHeadlessModeRequested()); Bundle currentBundle = FrameworkUtil.getBundle(getClass()); if (currentBundle != null) { log.debug("Running from common launcher bundle " + currentBundle); } else { throw new IllegalStateException("Internal error: Failed to get launcher bundle"); } final String instanceRunnerBundle; if (CommandLineArguments.isHeadlessModeRequested()) { instanceRunnerBundle = "de.rcenvironment.core.start.headless"; // / TODO check: what was this line for? - misc_ro // context.applicationRunning(); } else { instanceRunnerBundle = "de.rcenvironment.core.start.gui"; } for (Bundle bundle : currentBundle.getBundleContext().getBundles()) { if (instanceRunnerBundle.equals(bundle.getSymbolicName())) { log.debug("Starting specific launcher bundle " + bundle); bundle.start(); break; } } // working around the CheckStyle rule here as this is one of the few cases where StdOut is actually correct - misc_ro PrintStream sysOut = System.out; sysOut.println(STDOUT_MESSAGE_EARLY_STARTUP_COMPLETE); final StatusCollectionService statusCollectionService = StaticToolkitHolder.getService(StatusCollectionService.class); final String statusLineOutputIndent = " "; final String statusLineOutputSeparator = "\n"; log.debug(statusCollectionService.getCollectedDefaultStateInformation().asMultilineString( "Application state after early startup:", statusLineOutputIndent, statusLineOutputSeparator, null)); InstanceRunner instanceRunner = Instance.getInstanceRunner(); int runnerResult = instanceRunner.run(); return runnerResult; } @Override public void stop() { Instance.shutdown(); } }