package com.thoughtworks.selenium.grid.remotecontrol;
import java.util.ArrayList;
import java.util.List;
/**
* Basic option parser for Self-Registering Selenium Remote Control.
*
* @author Philippe Hanrigou
*/
public class OptionParser {
public static class Options {
private String host;
private String port;
private String environment;
private String hubURL;
private final List<String> seleniumServerOptions;
protected Options() {
this.host = "localhost";
this.port = "5555";
this.environment = "*chrome";
this.hubURL = "http://localhost:4444";
this.seleniumServerOptions = new ArrayList<String>(10);
}
public String host() {
return host;
}
public String port() {
return port;
}
public String environment() {
return environment;
}
public String hubURL() {
return hubURL;
}
public List<String> seleniumServerOptions() {
return seleniumServerOptions;
}
public void setHost(String host) {
this.host = host;
}
public void setPort(String port) {
this.port = port;
}
public void setEnvironment(String environment) {
this.environment = environment;
}
public void setHubURL(String hubURL) {
this.hubURL = hubURL;
}
public String[] seleniumServerArgs() {
return seleniumServerOptions.toArray(new String[seleniumServerOptions.size()]);
}
}
protected Options parseOptions(String[] args) {
final Options options = new Options();
for (int i = 0; i < args.length; i++) {
if ("--help".equalsIgnoreCase(args[i])) {
usage(null);
System.exit(1);
} else if ("-host".equalsIgnoreCase(args[i])) {
options.setHost(args[++i]);
} else if ("-port".equalsIgnoreCase(args[i])) {
options.setPort(args[++i]);
} else if ("-env".equalsIgnoreCase(args[i])) {
options.setEnvironment(args[++i]);
} else if ("-hubURL".equalsIgnoreCase(args[i])) {
options.setHubURL(args[++i]);
} else {
options.seleniumServerOptions.add(args[i]);
}
}
options.seleniumServerOptions.add("-port");
options.seleniumServerOptions.add(options.port);
return options;
}
protected void usage(String msg) {
if (msg != null) {
println(msg + ":");
}
println("Usage: java -jar selenium-grid-remote-control*.jar -host <host> -port <port> -env <environment> -hubURL <url> [options]\n");
println("-port <nnnn>: the port number the selenium server should use (default 5555)");
println("-host <hostname>: hostname of the machine the selenium server is launched on (default localhost)");
println("-env <environment>: environment offered by this selenium server (default *chrome)");
println("-hubURL <url>: base url of the central Hub to register to (default http://localhost:4444)");
}
protected void println(String msg) {
System.err.println(msg);
}
}