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

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

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