Home | History | Annotate | Download | only in tko
      1 package autotest.tko;
      2 
      3 import autotest.common.JsonRpcProxy;
      4 import autotest.common.Utils;
      5 import autotest.common.CustomHistory.HistoryToken;
      6 import autotest.tko.TableView.TableSwitchListener;
      7 import autotest.tko.TableView.TableViewConfig;
      8 
      9 import com.google.gwt.core.client.EntryPoint;
     10 import com.google.gwt.core.client.GWT;
     11 import com.google.gwt.core.client.JavaScriptObject;
     12 import com.google.gwt.core.client.GWT.UncaughtExceptionHandler;
     13 import com.google.gwt.dom.client.Element;
     14 
     15 public class EmbeddedTkoClient implements EntryPoint, TableSwitchListener {
     16     private String autotestServerUrl;
     17     private TestDetailView testDetailView; // we'll use this to generate history tokens
     18 
     19     public void onModuleLoad() {
     20         JsonRpcProxy.setDefaultBaseUrl(JsonRpcProxy.TKO_BASE_URL);
     21         testDetailView = new TestDetailView();
     22         injectNativeMethods();
     23     }
     24 
     25     /**
     26      * Creates a global object named Autotest with the following methods.  This objects acts as the
     27      * entry point for externally-written native code to create embeddable widgets.
     28      * * initialize(autoservServerUrl) -- must call this before anything else, passing in the URL
     29      *   to the Autotest server (i.e. "http://myhost").
     30      * * createMetricsPlot(parent) -- returns a metrics plot object attached to the given parent
     31      *   element.
     32      */
     33     private native void injectNativeMethods() /*-{
     34         var instance = this;
     35         $wnd.Autotest = {
     36             initialize: function(autotestServerUrl) {
     37                 instance. (at) autotest.tko.EmbeddedTkoClient::initialize(Ljava/lang/String;)(autotestServerUrl);
     38             },
     39 
     40             createMetricsPlot: function(parent) {
     41                 return instance. (at) autotest.tko.EmbeddedTkoClient::createMetricsPlot(Lcom/google/gwt/dom/client/Element;)(parent);
     42             }
     43         }
     44     }-*/;
     45 
     46     @SuppressWarnings("unused") // called from native
     47     private void initialize(String autotestServerUrl) {
     48         this.autotestServerUrl = autotestServerUrl;
     49         JsonRpcProxy proxy = JsonRpcProxy.createProxy(autotestServerUrl + JsonRpcProxy.TKO_BASE_URL,
     50                                                       true);
     51         JsonRpcProxy.setProxy(JsonRpcProxy.TKO_BASE_URL, proxy);
     52     }
     53 
     54     @SuppressWarnings("unused") // called from native
     55     private JavaScriptObject createMetricsPlot(Element parent) {
     56         UncaughtExceptionHandler handler = GWT.getUncaughtExceptionHandler();
     57         if (handler == null) {
     58             return doCreateMetricsPlot(parent);
     59         }
     60 
     61         try {
     62             return doCreateMetricsPlot(parent);
     63         } catch (Throwable throwable) {
     64             handler.onUncaughtException(throwable);
     65             return null;
     66         }
     67     }
     68 
     69     private JavaScriptObject doCreateMetricsPlot(Element parent) {
     70         if (parent == null) {
     71             throw new IllegalArgumentException("parent element cannot be null");
     72         }
     73         Plot plot = new MetricsPlot();
     74         plot.setDrilldownTrigger();
     75         plot.setListener(this);
     76         parent.appendChild(plot.getElement());
     77         return plot.getNativeProxy();
     78     }
     79 
     80     public HistoryToken getSelectTestHistoryToken(int testId) {
     81         testDetailView.updateObjectId(Integer.toString(testId));
     82         return testDetailView.getHistoryArguments();
     83     }
     84 
     85     public void onSelectTest(int testId) {
     86         String fullUrl = autotestServerUrl + "/new_tko/#" + getSelectTestHistoryToken(testId);
     87         Utils.openUrlInNewWindow(fullUrl);
     88     }
     89 
     90     public void onSwitchToTable(TableViewConfig config) {
     91         throw new UnsupportedOperationException();
     92     }
     93 }
     94