package net.jsunit; import net.jsunit.configuration.ConfigurationProperty; import net.jsunit.configuration.ConfigurationSource; import org.jdom.Document; import org.jdom.Element; import java.io.IOException; import java.net.URL; import java.util.Iterator; import java.util.List; import java.util.logging.Logger; public class RemoteConfigurationSource implements ConfigurationSource { private Logger logger = Logger.getLogger("net.jsunit"); private Document document; public RemoteConfigurationSource(RemoteServerHitter hitter, String remoteMachineURL) { try { document = hitter.hitURL(new URL(remoteMachineURL + "/config")); } catch (IOException e) { logger.severe("Could not retrieve configuration from remoteMachine URL " + remoteMachineURL); } } public boolean isInitialized() { return document != null; } public String browserFileNames() { return commaSeparatedTextOfChildrenOfElement(ConfigurationProperty.BROWSER_FILE_NAMES); } public String closeBrowsersAfterTestRuns() { return textOfElement(ConfigurationProperty.CLOSE_BROWSERS_AFTER_TEST_RUNS); } public String description() { return textOfElement(ConfigurationProperty.DESCRIPTION); } public String logsDirectory() { return textOfElement(ConfigurationProperty.LOGS_DIRECTORY); } public String port() { return textOfElement(ConfigurationProperty.PORT); } public String remoteMachineURLs() { return commaSeparatedTextOfChildrenOfElement(ConfigurationProperty.REMOTE_MACHINE_URLS); } public String resourceBase() { return textOfElement(ConfigurationProperty.RESOURCE_BASE); } public String timeoutSeconds() { return textOfElement(ConfigurationProperty.TIMEOUT_SECONDS); } public String url() { return textOfElement(ConfigurationProperty.URL); } public String ignoreUnresponsiveRemoteMachines() { return textOfElement(ConfigurationProperty.IGNORE_UNRESPONSIVE_REMOTE_MACHINES); } private String textOfElement(ConfigurationProperty property) { Element element = document.getRootElement().getChild(property.getName()); if (element == null) return ""; return element.getTextTrim(); } private String commaSeparatedTextOfChildrenOfElement(ConfigurationProperty property) { Element parent = document.getRootElement().getChild(property.getName()); if (parent == null) return ""; List<Element> children = parent.getChildren(); StringBuffer buffer = new StringBuffer(); for (Iterator<Element> it = children.iterator(); it.hasNext();) { Element child = it.next(); buffer.append(child.getTextTrim()); if (it.hasNext()) buffer.append(","); } return buffer.toString(); } }