Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(656)

Side by Side Diff: frontend/client/src/autotest/afe/TestSelector.java

Issue 3541002: Revert "Merge remote branch 'cros/upstream' into tempbranch2" (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/autotest.git
Patch Set: Created 10 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 package autotest.afe; 1 package autotest.afe;
2 2
3 import autotest.common.JSONArrayList; 3 import autotest.common.JSONArrayList;
4 import autotest.common.StaticDataRepository; 4 import autotest.common.StaticDataRepository;
5 import autotest.common.Utils; 5 import autotest.common.Utils;
6 import autotest.common.table.DataTable; 6 import autotest.common.table.DataTable;
7 import autotest.common.table.SelectionManager;
8 import autotest.common.table.TableClickWidget;
7 import autotest.common.table.DataTable.DataTableListener; 9 import autotest.common.table.DataTable.DataTableListener;
8 import autotest.common.table.DataTable.TableWidgetFactory; 10 import autotest.common.table.DataTable.TableWidgetFactory;
9 import autotest.common.table.SelectionManager;
10 import autotest.common.table.SelectionManager.SelectionListener; 11 import autotest.common.table.SelectionManager.SelectionListener;
11 import autotest.common.table.TableClickWidget;
12 import autotest.common.ui.SimplifiedList;
13 12
14 import com.google.gwt.event.dom.client.ChangeEvent; 13 import com.google.gwt.event.dom.client.ChangeEvent;
15 import com.google.gwt.event.dom.client.ChangeHandler; 14 import com.google.gwt.event.dom.client.ChangeHandler;
16 import com.google.gwt.json.client.JSONArray; 15 import com.google.gwt.json.client.JSONArray;
17 import com.google.gwt.json.client.JSONObject; 16 import com.google.gwt.json.client.JSONObject;
18 import com.google.gwt.user.client.ui.Composite; 17 import com.google.gwt.user.client.ui.Composite;
19 import com.google.gwt.user.client.ui.HasHTML; 18 import com.google.gwt.user.client.ui.HTML;
19 import com.google.gwt.user.client.ui.HorizontalPanel;
20 import com.google.gwt.user.client.ui.HorizontalSplitPanel;
21 import com.google.gwt.user.client.ui.Label;
22 import com.google.gwt.user.client.ui.ListBox;
23 import com.google.gwt.user.client.ui.Panel;
24 import com.google.gwt.user.client.ui.VerticalPanel;
20 import com.google.gwt.user.client.ui.Widget; 25 import com.google.gwt.user.client.ui.Widget;
21 26
22 import java.util.ArrayList; 27 import java.util.ArrayList;
23 import java.util.Collection; 28 import java.util.Collection;
24 import java.util.HashMap; 29 import java.util.HashMap;
25 import java.util.List; 30 import java.util.List;
26 import java.util.Map; 31 import java.util.Map;
27 32
28 public class TestSelector extends Composite implements DataTableListener, Change Handler, 33 class TestSelector extends Composite implements DataTableListener, ChangeHandler ,
29 TableWidgetFactory, SelectionLis tener { 34 TableWidgetFactory, SelectionLis tener {
30 public static interface Display {
31 public SimplifiedList getTestTypeSelect();
32 public IDataTable getTestTable();
33 public ISelectionManager getTestSelection();
34 public HasHTML getTestInfo();
35 }
36
37 // TODO: Change DataTable to passive view, then get rid of this ad-hoc inter face
38 public static interface IDataTable {
39 public void setWidgetFactory(TableWidgetFactory widgetFactory);
40 public void addListener(DataTableListener listener);
41 public void clear();
42 public void addRow(JSONObject row);
43 public void refreshWidgets();
44
45 public static class DataTableImpl extends DataTable implements IDataTabl e {
46 public DataTableImpl(String[][] columns) {
47 super(columns);
48 }
49 }
50 }
51
52 // TODO: Change SelectionManager to use the DataTable passive view model, th en get rid of this
53 // ad-hoc interface
54 public static interface ISelectionManager {
55 public void deselectAll();
56 public Widget createWidget(int row, int cell, JSONObject rowObject);
57 public void addListener(SelectionListener listener);
58
59 public static class SelectionManagerImpl extends SelectionManager
60 implements ISelectionManager {
61 public SelectionManagerImpl(DataTable table, boolean selectOnlyOne) {
62 super(table, selectOnlyOne);
63 }
64
65 }
66 }
67
68 // control file types 35 // control file types
69 public static final String SERVER_TYPE = "Server"; 36 static final String SERVER_TYPE = "Server";
70 public static final String CLIENT_TYPE = "Client"; 37 static final String CLIENT_TYPE = "Client";
71 38
39 private static final String[][] testTableColumns = new String[][] {
40 {DataTable.WIDGET_COLUMN, ""},
41 {"name", "Test"},
42 };
43
72 public static interface TestSelectorListener { 44 public static interface TestSelectorListener {
73 /** 45 /**
74 * Called when a test is selected or deselected, or when the test type i s changed. 46 * Called when a test is selected or deselected, or when the test type i s changed.
75 */ 47 */
76 public void onTestSelectionChanged(); 48 public void onTestSelectionChanged();
77 } 49 }
78 50
79 private static class TestInfoBuilder { 51 private static class TestInfoBuilder {
80 private static final Map<String, String> timeMap = new HashMap<String, S tring>(); 52 private static final Map<String, String> timeMap = new HashMap<String, S tring>();
81 static { 53 static {
82 timeMap.put("SHORT", "less than 15 minutes"); 54 timeMap.put("SHORT", "less than 15 minutes");
83 timeMap.put("MEDIUM", "15 minutes to four hours"); 55 timeMap.put("MEDIUM", "15 minutes to four hours");
84 timeMap.put("LONG", "over four hours"); 56 timeMap.put("LONG", "over four hours");
85 } 57 }
86 58
87 private StringBuilder builder = new StringBuilder(); 59 private StringBuilder builder = new StringBuilder();
88 private JSONObject test; 60 private JSONObject test;
89 61
90 public TestInfoBuilder(JSONObject test) { 62 public TestInfoBuilder(JSONObject test) {
91 this.test = test; 63 this.test = test;
92 64
93 writeTitleLine(); 65 writeTitleLine();
94 appendTextField("Written by", getField("author")); 66 appendTextField("Written by", getField("author"));
95 appendTextField("Type", getField("test_type")); 67 appendTextField("Type", getField("test_type"));
96 appendTextField("Synchronization count", getField("sync_count")); 68 appendTextField("Synchronization count", getField("sync_count"));
97 writeTime(); 69 writeTime();
98 writeSkipVerify(test); 70 writeSkipVerify(test);
99 71
100 builder.append("<br>" + getField("description")); 72 builder.append("<br>" + getField("description"));
101 } 73 }
102 74
103 private void writeTitleLine() { 75 private void writeTitleLine() {
104 builder.append("<b>" + getField("name") + "</b> "); 76 builder.append("<b>" + getField("name") + "</b> ");
105 builder.append("(" + 77 builder.append("(" +
106 getField("test_class") + " / " + getField("test_categ ory") + 78 getField("test_class") + " / " + getField("test_categ ory") +
107 ")<br><br>"); 79 ")<br><br>");
108 } 80 }
109 81
110 private void writeTime() { 82 private void writeTime() {
111 String time = getField("test_time"); 83 String time = getField("test_time");
112 String timeDetail = "unknown time"; 84 String timeDetail = "unknown time";
113 if (timeMap.containsKey(time)) { 85 if (timeMap.containsKey(time)) {
114 timeDetail = timeMap.get(time); 86 timeDetail = timeMap.get(time);
115 } 87 }
116 appendTextField("Time", time + " (" + timeDetail + ")"); 88 appendTextField("Time", time + " (" + timeDetail + ")");
117 } 89 }
118 90
119 private void writeSkipVerify(JSONObject test) { 91 private void writeSkipVerify(JSONObject test) {
120 if (!test.get("run_verify").isBoolean().booleanValue()) { 92 if (!test.get("run_verify").isBoolean().booleanValue()) {
121 builder.append("Verify is <b>not</b> run<br>"); 93 builder.append("Verify is <b>not</b> run<br>");
122 } 94 }
123 } 95 }
124 96
125 private void appendTextField(String name, String text) { 97 private void appendTextField(String name, String text) {
126 builder.append("<b>" + name + "</b>: " + text + "<br>"); 98 builder.append("<b>" + name + "</b>: " + text + "<br>");
127 } 99 }
128 100
129 private String getField(String field) { 101 private String getField(String field) {
130 return Utils.escape(Utils.jsonToString(test.get(field))); 102 return Utils.escape(Utils.jsonToString(test.get(field)));
131 } 103 }
132 104
133 public String getInfo() { 105 public String getInfo() {
134 return builder.toString(); 106 return builder.toString();
135 } 107 }
136 } 108 }
137 109
110 private ListBox testTypeSelect = new ListBox();
111 private DataTable testTable = new DataTable(testTableColumns);
112 private SelectionManager testSelection = new SelectionManager(testTable, fal se);
113 private HTML testInfo = new HTML("Click a test to view its description");
114 private HorizontalSplitPanel mainPanel = new HorizontalSplitPanel();
138 private boolean enabled = true; 115 private boolean enabled = true;
139 private TestSelectorListener listener; 116 private TestSelectorListener listener;
140 private StaticDataRepository staticData = StaticDataRepository.getRepository (); 117 private StaticDataRepository staticData = StaticDataRepository.getRepository ();
141 private List<JSONObject> selectedTests = new ArrayList<JSONObject>(); 118 private List<JSONObject> selectedTests = new ArrayList<JSONObject>();
142 119
143 private Display display; 120 public TestSelector() {
144 121 testInfo.setStyleName("test-description");
145 public void bindDisplay(Display display) { 122
146 this.display = display; 123 testTypeSelect.addItem(CLIENT_TYPE);
147 124 testTypeSelect.addItem(SERVER_TYPE);
148 display.getTestTypeSelect().addItem(CLIENT_TYPE, CLIENT_TYPE); 125 testTypeSelect.addChangeHandler(this);
149 display.getTestTypeSelect().addItem(SERVER_TYPE, SERVER_TYPE); 126
150 display.getTestTypeSelect().addChangeHandler(this); 127 testTable.fillParent();
151 128 testTable.setWidgetFactory(this);
152 display.getTestTable().setWidgetFactory(this); 129 testTable.setClickable(true);
153 display.getTestTable().addListener(this); 130 testTable.addListener(this);
154 131
132 Panel testTypePanel = new HorizontalPanel();
133 testTypePanel.add(new Label("Test type:"));
134 testTypePanel.add(testTypeSelect);
135
136 Panel testInfoPanel = new VerticalPanel();
137 testInfoPanel.add(testInfo);
138
139 mainPanel.setLeftWidget(testTable);
140 mainPanel.setRightWidget(testInfoPanel);
141 mainPanel.setSize("100%", "30em");
142 mainPanel.setSplitPosition("20em");
143
144 Panel container = new VerticalPanel();
145 container.add(testTypePanel);
146 container.add(mainPanel);
147 container.setWidth("100%");
148
155 populateTests(); 149 populateTests();
156 150
157 display.getTestSelection().addListener(this); 151 initWidget(container);
152
153 testSelection.addListener(this);
158 } 154 }
159 155
160 private void populateTests() { 156 private void populateTests() {
161 display.getTestSelection().deselectAll(); 157 testSelection.deselectAll();
162 display.getTestTable().clear(); 158 testTable.clear();
163 159
164 JSONArray tests = staticData.getData("tests").isArray(); 160 JSONArray tests = staticData.getData("tests").isArray();
165 for (JSONObject test : new JSONArrayList<JSONObject>(tests)) { 161 for (JSONObject test : new JSONArrayList<JSONObject>(tests)) {
166 if (!includeExperimentalTests() 162 if (!includeExperimentalTests()
167 && test.get("experimental").isBoolean().booleanValue()) { 163 && test.get("experimental").isBoolean().booleanValue()) {
168 continue; 164 continue;
169 } 165 }
170 String testType = test.get("test_type").isString().stringValue(); 166 String testType = test.get("test_type").isString().stringValue();
171 if (testType.equals(getSelectedTestType())) { 167 if (testType.equals(getSelectedTestType())) {
172 display.getTestTable().addRow(test); 168 testTable.addRow(test);
173 } 169 }
174 } 170 }
175 } 171 }
176 172
177 private boolean includeExperimentalTests() { 173 private boolean includeExperimentalTests() {
178 JSONObject user = staticData.getData("current_user").isObject(); 174 JSONObject user = staticData.getData("current_user").isObject();
179 return user.get("show_experimental").isBoolean().booleanValue(); 175 return user.get("show_experimental").isBoolean().booleanValue();
180 } 176 }
181 177
182 @Override 178 @Override
183 public void onRowClicked(int rowIndex, JSONObject row, boolean isRightClick) { 179 public void onRowClicked(int rowIndex, JSONObject row, boolean isRightClick) {
184 TestInfoBuilder builder = new TestInfoBuilder(row); 180 TestInfoBuilder builder = new TestInfoBuilder(row);
185 display.getTestInfo().setHTML(builder.getInfo()); 181 testInfo.setHTML(builder.getInfo());
186 } 182 }
187 183
188 @Override 184 @Override
189 public void onChange(ChangeEvent event) { 185 public void onChange(ChangeEvent event) {
190 populateTests(); 186 populateTests();
191 notifyListener(); 187 notifyListener();
192 } 188 }
193 189
194 public Collection<JSONObject> getSelectedTests() { 190 public Collection<JSONObject> getSelectedTests() {
195 return selectedTests; 191 return selectedTests;
196 } 192 }
197 193
198 public String getSelectedTestType() { 194 public String getSelectedTestType() {
199 return display.getTestTypeSelect().getSelectedName(); 195 return testTypeSelect.getItemText(testTypeSelect.getSelectedIndex());
200 } 196 }
201 197
202 public void setEnabled(boolean enabled) { 198 public void setEnabled(boolean enabled) {
203 this.enabled = enabled; 199 this.enabled = enabled;
204 display.getTestTypeSelect().setEnabled(enabled); 200 testTypeSelect.setEnabled(enabled);
205 display.getTestTable().refreshWidgets(); 201 testTable.refreshWidgets();
206 } 202 }
207 203
208 public Widget createWidget(int row, int cell, JSONObject rowObject) { 204 public Widget createWidget(int row, int cell, JSONObject rowObject) {
209 TableClickWidget widget = 205 TableClickWidget widget =
210 (TableClickWidget) display.getTestSelection().createWidget(row, cell , rowObject); 206 (TableClickWidget) testSelection.createWidget(row, cell, rowObject);
211 if (!enabled) { 207 if (!enabled) {
212 widget.getContainedWidget().setEnabled(false); 208 widget.getContainedWidget().setEnabled(false);
213 } 209 }
214 return widget; 210 return widget;
215 } 211 }
216 212
217 public void reset() { 213 public void reset() {
218 display.getTestTypeSelect().selectByName(CLIENT_TYPE); 214 testTypeSelect.setSelectedIndex(0);
219 populateTests(); 215 populateTests();
220 } 216 }
221 217
222 private void notifyListener() { 218 private void notifyListener() {
223 if (listener != null) { 219 if (listener != null) {
224 listener.onTestSelectionChanged(); 220 listener.onTestSelectionChanged();
225 } 221 }
226 } 222 }
227 223
228 public void setListener(TestSelectorListener listener) { 224 public void setListener(TestSelectorListener listener) {
229 this.listener = listener; 225 this.listener = listener;
230 } 226 }
231 227
232 public void onAdd(Collection<JSONObject> objects) { 228 public void onAdd(Collection<JSONObject> objects) {
233 selectedTests.addAll(objects); 229 selectedTests.addAll(objects);
234 notifyListener(); 230 notifyListener();
235 } 231 }
236 232
237 public void onRemove(Collection<JSONObject> objects) { 233 public void onRemove(Collection<JSONObject> objects) {
238 selectedTests.removeAll(objects); 234 selectedTests.removeAll(objects);
239 notifyListener(); 235 notifyListener();
240 } 236 }
241 } 237 }
OLDNEW
« no previous file with comments | « frontend/client/src/autotest/afe/ITextBox.java ('k') | frontend/client/src/autotest/afe/TestSelectorDisplay.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698