Add a listener to the embedded spreadsheet, to open the full TKO results
interface upon click.

Signed-off-by: James Ren <[email protected]>

--- autotest/frontend/client/src/autotest/tko/EmbeddedSpreadsheetClient.java    
2010-06-09 11:05:26.000000000 -0700
+++ autotest/frontend/client/src/autotest/tko/EmbeddedSpreadsheetClient.java    
2010-06-09 11:05:26.000000000 -0700
@@ -3,9 +3,13 @@
 import autotest.common.JsonRpcCallback;
 import autotest.common.JsonRpcProxy;
 import autotest.common.spreadsheet.Spreadsheet;
+import autotest.common.spreadsheet.Spreadsheet.CellInfo;
+import autotest.common.spreadsheet.Spreadsheet.SpreadsheetListener;
+import autotest.tko.TkoSpreadsheetUtils.DrilldownType;
 
 import com.google.gwt.core.client.EntryPoint;
 import com.google.gwt.dom.client.Element;
+import com.google.gwt.http.client.URL;
 import com.google.gwt.json.client.JSONNumber;
 import com.google.gwt.json.client.JSONObject;
 import com.google.gwt.json.client.JSONValue;
@@ -15,8 +19,9 @@
 import com.google.gwt.user.client.ui.RootPanel;
 
 import java.util.Collections;
+import java.util.List;
 
-public class EmbeddedSpreadsheetClient implements EntryPoint {
+public class EmbeddedSpreadsheetClient implements EntryPoint, 
SpreadsheetListener {
     private static class SimpleHeaderField extends HeaderField {
         protected SimpleHeaderField(String name) {
             super(name, name);
@@ -24,7 +29,7 @@
 
         @Override
         public String getSqlCondition(String value) {
-            throw new UnsupportedOperationException("No SQL condition");
+            return getSimpleSqlCondition(name, value);
         }
     }
 
@@ -32,19 +37,30 @@
     public static final String COLUMN_HEADER = "test_name";
     private static final String NO_RESULTS = "There are no results for this 
query (yet?)";
 
+    public static final String DRILLDOWN_ROW_HEADER = "job_tag";
+    public static final String DRILLDOWN_COLUMN_HEADER = "subdir";
+
     private Label noResults = new Label(NO_RESULTS);
     private Spreadsheet spreadsheet = new Spreadsheet();
     private SpreadsheetDataProcessor spreadsheetProcessor =
             new SpreadsheetDataProcessor(spreadsheet);
+    private List<HeaderField> rowHeader =
+            Collections.singletonList((HeaderField) new 
SimpleHeaderField(ROW_HEADER));
+    private List<HeaderField> columnHeader =
+            Collections.singletonList((HeaderField) new 
SimpleHeaderField(COLUMN_HEADER));
+
+    private String afeJobIdStr;
+    private JSONObject condition;
 
     @Override
     public void onModuleLoad() {
         JsonRpcProxy.setDefaultBaseUrl(JsonRpcProxy.TKO_BASE_URL);
-        checkAndRender(Window.Location.getParameter("afe_job_id"));
+        afeJobIdStr = Window.Location.getParameter("afe_job_id");
+        checkAndRender();
     }
 
-    private void checkAndRender(String afeJobIdStr) {
-        final JSONObject condition = getFilterCondition(afeJobIdStr);
+    private void checkAndRender() {
+        condition = getFilterCondition(afeJobIdStr);
         if (condition == null) {
             showNoResults();
         }
@@ -85,11 +101,9 @@
 
     private void renderSpreadsheet(JSONObject condition) {
         
spreadsheetProcessor.setDataSource(TestGroupDataSource.getStatusCountDataSource());
-        spreadsheetProcessor.setHeaders(
-                Collections.singletonList(new SimpleHeaderField(ROW_HEADER)),
-                Collections.singletonList(new 
SimpleHeaderField(COLUMN_HEADER)),
-                new JSONObject());
+        spreadsheetProcessor.setHeaders(rowHeader, columnHeader, new 
JSONObject());
 
+        spreadsheet.setListener(this);
         RootPanel.get().add(spreadsheet);
         spreadsheetProcessor.refresh(condition, new Command() {
             public void execute() {
@@ -105,4 +119,54 @@
     private native void notifyParent(int width, int height) /*-{
         $wnd.parent.postMessage(width + 'px ' + height + 'px', '*');
     }-*/;
+
+    @Override
+    public void onCellClicked(CellInfo cellInfo, boolean isRightClick) {
+        TestSet testSet = TkoSpreadsheetUtils.getTestSet(
+                cellInfo, condition, rowHeader, columnHeader);
+
+        if (testSet.isSingleTest()) {
+            openTestDetailView(testSet.getTestIndex());
+        } else {
+            openSpreadsheetView(testSet.getPartialSqlCondition(),
+                    TkoSpreadsheetUtils.getDrilldownType(cellInfo));
+        }
+    }
+
+    private void openTestDetailView(int testIdx) {
+        openUrl("/new_tko/#tab_id=test_detail_view&object_id=" + testIdx);
+    }
+
+    private void openSpreadsheetView(String extraCondition, DrilldownType 
drilldownType) {
+        String drilldownPath;
+
+        switch (drilldownType) {
+        case DRILLDOWN_ROW:
+            drilldownPath = generatePath(DRILLDOWN_ROW_HEADER, COLUMN_HEADER, 
extraCondition);
+            break;
+        case DRILLDOWN_COLUMN:
+            drilldownPath = generatePath(ROW_HEADER, DRILLDOWN_COLUMN_HEADER, 
extraCondition);
+            break;
+        case DRILLDOWN_BOTH:
+            drilldownPath = generatePath(
+                    DRILLDOWN_ROW_HEADER, DRILLDOWN_COLUMN_HEADER, 
extraCondition);
+            break;
+        default:
+            throw new UnsupportedOperationException(
+                    "DrilldownType " + drilldownType + " not supported");
+        }
+
+        openUrl(drilldownPath);
+    }
+
+    private String generatePath(String rowHeader, String columnHeader, String 
extraCondition) {
+        String condition = "afe_job_id = " + afeJobIdStr + " AND " + 
extraCondition;
+
+        return "/new_tko/#tab_id=spreadsheet_view&row=" + rowHeader + 
"&column=" + columnHeader +
+                "&condition=" + URL.encodeComponent(condition, true) + 
"&show_incomplete=true";
+    }
+
+    private void openUrl(String url) {
+        Window.open(url, "_blank", null);
+    }
 }
--- autotest/frontend/client/src/autotest/tko/SpreadsheetDataProcessor.java     
2010-06-09 11:05:26.000000000 -0700
+++ autotest/frontend/client/src/autotest/tko/SpreadsheetDataProcessor.java     
2010-06-09 11:05:26.000000000 -0700
@@ -187,8 +187,7 @@
         onFinished.execute();
     }
 
-    public void setHeaders(List<? extends HeaderField> rowFields,
-                           List<? extends HeaderField> columnFields,
+    public void setHeaders(List<HeaderField> rowFields, List<HeaderField> 
columnFields,
                            JSONObject queryParameters) {
         this.rowFields = getHeaderSqlNames(rowFields);
         this.columnFields = getHeaderSqlNames(columnFields);
@@ -200,7 +199,7 @@
         dataSource.setQueryParameters(queryParameters);
     }
 
-    private Header getHeaderSqlNames(List<? extends HeaderField> fields) {
+    private Header getHeaderSqlNames(List<HeaderField> fields) {
         Header header = new HeaderImpl();
         for (HeaderField field : fields) {
             header.add(field.getSqlName());
--- autotest/frontend/client/src/autotest/tko/SpreadsheetView.java      
2010-06-09 11:05:26.000000000 -0700
+++ autotest/frontend/client/src/autotest/tko/SpreadsheetView.java      
2010-06-09 11:05:26.000000000 -0700
@@ -7,7 +7,6 @@
 import autotest.common.spreadsheet.Spreadsheet;
 import autotest.common.spreadsheet.SpreadsheetSelectionManager;
 import autotest.common.spreadsheet.Spreadsheet.CellInfo;
-import autotest.common.spreadsheet.Spreadsheet.Header;
 import autotest.common.spreadsheet.Spreadsheet.SpreadsheetListener;
 import autotest.common.ui.ContextMenu;
 import autotest.common.ui.NotifyManager;
@@ -17,6 +16,7 @@
 import autotest.tko.CommonPanel.CommonPanelListener;
 import autotest.tko.TableView.TableSwitchListener;
 import autotest.tko.TableView.TableViewConfig;
+import autotest.tko.TkoSpreadsheetUtils.DrilldownType;
 
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
@@ -58,8 +58,6 @@
     private static final String HISTORY_ROW = "row";
     private static final String HISTORY_CONTENT = "content";
 
-    private static enum DrilldownType {DRILLDOWN_ROW, DRILLDOWN_COLUMN, 
DRILLDOWN_BOTH}
-
     private static JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy();
     private static JsonRpcProxy afeRpcProxy = 
JsonRpcProxy.getProxy(JsonRpcProxy.AFE_BASE_URL);
     private TableSwitchListener listener;
@@ -157,8 +155,9 @@
 
         Window.addResizeHandler(new ResizeHandler() {
             public void onResize(ResizeEvent event) {
-                if(spreadsheet.isVisible())
+                if(spreadsheet.isVisible()) {
                     spreadsheet.fillWindow(true);
+                }
             }
         });
 
@@ -340,7 +339,7 @@
     public void onCellClicked(CellInfo cellInfo, boolean isRightClick) {
         Event event = Event.getCurrentEvent();
         TestSet testSet = getTestSet(cellInfo);
-        DrilldownType drilldownType = getDrilldownType(cellInfo);
+        DrilldownType drilldownType = 
TkoSpreadsheetUtils.getDrilldownType(cellInfo);
         if (isRightClick) {
             if (!selectionManager.isEmpty()) {
                 testSet = getTestSet(selectionManager.getSelectedCells());
@@ -367,41 +366,9 @@
         openHistoryToken(historyToken);
     }
 
-     private DrilldownType getDrilldownType(CellInfo cellInfo) {
-        if (cellInfo.row == null) {
-            // column header
-            return DrilldownType.DRILLDOWN_COLUMN;
-        }
-        if (cellInfo.column == null) {
-            // row header
-            return DrilldownType.DRILLDOWN_ROW;
-        }
-        return DrilldownType.DRILLDOWN_BOTH;
-    }
-
     private TestSet getTestSet(CellInfo cellInfo) {
-        boolean isSingleTest = cellInfo.testCount == 1;
-        if (isSingleTest) {
-            return new SingleTestSet(cellInfo.testIndex, 
getFullConditionArgs());
-        }
-
-        ConditionTestSet testSet = new 
ConditionTestSet(getFullConditionArgs());
-        if (cellInfo.row != null) {
-            setSomeFields(testSet, rowSelect.getSelectedItems(), cellInfo.row);
-        }
-        if (cellInfo.column != null) {
-            setSomeFields(testSet, columnSelect.getSelectedItems(), 
cellInfo.column);
-        }
-        return testSet;
-    }
-
-    private void setSomeFields(ConditionTestSet testSet, List<HeaderField> 
allFields,
-                               Header values) {
-        for (int i = 0; i < values.size(); i++) {
-            HeaderField field = allFields.get(i);
-            String value = values.get(i);
-            testSet.addCondition(field.getSqlCondition(value));
-        }
+        return TkoSpreadsheetUtils.getTestSet(cellInfo, getFullConditionArgs(),
+                rowSelect.getSelectedItems(), columnSelect.getSelectedItems());
     }
 
     private TestSet getTestSet(List<CellInfo> cells) {
--- /dev/null   2009-12-17 12:29:38.000000000 -0800
+++ autotest/frontend/client/src/autotest/tko/TkoSpreadsheetUtils.java  
2010-06-09 11:05:26.000000000 -0700
@@ -0,0 +1,50 @@
+package autotest.tko;
+
+import autotest.common.spreadsheet.Spreadsheet.CellInfo;
+import autotest.common.spreadsheet.Spreadsheet.Header;
+
+import com.google.gwt.json.client.JSONObject;
+
+import java.util.List;
+
+public class TkoSpreadsheetUtils {
+    public static enum DrilldownType {DRILLDOWN_ROW, DRILLDOWN_COLUMN, 
DRILLDOWN_BOTH}
+
+    public static TestSet getTestSet(CellInfo cellInfo, JSONObject condition,
+            List<HeaderField> rowFields, List<HeaderField> columnFields) {
+        boolean isSingleTest = cellInfo.testCount == 1;
+        if (isSingleTest) {
+            return new SingleTestSet(cellInfo.testIndex, condition);
+        }
+
+        ConditionTestSet testSet = new ConditionTestSet(condition);
+        if (cellInfo.row != null) {
+            setSomeFields(testSet, rowFields, cellInfo.row);
+        }
+        if (cellInfo.column != null) {
+            setSomeFields(testSet, columnFields, cellInfo.column);
+        }
+        return testSet;
+    }
+
+    private static void setSomeFields(ConditionTestSet testSet, 
List<HeaderField> allFields,
+            Header values) {
+        for (int i = 0; i < values.size(); i++) {
+            HeaderField field = allFields.get(i);
+            String value = values.get(i);
+            testSet.addCondition(field.getSqlCondition(value));
+        }
+    }
+
+    public static DrilldownType getDrilldownType(CellInfo cellInfo) {
+        if (cellInfo.row == null) {
+            // column header
+            return DrilldownType.DRILLDOWN_COLUMN;
+        }
+        if (cellInfo.column == null) {
+            // row header
+            return DrilldownType.DRILLDOWN_ROW;
+        }
+        return DrilldownType.DRILLDOWN_BOTH;
+    }
+}
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to