| /******************************************************************************* |
| * Copyright (c) 2007, 2009 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.equinox.internal.app; |
| |
| import org.eclipse.osgi.service.environment.EnvironmentInfo; |
| |
| public class CommandLineArgs { |
| // obsolete command line args |
| private static final String NO_PACKAGE_PREFIXES = "-noPackagePrefixes"; //$NON-NLS-1$ |
| private static final String NO_UPDATE = "-noUpdate"; //$NON-NLS-1$ |
| private static final String BOOT = "-boot"; //$NON-NLS-1$ |
| private static final String CLASSLOADER_PROPERTIES = "-classloaderProperties"; //$NON-NLS-1$ |
| private static final String PLUGINS = "-plugins"; //$NON-NLS-1$ |
| private static final String FIRST_USE = "-firstUse"; //$NON-NLS-1$ |
| private static final String NEW_UPDATES = "-newUpdates"; //$NON-NLS-1$ |
| private static final String UPDATE = "-update"; //$NON-NLS-1$ |
| private static final String PASSWORD = "-password"; //$NON-NLS-1$ |
| private static final String KEYRING = "-keyring"; //$NON-NLS-1$ |
| private static final String PLUGIN_CUSTOMIZATION = "-pluginCustomization"; //$NON-NLS-1$ |
| |
| // supported command line args |
| private static final String PRODUCT = "-product"; //$NON-NLS-1$ |
| private static final String FEATURE = "-feature"; //$NON-NLS-1$ |
| private static final String APPLICATION = "-application"; //$NON-NLS-1$ |
| |
| // Command line args as seen by the Eclipse runtime. allArgs does NOT |
| // include args consumed by the underlying framework (e.g., OSGi) |
| private static String[] appArgs = new String[0]; |
| private static String[] allArgs = new String[0]; |
| private static String product; |
| private static String application; |
| |
| static String[] processCommandLine(EnvironmentInfo envInfo) { |
| String[] args = envInfo.getNonFrameworkArgs(); |
| if (args == null) |
| return args; |
| if (args.length == 0) |
| return args; |
| allArgs = args; |
| int[] configArgs = new int[args.length]; |
| //need to initialize the first element to something that could not be an index. |
| configArgs[0] = -1; |
| int configArgIndex = 0; |
| for (int i = 0; i < args.length; i++) { |
| boolean found = false; |
| // check for args without parameters (i.e., a flag arg) |
| |
| // consume obsolete args for compatibility |
| if (args[i].equalsIgnoreCase(CLASSLOADER_PROPERTIES)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(NO_PACKAGE_PREFIXES)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(PLUGINS)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(FIRST_USE)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(NO_UPDATE)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(NEW_UPDATES)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(UPDATE)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(BOOT)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(KEYRING)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(PASSWORD)) |
| found = true; // ignored |
| if (args[i].equalsIgnoreCase(PLUGIN_CUSTOMIZATION)) |
| found = true; // ignored |
| |
| // done checking obsolete for args. Remember where an arg was found |
| if (found) { |
| configArgs[configArgIndex++] = i; |
| // check if the obsolete arg had a second param |
| if (i < (args.length - 1) && !args[i + 1].startsWith("-")) //$NON-NLS-1$ |
| configArgs[configArgIndex++] = ++i; |
| continue; |
| } |
| |
| // check for args with parameters |
| if (i == args.length - 1 || args[i + 1].startsWith("-")) //$NON-NLS-1$ |
| continue; |
| String arg = args[++i]; |
| |
| // look for the product to run |
| // treat -feature as a synonym for -product for compatibility. |
| if (args[i - 1].equalsIgnoreCase(PRODUCT) || args[i - 1].equalsIgnoreCase(FEATURE)) { |
| product = arg; |
| envInfo.setProperty(EclipseAppContainer.PROP_PRODUCT, product); |
| found = true; |
| } |
| |
| // look for the application to run. |
| if (args[i - 1].equalsIgnoreCase(APPLICATION)) { |
| application = arg; |
| envInfo.setProperty(EclipseAppContainer.PROP_ECLIPSE_APPLICATION, application); |
| found = true; |
| } |
| |
| // done checking for args. Remember where an arg was found |
| if (found) { |
| configArgs[configArgIndex++] = i - 1; |
| configArgs[configArgIndex++] = i; |
| } |
| } |
| |
| // remove all the arguments consumed by this argument parsing |
| if (configArgIndex == 0) { |
| appArgs = args; |
| return args; |
| } |
| appArgs = new String[args.length - configArgIndex]; |
| configArgIndex = 0; |
| int j = 0; |
| for (int i = 0; i < args.length; i++) { |
| if (i == configArgs[configArgIndex]) |
| configArgIndex++; |
| else |
| appArgs[j++] = args[i]; |
| } |
| return appArgs; |
| } |
| |
| static String getApplication() { |
| return application; |
| } |
| |
| static String getProduct() { |
| return product; |
| } |
| |
| public static String[] getApplicationArgs() { |
| return appArgs; |
| } |
| |
| public static String[] getAllArgs() { |
| return allArgs; |
| } |
| } |