| /******************************************************************************* |
| * Copyright (c) 2011 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.stem.ui.launcher; |
| |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.equinox.app.IApplicationContext; |
| |
| /** |
| * Factory class to determine and return the correct |
| * STEM launcher implementation based on the application |
| * context and command line parameters. |
| */ |
| public class LauncherFactory |
| { |
| |
| /** |
| * Name of the extension points that plugins will register launchers into |
| */ |
| public static final String LAUNCHERS_EXTENSION_POINT_ID = "org.eclipse.stem.ui.launchers"; |
| |
| /** |
| * Parses command line arguments and returns the requested |
| * STEM launcher based on the arguments passed. |
| * |
| * Currently only supports the workbench and the headless launchers. |
| * |
| * @param context Eclipse Application Context |
| * @return Launcher to use for launching the STEM application |
| */ |
| public static Launcher getLauncher(IApplicationContext context) |
| { |
| // Parse the command line arugments |
| String[] args = (String[])context.getArguments().get("application.args"); |
| Map<String,List<String>> commandArgs = CommandArgumentParser.parse(args); |
| |
| // Find the correct launcher based on configuration |
| Launcher launcher = getLauncherFromExtensions(commandArgs); |
| if (launcher == null) { |
| launcher = new WorkbenchLauncher(); |
| } |
| |
| // Set the command line options |
| launcher.setContext(context); |
| launcher.setCommandArguments(commandArgs); |
| |
| return launcher; |
| } |
| |
| /** |
| * Finds the correct launcher based on command line inputs from the list of |
| * launchers provided by plugins. |
| * |
| * @param commandArgs |
| * @return |
| */ |
| private static Launcher getLauncherFromExtensions(Map<String,List<String>> commandArgs) |
| { |
| String launcherName = null; |
| if (commandArgs.containsKey("launcher") && commandArgs.get("launcher").size() > 0) { |
| launcherName = commandArgs.get("launcher").get(0); |
| } |
| |
| Launcher launcher = null; |
| IConfigurationElement[] extensions = Platform.getExtensionRegistry().getConfigurationElementsFor(LAUNCHERS_EXTENSION_POINT_ID); |
| for (IConfigurationElement e : extensions) { |
| try { |
| String name = e.getAttribute("name"); |
| if (name != null && (name.equals(launcherName) || commandArgs.containsKey(name))) { |
| launcher = (Launcher)e.createExecutableExtension("class"); |
| break; |
| } |
| } catch (Exception ce) { |
| // ignore, don't care |
| } |
| } |
| |
| return launcher; |
| } |
| } |