/*
* Copyright 2009 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.jstestdriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author jeremiele@google.com (Jeremie Lenfant-Engelmann)
*/
public class BrowserHunter {
private static final Logger logger =
LoggerFactory.getLogger(BrowserHunter.class.getName());
private static final String REMOTE_CONSOLE_RUNNER =
"/slave/%s/RemoteConsoleRunner%s.html";
private final CapturedBrowsers capturedBrowsers;
private final long browserTimeout;
public BrowserHunter(CapturedBrowsers capturedBrowsers, long browserTimeout) {
this.capturedBrowsers = capturedBrowsers;
this.browserTimeout = browserTimeout;
}
public SlaveBrowser captureBrowser(String name, String version, String os) {
return captureBrowser(capturedBrowsers.getUniqueId(), name, version, os);
}
public String getCaptureUrl(String id, String mode) {
return String.format(REMOTE_CONSOLE_RUNNER, id, mode);
}
/**
* Begins tracking a browser intheCpaturedBrowsers collection.
* @param rawId
* @param name
* @param version
* @param os
* @return
*/
public SlaveBrowser captureBrowser(String rawId, String name, String version, String os) {
BrowserInfo browserInfo = new BrowserInfo();
final Integer id = parseBrowserId(rawId);
browserInfo.setId(id);
browserInfo.setName(name);
browserInfo.setVersion(version);
browserInfo.setOs(os);
SlaveBrowser slave =
new SlaveBrowser(new TimeImpl(), id.toString(), browserInfo, browserTimeout);
capturedBrowsers.addSlave(slave);
logger.info("Browser Captured: {} version {} ({})", new Object[] {name, version, id});
return slave;
}
private Integer parseBrowserId(String id) {
if (id == null) {
return Integer.parseInt(capturedBrowsers.getUniqueId());
}
return Integer.valueOf(id);
}
public boolean isBrowserCaptured(String id) {
return capturedBrowsers.getBrowser(id) != null;
}
public void freeBrowser(String id) {
capturedBrowsers.removeSlave(id);
}
}