blob: 2c41eb24e33ef66f20d5610d8bb7c82e8c762f67 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.help.internal.standalone;
import java.io.File;
import java.util.*;
/**
* Options for starting stand alone help and infocenter.
*/
public class Options {
// debugging
private static boolean debug = false;
// use eclipse.exe
private static boolean useExe = true;
// Eclipse installation directory
private static File eclipseHome;
// workspace directory to be used by Eclipse
private static File workspace;
// Eclipse .lock file
private static File lockFile;
// .hostport file to obtain help server host and port from Eclipse help application
private static File hostPortFile;
// vm to use
private static String vm;
// arguments to pass to Eclipse
private static List vmArgs;
// arguments to pass to VM
private static List eclipseArgs;
// help command to execute
private static List helpCommand;
// host to override appserver preferences
private static String host;
// port to override appserver preferences
private static String port;
// time to wait for help system to start,
// before sending command is possible
private static int serverTimeout;
/**
* Initializes options.
* @param appId eclipse application id
* @param args array of String options and their values
* Option <code>-eclipseHome dir</code> specifies Eclipse
* installation directory.
* It must be provided, when current directory is not the same
* as Eclipse installation directory.
* Additionally, most options accepted by Eclipse execuable are supported.
*/
public static void init(String appId, String[] args) {
// convert array of arguments to a list
List list = new ArrayList();
for (int i = 0; i < args.length; i++) {
list.add(args[i]);
}
init(appId, list);
}
/**
* Initializes options.
* @param appId eclipse application id
* @param options list of options and their values
* Option <code>-eclipseHome dir</code> specifies Eclipse
* installation directory.
* It must be provided, when current directory is not the same
* as Eclipse installation directory.
* Additionally, most options accepted by Eclipse execuable are supported.
*/
public static void init(String appId, List options) {
// Initialize eclipseArgs with all passed options
eclipseArgs = new ArrayList();
eclipseArgs.addAll(options);
// consume -command option
helpCommand = extractOption(eclipseArgs, "-command");
if(helpCommand==null){
helpCommand=new ArrayList(0);
}
// read -debug option
if (getOption(eclipseArgs, "-debug") != null) {
debug = true;
System.out.println("Debugging is on.");
}
// consume -noexec option
if (extractOption(eclipseArgs, "-noexec") != null) {
useExe = false;
}
// consume -eclipsehome (accept eclipse_home too) option
List homes = extractOption(eclipseArgs, "-eclipseHome");
if (homes==null || homes.isEmpty()) {
homes = extractOption(eclipseArgs, "-eclipse_Home");
}
if (homes!=null && !homes.isEmpty()) {
eclipseHome = new File((String) homes.get(0));
} else {
eclipseHome = new File(System.getProperty("user.dir"));
}
// read -data option
List workspaces = getOption(eclipseArgs, "-data");
if (workspaces != null && !workspaces.isEmpty()) {
workspace = new File((String) workspaces.get(0));
} else {
workspace = new File(eclipseHome, "workspace");
}
lockFile = new File(workspace, "/.metadata/.lock");
hostPortFile = new File(workspace, "/.metadata/.connection");
// consume -host option
List hosts = extractOption(eclipseArgs, "-host");
if (hosts != null && hosts.size() > 0) {
host = (String) hosts.get(0);
}
// consume -port option
List ports = extractOption(eclipseArgs, "-port");
if (ports != null && ports.size() > 0) {
port = (String) ports.get(0);
}
// consume -servertimout option
serverTimeout = 0;
List timeouts = extractOption(eclipseArgs, "-servertimeout");
if (timeouts != null && timeouts.size() > 0) {
try {
int timeout = Integer.parseInt((String) timeouts.get(0));
if (timeout >= 0) {
serverTimeout = timeout;
}
} catch (NumberFormatException nfe) {
}
}
// consume -vm option
List vms = extractOption(eclipseArgs, "-vm");
if (vms != null && !vms.isEmpty()) {
vm = (String) vms.get(0);
} else {
String vmName = System.getProperty("java.vm.name");
String executable = "J9".equals(vmName) ? "j9" : "java";
if (System.getProperty("os.name").startsWith("Win")) {
executable += "w.exe";
}
vm =
System.getProperty("java.home")
+ File.separator
+ "bin"
+ File.separator
+ executable;
}
// consume -vmargs option
vmArgs=new ArrayList(0);
List passedVmArgs = extractOption(eclipseArgs, "-vmargs");
if (passedVmArgs!=null && passedVmArgs.size() > 0) {
vmArgs=passedVmArgs;
}
// modify the options for passing them to eclipse
// add -application option
extractOption(eclipseArgs, "-application");
eclipseArgs.add(0, "-application");
eclipseArgs.add(1, appId);
// add -nosplash option (prevent splash)
extractOption(eclipseArgs, "-showsplash");
extractOption(eclipseArgs, "-endsplash");
extractOption(eclipseArgs, "-nosplash");
eclipseArgs.add(0, "-nosplash");
// add server_host and/or port to -vmargs option
if (host != null || port != null) {
if (host != null) {
vmArgs.add("-Dserver_host=" + host);
}
if (port != null) {
vmArgs.add("-Dserver_port=" + port);
}
}
}
/**
* Returns true if debugging is enabled
*/
public static boolean isDebug() {
return debug;
}
public static File getConnectionFile() {
return hostPortFile;
}
public static File getLockFile() {
return lockFile;
}
public static File getEclipseHome() {
return eclipseHome;
}
public static File getWorkspace() {
return workspace;
}
public static List getHelpCommand() {
return helpCommand;
}
public static List getEclipseArgs() {
return eclipseArgs;
}
/**
* Returns the serverTimeout.
* @return number of seconds to wait for the server,
* 0 when not set, and default should be used
*/
public static int getServerTimeout() {
return serverTimeout;
}
/**
* Removes specified option and its list of values
* from a list of options
* @param optionName name of the option e.g. -data
* @return List of String values of the specified option,
* or null if option is not present
*/
private static List extractOption(List options, String optionName) {
List values = null;
for (int i = 0; i < options.size();) {
if (optionName.equalsIgnoreCase((String) options.get(i))) {
if (values == null) {
values = new ArrayList(1);
}
// found the option, remove option
options.remove(i);
while (i < options.size()) {
if (((String) options.get(i)).startsWith("-")
&& !"-vmargs".equals((String) options.get(i))) {
// start of next option
break;
}
// note, and remove option value
values.add(options.get(i));
options.remove(i);
}
} else {
i++;
}
}
return values;
}
/**
* Obtains specified option and its list of values
* from a list of options
* @param optionName name of the option e.g. -data
* @param options List of Eclipse options
* @return List of String values of the specified option,
* or null if option is not present
*/
private static List getOption(List options, String optionName) {
List values = null;
for (int i = 0; i < options.size(); i++) {
if (optionName.equalsIgnoreCase((String) options.get(i))) {
if (values == null) {
values = new ArrayList(1);
}
for (int j = i + 1; j < options.size(); j++) {
if (((String) options.get(j)).startsWith("-")
&& !"-vmargs".equals((String) options.get(j))) {
// start of next option
i = j;
break;
}
values.add(options.get(j));
}
}
}
return values;
}
public static String getVm() {
return vm;
}
public static List getVmArgs() {
return vmArgs;
}
/**
* Returns the useExe.
* @return boolean
*/
public static boolean useExe() {
return useExe;
}
}