package autotest.tko;
import autotest.common.JsonRpcProxy;
import autotest.common.Utils;
import autotest.common.CustomHistory.HistoryToken;
import autotest.tko.TableView.TableSwitchListener;
import autotest.tko.TableView.TableViewConfig;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
import com.google.gwt.dom.client.Element;
public class EmbeddedTkoClient implements EntryPoint, TableSwitchListener {
private String autotestServerUrl;
private TestDetailView testDetailView; // we'll use this to generate history tokens
public void onModuleLoad() {
JsonRpcProxy.setDefaultBaseUrl(JsonRpcProxy.TKO_BASE_URL);
testDetailView = new TestDetailView();
injectNativeMethods();
}
/**
* Creates a global object named Autotest with the following methods. This objects acts as the
* entry point for externally-written native code to create embeddable widgets.
* * initialize(autoservServerUrl) -- must call this before anything else, passing in the URL
* to the Autotest server (i.e. "http://myhost").
* * createMetricsPlot(parent) -- returns a metrics plot object attached to the given parent
* element.
*/
private native void injectNativeMethods() /*-{
var instance = this;
$wnd.Autotest = {
initialize: function(autotestServerUrl) {
instance.@autotest.tko.EmbeddedTkoClient::initialize(Ljava/lang/String;)(autotestServerUrl);
},
createMetricsPlot: function(parent) {
return instance.@autotest.tko.EmbeddedTkoClient::createMetricsPlot(Lcom/google/gwt/dom/client/Element;)(parent);
}
}
}-*/;
@SuppressWarnings("unused") // called from native
private void initialize(String autotestServerUrl) {
this.autotestServerUrl = autotestServerUrl;
JsonRpcProxy proxy = JsonRpcProxy.createProxy(autotestServerUrl + JsonRpcProxy.TKO_BASE_URL,
true);
JsonRpcProxy.setProxy(JsonRpcProxy.TKO_BASE_URL, proxy);
}
@SuppressWarnings("unused") // called from native
private JavaScriptObject createMetricsPlot(Element parent) {
UncaughtExceptionHandler handler = GWT.getUncaughtExceptionHandler();
if (handler == null) {
return doCreateMetricsPlot(parent);
}
try {
return doCreateMetricsPlot(parent);
} catch (Throwable throwable) {
handler.onUncaughtException(throwable);
return null;
}
}
private JavaScriptObject doCreateMetricsPlot(Element parent) {
if (parent == null) {
throw new IllegalArgumentException("parent element cannot be null");
}
Plot plot = new MetricsPlot();
plot.setDrilldownTrigger();
plot.setListener(this);
parent.appendChild(plot.getElement());
return plot.getNativeProxy();
}
public HistoryToken getSelectTestHistoryToken(int testId) {
testDetailView.updateObjectId(Integer.toString(testId));
return testDetailView.getHistoryArguments();
}
public void onSelectTest(int testId) {
String fullUrl = autotestServerUrl + "/new_tko/#" + getSelectTestHistoryToken(testId);
Utils.openUrlInNewWindow(fullUrl);
}
public void onSwitchToTable(TableViewConfig config) {
throw new UnsupportedOperationException();
}
}