blob: ddf3dba0bfa9b7bbd3b51f29693f008eabbbb9cd [file] [log] [blame]
/*******************************************************************************
* 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;
}
}