package net.jsunit; import net.jsunit.configuration.Configuration; import net.jsunit.model.Browser; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class RemoteRunSpecification { private URL remoteBaseURL; private List<Browser> remoteBrowsers = new ArrayList<Browser>(); public RemoteRunSpecification(URL remoteBaseURL) { this.remoteBaseURL = remoteBaseURL; } public URL getRemoteMachineBaseURL() { return remoteBaseURL; } public URL buildFullURL(Configuration localConfiguration, String overrideURL) throws UnsupportedEncodingException, MalformedURLException { StringBuffer buffer = new StringBuffer(remoteBaseURL.toString()); buffer.append("/runner"); boolean hasFirstParameter = false; if (overrideURL != null) { buffer.append("?url=").append(URLEncoder.encode(overrideURL, "UTF-8")); hasFirstParameter = true; } else if (localConfiguration.getTestURL() != null) { buffer.append("?url=").append(URLEncoder.encode(localConfiguration.getTestURL().toString(), "UTF-8")); hasFirstParameter = true; } appendBrowserParametersToURL(buffer, hasFirstParameter); return new URL(buffer.toString()); } private void appendBrowserParametersToURL(StringBuffer buffer, boolean hasFirstParameter) { for (Browser browser : remoteBrowsers) { buffer.append(hasFirstParameter ? "&" : "?"); buffer.append("browserId=").append(browser.getId()); hasFirstParameter = true; } } public void addBrowser(Browser browser) { remoteBrowsers.add(browser); } public List<Browser> getRemoteBrowsers() { return remoteBrowsers; } public boolean isForAllBrowsers() { return remoteBrowsers.isEmpty(); } public String getDisplayString() { StringBuffer buffer = new StringBuffer(); buffer.append(remoteBaseURL).append(": "); if (isForAllBrowsers()) buffer.append("all browsers"); else for (Iterator<Browser> it = remoteBrowsers.iterator(); it.hasNext();) { Browser browser = it.next(); buffer.append(browser.getDisplayName()); if (it.hasNext()) buffer.append(", "); } return buffer.toString(); } public int getRemoteBrowserCount() { return remoteBrowsers.size(); } }