package net.jsunit.configuration;
import net.jsunit.model.Browser;
import net.jsunit.model.BrowserSource;
import net.jsunit.utility.SystemUtility;
import org.jdom.Element;
import java.io.File;
import java.net.URL;
import java.util.List;
public final class Configuration implements BrowserSource {
private List<Browser> browsers;
private boolean closeBrowsersAfterTestRuns;
private String description;
private boolean ignoreUnresponsiveRemoteMachines;
private File logsDirectory;
private int port;
private List<URL> remoteMachineURLs;
private File resourceBase;
private int timeoutSeconds;
private URL testURL;
public static Configuration resolve(String[] arguments) {
return new Configuration(resolveSource(arguments));
}
public static ConfigurationSource resolveSource(String[] arguments) {
return CompositeConfigurationSource.productionConfiguration(arguments);
}
public static ConfigurationSource resolveSource() {
return resolveSource(new String[]{});
}
public Configuration(ConfigurationSource source) {
for (ConfigurationProperty property : ConfigurationProperty.values())
property.configure(this, source);
}
public Element asXml(ServerType serverType) {
Element configurationElement = new Element("configuration");
configurationElement.setAttribute("type", serverType.name());
addSystemElementsTo(configurationElement);
for (ConfigurationProperty property : getRequiredAndOptionalConfigurationProperties(serverType))
property.addXmlTo(configurationElement, this);
return configurationElement;
}
private void addSystemElementsTo(Element element) {
Element osElement = new Element("os");
osElement.setText(SystemUtility.osString());
element.addContent(osElement);
Element ipAddressElement = new Element("ipAddress");
ipAddressElement.setText(SystemUtility.ipAddress());
element.addContent(ipAddressElement);
Element hostnameElement = new Element("hostname");
hostnameElement.setText(SystemUtility.hostname());
element.addContent(hostnameElement);
}
public List<ConfigurationProperty> getRequiredAndOptionalConfigurationProperties(ServerType serverType) {
return serverType.getRequiredAndOptionalConfigurationProperties();
}
public String[] asArgumentsArray() {
List<ConfigurationProperty> properties = ConfigurationProperty.all();
String[] arguments = new String[properties.size() * 2];
int i = 0;
for (ConfigurationProperty property : properties) {
arguments[i++] = "-" + property.getName();
arguments[i++] = property.getValueString(this);
}
return arguments;
}
public boolean isValidFor(ServerType type) {
return type.getPropertiesInvalidFor(this).isEmpty();
}
public String toString() {
return getDescription() == null ? super.toString() : getDescription();
}
public List<Browser> getBrowsers() {
return browsers;
}
public void setBrowsers(List<Browser> browsers) {
this.browsers = browsers;
}
public boolean shouldCloseBrowsersAfterTestRuns() {
return closeBrowsersAfterTestRuns;
}
public void setCloseBrowsersAfterTestRuns(boolean closeBrowsersAfterTestRuns) {
this.closeBrowsersAfterTestRuns = closeBrowsersAfterTestRuns;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean shouldIgnoreUnresponsiveRemoteMachines() {
return ignoreUnresponsiveRemoteMachines;
}
public void setIgnoreUnresponsiveRemoteMachines(boolean ignoreUnresponsiveRemoteMachines) {
this.ignoreUnresponsiveRemoteMachines = ignoreUnresponsiveRemoteMachines;
}
public File getLogsDirectory() {
return logsDirectory;
}
public void setLogsDirectory(File logsDirectory) {
this.logsDirectory = logsDirectory;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public List<URL> getRemoteMachineURLs() {
return remoteMachineURLs;
}
public void setRemoteMachineURLs(List<URL> remoteMachineURLs) {
this.remoteMachineURLs = remoteMachineURLs;
}
public File getResourceBase() {
return resourceBase;
}
public void setResourceBase(File resourceBase) {
this.resourceBase = resourceBase;
}
public int getTimeoutSeconds() {
return timeoutSeconds;
}
public void setTimeoutSeconds(int timeoutSeconds) {
this.timeoutSeconds = timeoutSeconds;
}
public URL getTestURL() {
return testURL;
}
public void setTestURL(URL url) {
this.testURL = url;
}
public Browser getBrowserById(int id) {
for (Browser browser : browsers)
if (browser.hasId(id))
return browser;
return null;
}
public URL getRemoteMachineURLById(int id) {
return getRemoteMachineURLs().get(id);
}
}