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
