blob: 89188bbe2557490c3f670099530803b9919e1284 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2015 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.help.internal.standalone;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* Options for starting stand alone help and infocenter.
*/
public class Options {
// Update command parameters' keys
public static final String PARAM_FEATUREID = "featureId"; //$NON-NLS-1$
public static final String PARAM_VERSION = "version"; //$NON-NLS-1$
public static final String PARAM_FROM = "from"; //$NON-NLS-1$
public static final String PARAM_TO = "to"; //$NON-NLS-1$
public static final String PARAM_VERIFYONLY = "verifyOnly"; //$NON-NLS-1$
// 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<String> vmArgs;
// arguments to pass to VM
private static List<String> eclipseArgs;
// help command to execute
private static List<String> helpCommand;
// host to override appserver preferences
private static String host;
// port to override appserver preferences
private static String port;
// User ID of the administrator
private static String adminId = null;
// Password of the administrator
private static String adminPassword = null;
// location of the trustStore to use if SSL
// connection must be established
private static String trustStoreLocation = null;
// password of the trustStore to use if SSL
// connection must be established
private static String trustStorePassword = null;
// update parameters, ex: "version=1.0.0", "from=file:///c:/site"
private static String[] updateParameters;
/**
* 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<String> list = new ArrayList<String>();
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<String> options) {
// Initialize eclipseArgs with all passed options
eclipseArgs = new ArrayList<String>();
eclipseArgs.addAll(options);
// consume -command option
helpCommand = extractOption(eclipseArgs, "-command"); //$NON-NLS-1$
if (helpCommand == null) {
helpCommand = new ArrayList<String>(0);
}
// consume update commands' parameters
List<String> parameters = new ArrayList<String>();
List<String> param = extractOption(eclipseArgs, "-" + PARAM_FEATUREID); //$NON-NLS-1$
if (param != null) {
parameters.add(PARAM_FEATUREID + "=" + param.get(0)); //$NON-NLS-1$
}
param = extractOption(eclipseArgs, "-" + PARAM_VERSION); //$NON-NLS-1$
if (param != null) {
parameters.add(PARAM_VERSION + "=" + param.get(0)); //$NON-NLS-1$
}
param = extractOption(eclipseArgs, "-" + PARAM_FROM); //$NON-NLS-1$
if (param != null) {
parameters.add(PARAM_FROM + "=" + param.get(0)); //$NON-NLS-1$
}
param = extractOption(eclipseArgs, "-" + PARAM_TO); //$NON-NLS-1$
if (param != null) {
parameters.add(PARAM_TO + "=" + param.get(0)); //$NON-NLS-1$
}
param = extractOption(eclipseArgs, "-" + PARAM_VERIFYONLY); //$NON-NLS-1$
if (param != null) {
parameters.add(PARAM_VERIFYONLY + "=" + param.get(0)); //$NON-NLS-1$
}
updateParameters = parameters.toArray(new String[parameters
.size()]);
// read -debug option
if (getOption(eclipseArgs, "-debug") != null) { //$NON-NLS-1$
debug = true;
System.out.println("Debugging is on."); //$NON-NLS-1$
}
// consume -noexec option
if (extractOption(eclipseArgs, "-noexec") != null) { //$NON-NLS-1$
useExe = false;
}
// consume -eclipsehome (accept eclipse_home too) option
List<String> homes = extractOption(eclipseArgs, "-eclipseHome"); //$NON-NLS-1$
if (homes == null || homes.isEmpty()) {
homes = extractOption(eclipseArgs, "-eclipse_Home"); //$NON-NLS-1$
}
if (homes != null && !homes.isEmpty()) {
eclipseHome = new File(homes.get(0));
} else {
eclipseHome = new File(System.getProperty("user.dir")); //$NON-NLS-1$
}
// read -data option
List<String> workspaces = extractOption(eclipseArgs, "-data"); //$NON-NLS-1$
if (workspaces != null && !workspaces.isEmpty()) {
String workspacePath = workspaces.get(0);
workspace = new File(workspacePath);
if (!workspace.isAbsolute()) {
workspace = new File(eclipseHome, workspacePath);
}
} else {
workspace = new File(eclipseHome, "workspace"); //$NON-NLS-1$
}
lockFile = new File(workspace, "/.metadata/.helplock"); //$NON-NLS-1$
hostPortFile = new File(workspace, "/.metadata/.connection"); //$NON-NLS-1$
// consume -host option
List<String> hosts = extractOption(eclipseArgs, "-host"); //$NON-NLS-1$
if (hosts != null && hosts.size() > 0) {
host = hosts.get(0);
}
// consume -port option
List<String> ports = extractOption(eclipseArgs, "-port"); //$NON-NLS-1$
if (ports != null && ports.size() > 0) {
port = ports.get(0);
}
// consume - adminId option
List<String> adminIds = extractOption(eclipseArgs, "-adminId"); //$NON-NLS-1$
if (adminIds != null && adminIds.size() > 0) {
adminId = adminIds.get(0);
}
// consume - admin option
List<String> adminPasswords = extractOption(eclipseArgs, "-adminPassword"); //$NON-NLS-1$
if (adminPasswords != null && adminPasswords.size() > 0) {
adminPassword = adminPasswords.get(0);
}
// consume - trustStoreLocation option
List<String> trustStoreLocations = extractOption(eclipseArgs, "-trustStoreLocation"); //$NON-NLS-1$
if (trustStoreLocations != null && trustStoreLocations.size() > 0) {
trustStoreLocation = trustStoreLocations.get(0);
}
// consume - trustStoreLocation option
List<String> trustStorePasswords = extractOption(eclipseArgs, "-trustStorePassword"); //$NON-NLS-1$
if (trustStorePasswords != null && trustStorePasswords.size() > 0) {
trustStorePassword = trustStorePasswords.get(0);
}
// consume -vm option
List<String> vms = extractOption(eclipseArgs, "-vm"); //$NON-NLS-1$
if (vms != null && !vms.isEmpty()) {
vm = vms.get(0);
} else {
String vmName = System.getProperty("java.vm.name"); //$NON-NLS-1$
String executable = "J9".equals(vmName) ? "j9" : "java"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if (System.getProperty("os.name").startsWith("Win")) { //$NON-NLS-1$ //$NON-NLS-2$
if (!debug) {
executable += "w.exe"; //$NON-NLS-1$
} else {
executable += ".exe"; //$NON-NLS-1$
}
}
vm = System.getProperty("java.home") //$NON-NLS-1$
+ File.separator + "bin" //$NON-NLS-1$
+ File.separator + executable;
}
// consume -vmargs option
vmArgs = new ArrayList<String>(0);
List<String> passedVmArgs = extractOption(eclipseArgs, "-vmargs"); //$NON-NLS-1$
if (passedVmArgs != null && passedVmArgs.size() > 0) {
vmArgs = passedVmArgs;
}
// modify the options for passing them to eclipse
// add -application option
eclipseArgs.add(0, "-data"); //$NON-NLS-1$
eclipseArgs.add(1, getWorkspace().getAbsolutePath());
extractOption(eclipseArgs, "-application"); //$NON-NLS-1$
eclipseArgs.add(0, "-application"); //$NON-NLS-1$
eclipseArgs.add(1, appId);
// add -nosplash option (prevent splash)
extractOption(eclipseArgs, "-showsplash"); //$NON-NLS-1$
extractOption(eclipseArgs, "-endsplash"); //$NON-NLS-1$
extractOption(eclipseArgs, "-nosplash"); //$NON-NLS-1$
eclipseArgs.add(0, "-nosplash"); //$NON-NLS-1$
// add server_host and/or port to -vmargs option
if (host != null || port != null) {
if (host != null) {
vmArgs.add("-Dserver_host=" + host); //$NON-NLS-1$
}
if (port != null) {
vmArgs.add("-Dserver_port=" + port); //$NON-NLS-1$
}
}
}
/**
* Returns true if debugging is enabled
*/
public static boolean isDebug() {
return debug;
}
public static String getAdminId() {
return adminId;
}
public static String getAdminPassword() {
return adminPassword;
}
public static String getTrustStoreLocation() {
return trustStoreLocation;
}
public static String getTrustStorePassword() {
return trustStorePassword;
}
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<String> getHelpCommand() {
return helpCommand;
}
public static String[] getUpdateParameters() {
return updateParameters;
}
public static List<String> getEclipseArgs() {
return eclipseArgs;
}
/**
* 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<String> extractOption(List<String> options, String optionName) {
List<String> values = null;
for (int i = 0; i < options.size();) {
if (optionName.equalsIgnoreCase(options.get(i))) {
if (values == null) {
values = new ArrayList<String>(1);
}
// found the option, remove option
options.remove(i);
// remove option parameters
while (i < options.size()) {
if (options.get(i).startsWith("-") //$NON-NLS-1$
&& !optionName.equals("-vmargs")) { //$NON-NLS-1$
// 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<String> getOption(List<String> options, String optionName) {
List<String> values = null;
for (int i = 0; i < options.size(); i++) {
if (optionName.equalsIgnoreCase(options.get(i))) {
if (values == null) {
values = new ArrayList<String>(1);
}
// read option parameters
for (int j = i + 1; j < options.size(); j++) {
if (options.get(j).startsWith("-") //$NON-NLS-1$
&& !optionName.equals("-vmargs")) { //$NON-NLS-1$
// start of next option
i = j;
break;
}
values.add(options.get(j));
}
}
}
return values;
}
public static String getVm() {
return vm;
}
public static List<String> getVmArgs() {
return vmArgs;
}
/**
* Returns the useExe.
*
* @return boolean
*/
public static boolean useExe() {
return useExe;
}
}