Package net.jsunit.server

Source Code of net.jsunit.server.RemoteRunSpecificationBuilder$RemoteRunSpecificationMerger

package net.jsunit.server;

import net.jsunit.InvalidBrowserSpecificationException;
import net.jsunit.RemoteRunSpecification;
import net.jsunit.configuration.RemoteConfiguration;
import net.jsunit.model.Browser;
import net.jsunit.model.BrowserSpecification;
import net.jsunit.model.RemoteServerConfigurationSource;

import java.net.URL;
import java.util.*;

public class RemoteRunSpecificationBuilder {

    public RemoteRunSpecification forSingleRemoteBrowser(URL url, Browser remoteBrowser) {
        RemoteRunSpecification result = new RemoteRunSpecification(url);
        result.addBrowser(remoteBrowser);
        return result;
    }

    public List<RemoteRunSpecification> forAllBrowsersFromRemoteConfigurations(List<RemoteConfiguration> remoteConfigurations) {
        List<RemoteRunSpecification> result = new ArrayList<RemoteRunSpecification>();
        for (RemoteConfiguration remoteConfiguration : remoteConfigurations)
            result.add(new RemoteRunSpecification(remoteConfiguration.getRemoteURL()));
        return result;
    }

    public List<RemoteRunSpecification> forIdStringPairs(String[] pairs, RemoteServerConfigurationSource source)
            throws InvalidBrowserSpecificationException {
        RemoteRunSpecificationMerger merger = new RemoteRunSpecificationMerger();
        for (String pair : pairs) {
            String[] ids = pair.split("_");
            int urlId;
            int browserId;
            try {
                urlId = Integer.parseInt(ids[0]);
                browserId = Integer.parseInt(ids[1]);
            } catch (Exception e) {
                return throwInvalidRemoteMachineBrowserCombinationException(ids, pair);
            }
            RemoteConfiguration configuration;
            try {
                configuration = source.getRemoteMachineConfigurationById(urlId);
            } catch (Exception e) {
                throw new InvalidBrowserSpecificationException(ids[0], ids[1]);
            }
            Browser browser = configuration.getBrowserById(browserId);
            if (browser == null)
                throw new InvalidBrowserSpecificationException(ids[0], ids[1]);
            merger.add(configuration.getRemoteURL(), browser);
        }
        return merger.getResult();
    }

    private List<RemoteRunSpecification> throwInvalidRemoteMachineBrowserCombinationException(String[] ids, String pair) throws InvalidBrowserSpecificationException {
        if (ids.length == 2)
            throw new InvalidBrowserSpecificationException(ids[0], ids[1]);
        else
            throw new InvalidBrowserSpecificationException(pair);
    }

    public List<RemoteRunSpecification> forAllBrowsersFromRemoteURLs(List<URL> remoteMachineURLs) {
        List<RemoteRunSpecification> result = new ArrayList<RemoteRunSpecification>();
        for (URL url : remoteMachineURLs)
            result.add(new RemoteRunSpecification(url));
        return result;
    }

    public List<RemoteRunSpecification> forAllBrowsersFromRemoteURLs(URL... remoteMachineURLs) {
        return forAllBrowsersFromRemoteURLs(Arrays.asList(remoteMachineURLs));
    }

    public List<RemoteRunSpecification> forBrowserSpecifications(List<BrowserSpecification> browserSpecs, List<RemoteConfiguration> allRemoteMachineConfigurations) throws InvalidBrowserSpecificationException {
        RemoteRunSpecificationMerger merger = new RemoteRunSpecificationMerger();
        for (BrowserSpecification specification : browserSpecs) {
            RemoteConfiguration remoteConfiguration = findRemoteConfigurationFor_in(specification, allRemoteMachineConfigurations);
            if (remoteConfiguration == null)
                throw new InvalidBrowserSpecificationException(specification.getBrowserType(), specification.getBrowserType());
            Browser browser = remoteConfiguration.getBrowserMatching(specification);
            if (browser == null)
                throw new InvalidBrowserSpecificationException(specification.getBrowserType(), specification.getBrowserType());
            merger.add(remoteConfiguration.getRemoteURL(), browser);
        }
        return merger.getResult();
    }
   
    private RemoteConfiguration findRemoteConfigurationFor_in(BrowserSpecification specification, List<RemoteConfiguration> remoteConfigurations) {
        for (RemoteConfiguration remoteConfiguration : remoteConfigurations) {
            if (specification.matches(remoteConfiguration))
                return remoteConfiguration;
        }
        return null;
    }

    static class RemoteRunSpecificationMerger {
        private Map<String, RemoteRunSpecification> urlToSpec = new HashMap<String, RemoteRunSpecification>();

        public void add(URL remoteURL, Browser browser) {
            RemoteRunSpecification specForURL = urlToSpec.get(remoteURL.toString());
            if (specForURL == null) {
                specForURL = new RemoteRunSpecification(remoteURL);
                urlToSpec.put(remoteURL.toString(), specForURL);
            }
            specForURL.addBrowser(browser);
        }

        public List<RemoteRunSpecification> getResult() {
            List<RemoteRunSpecification> result = new ArrayList<RemoteRunSpecification>(urlToSpec.values());
            Collections.sort(result, new Comparator<RemoteRunSpecification>() {
                public int compare(RemoteRunSpecification first, RemoteRunSpecification second) {
                    return first.getRemoteMachineBaseURL().toString().compareTo(second.getRemoteMachineBaseURL().toString());
                }
            });
            return result;
        }
    }

}
TOP

Related Classes of net.jsunit.server.RemoteRunSpecificationBuilder$RemoteRunSpecificationMerger

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.