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

Side by Side Diff: frontend/client/src/autotest/afe/create/CreateJobViewPresenter.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.create;
2 2
3 import autotest.afe.AfeUtils;
4 import autotest.afe.CheckBoxPanel;
5 import autotest.afe.ControlTypeSelect;
6 import autotest.afe.HostSelector;
7 import autotest.afe.IButton;
8 import autotest.afe.ICheckBox;
9 import autotest.afe.ITextArea;
10 import autotest.afe.ITextBox;
11 import autotest.afe.TestSelector;
3 import autotest.afe.TestSelector.TestSelectorListener; 12 import autotest.afe.TestSelector.TestSelectorListener;
4 import autotest.afe.UserPreferencesView.UserPreferencesListener;
5 import autotest.common.JSONArrayList; 13 import autotest.common.JSONArrayList;
6 import autotest.common.JsonRpcCallback; 14 import autotest.common.JsonRpcCallback;
7 import autotest.common.JsonRpcProxy; 15 import autotest.common.JsonRpcProxy;
8 import autotest.common.SimpleCallback; 16 import autotest.common.SimpleCallback;
9 import autotest.common.StaticDataRepository; 17 import autotest.common.StaticDataRepository;
10 import autotest.common.Utils; 18 import autotest.common.Utils;
11 import autotest.common.ui.NotifyManager; 19 import autotest.common.ui.NotifyManager;
12 import autotest.common.ui.RadioChooser; 20 import autotest.common.ui.RadioChooser;
13 import autotest.common.ui.TabView; 21 import autotest.common.ui.SimplifiedList;
14 22
15 import com.google.gwt.event.dom.client.BlurEvent; 23 import com.google.gwt.event.dom.client.BlurEvent;
16 import com.google.gwt.event.dom.client.BlurHandler; 24 import com.google.gwt.event.dom.client.BlurHandler;
17 import com.google.gwt.event.dom.client.ChangeEvent; 25 import com.google.gwt.event.dom.client.ChangeEvent;
18 import com.google.gwt.event.dom.client.ChangeHandler; 26 import com.google.gwt.event.dom.client.ChangeHandler;
19 import com.google.gwt.event.dom.client.ClickEvent; 27 import com.google.gwt.event.dom.client.ClickEvent;
20 import com.google.gwt.event.dom.client.ClickHandler; 28 import com.google.gwt.event.dom.client.ClickHandler;
29 import com.google.gwt.event.dom.client.HasClickHandlers;
21 import com.google.gwt.event.dom.client.KeyCodes; 30 import com.google.gwt.event.dom.client.KeyCodes;
22 import com.google.gwt.event.dom.client.KeyPressEvent; 31 import com.google.gwt.event.dom.client.KeyPressEvent;
23 import com.google.gwt.event.dom.client.KeyPressHandler; 32 import com.google.gwt.event.dom.client.KeyPressHandler;
24 import com.google.gwt.event.logical.shared.CloseEvent; 33 import com.google.gwt.event.logical.shared.CloseEvent;
25 import com.google.gwt.event.logical.shared.CloseHandler; 34 import com.google.gwt.event.logical.shared.CloseHandler;
35 import com.google.gwt.event.logical.shared.HasCloseHandlers;
36 import com.google.gwt.event.logical.shared.HasOpenHandlers;
26 import com.google.gwt.event.logical.shared.OpenEvent; 37 import com.google.gwt.event.logical.shared.OpenEvent;
27 import com.google.gwt.event.logical.shared.OpenHandler; 38 import com.google.gwt.event.logical.shared.OpenHandler;
28 import com.google.gwt.json.client.JSONArray; 39 import com.google.gwt.json.client.JSONArray;
29 import com.google.gwt.json.client.JSONBoolean; 40 import com.google.gwt.json.client.JSONBoolean;
30 import com.google.gwt.json.client.JSONNull; 41 import com.google.gwt.json.client.JSONNull;
31 import com.google.gwt.json.client.JSONNumber; 42 import com.google.gwt.json.client.JSONNumber;
32 import com.google.gwt.json.client.JSONObject; 43 import com.google.gwt.json.client.JSONObject;
33 import com.google.gwt.json.client.JSONString; 44 import com.google.gwt.json.client.JSONString;
34 import com.google.gwt.json.client.JSONValue; 45 import com.google.gwt.json.client.JSONValue;
35 import com.google.gwt.user.client.DOM; 46 import com.google.gwt.user.client.DOM;
36 import com.google.gwt.user.client.Window; 47 import com.google.gwt.user.client.Window;
37 import com.google.gwt.user.client.ui.Anchor;
38 import com.google.gwt.user.client.ui.Button;
39 import com.google.gwt.user.client.ui.CheckBox;
40 import com.google.gwt.user.client.ui.Composite;
41 import com.google.gwt.user.client.ui.DisclosurePanel; 48 import com.google.gwt.user.client.ui.DisclosurePanel;
42 import com.google.gwt.user.client.ui.FlexTable; 49 import com.google.gwt.user.client.ui.HasText;
43 import com.google.gwt.user.client.ui.HorizontalPanel; 50 import com.google.gwt.user.client.ui.HasValue;
44 import com.google.gwt.user.client.ui.Label;
45 import com.google.gwt.user.client.ui.ListBox;
46 import com.google.gwt.user.client.ui.Panel;
47 import com.google.gwt.user.client.ui.RadioButton;
48 import com.google.gwt.user.client.ui.TextArea;
49 import com.google.gwt.user.client.ui.TextBox;
50 import com.google.gwt.user.client.ui.VerticalPanel;
51 51
52 import java.util.ArrayList; 52 import java.util.ArrayList;
53 import java.util.HashMap; 53 import java.util.HashMap;
54 import java.util.List; 54 import java.util.List;
55 import java.util.Map; 55 import java.util.Map;
56 56
57 public class CreateJobView extends TabView 57 public class CreateJobViewPresenter implements TestSelectorListener {
58 implements TestSelectorListener, UserPreferencesListe ner { 58 public static interface Display {
59 public static final int TEST_COLUMNS = 5; 59 public CheckBoxPanel.Display getCheckBoxPanelDisplay();
60 public ControlTypeSelect.Display getControlTypeSelectDisplay();
61 public TestSelector.Display getTestSelectorDisplay();
62 public IButton getEditControlButton();
63 public HasText getJobName();
64 public SimplifiedList getPriorityList();
65 public HasText getTimeout();
66 public HasText getMaxRuntime();
67 public HasText getEmailList();
68 public ICheckBox getSkipVerify();
69 public RadioChooser.Display getRebootBefore();
70 public RadioChooser.Display getRebootAfter();
71 public HasValue<Boolean> getParseFailedRepair();
72 public ICheckBox getHostless();
73 public HostSelector.Display getHostSelectorDisplay();
74 public SimplifiedList getDroneSet();
75 public ITextBox getSynchCountInput();
76 public ITextArea getControlFile();
77 public void setControlFilePanelOpen(boolean isOpen);
78 public ICheckBox getRunNonProfiledIteration();
79 public ITextBox getKernel();
80 public ITextBox getKernelCmdline();
81 public HasText getViewLink();
82 public HasCloseHandlers<DisclosurePanel> getControlFilePanelClose();
83 public HasOpenHandlers<DisclosurePanel> getControlFilePanelOpen();
84 public IButton getSubmitJobButton();
85 public HasClickHandlers getCreateTemplateJobButton();
86 public HasClickHandlers getResetButton();
87 }
60 88
61 protected static final String EDIT_CONTROL_STRING = "Edit control file"; 89 private static final String EDIT_CONTROL_STRING = "Edit control file";
62 protected static final String UNEDIT_CONTROL_STRING= "Revert changes"; 90 private static final String UNEDIT_CONTROL_STRING= "Revert changes";
63 protected static final String VIEW_CONTROL_STRING = "View control file"; 91 private static final String VIEW_CONTROL_STRING = "View control file";
64 protected static final String HIDE_CONTROL_STRING = "Hide control file"; 92 private static final String HIDE_CONTROL_STRING = "Hide control file";
65 93
66 public interface JobCreateListener { 94 public interface JobCreateListener {
67 public void onJobCreated(int jobId); 95 public void onJobCreated(int jobId);
68 } 96 }
69 97
70 protected JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(); 98 private JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy();
71 protected JobCreateListener listener; 99 private JobCreateListener listener;
72 100
73 private static class CheckBoxPanel<T extends CheckBox> extends Composite { 101 private StaticDataRepository staticData = StaticDataRepository.getRepository ();
74 protected int numColumns;
75 protected FlexTable table = new FlexTable();
76 protected List<T> testBoxes = new ArrayList<T>();
77 102
78 public CheckBoxPanel(int columns) { 103 private CheckBoxPanel profilersPanel = new CheckBoxPanel();
79 numColumns = columns; 104 private ControlTypeSelect controlTypeSelect = new ControlTypeSelect();
80 initWidget(table); 105 protected TestSelector testSelector = new TestSelector();
81 } 106 private RadioChooser rebootBefore = new RadioChooser();
107 private RadioChooser rebootAfter = new RadioChooser();
108 private HostSelector hostSelector;
82 109
83 public void add(T checkBox) { 110 private boolean controlEdited = false;
84 int row = testBoxes.size() / numColumns; 111 private boolean controlReadyForSubmit = false;
85 int col = testBoxes.size() % numColumns; 112 private JSONArray dependencies = new JSONArray();
86 table.setWidget(row, col, checkBox);
87 testBoxes.add(checkBox);
88 }
89 113
90 public List<T> getChecked() { 114 private Display display;
91 List<T> result = new ArrayList<T>();
92 for(T checkBox : testBoxes) {
93 if (checkBox.getValue())
94 result.add(checkBox);
95 }
96 return result;
97 }
98 115
99 public void setEnabled(boolean enabled) { 116 public void bindDisplay(Display display) {
100 for(T thisBox : testBoxes) { 117 this.display = display;
101 thisBox.setEnabled(enabled);
102 }
103 }
104
105 public void reset() {
106 for (T thisBox : testBoxes) {
107 thisBox.setValue(false);
108 }
109 }
110 } 118 }
111 119
112 private static class ControlTypeSelect extends Composite { 120 public CreateJobViewPresenter(JobCreateListener listener) {
113 public static final String RADIO_GROUP = "controlTypeGroup";
114 protected RadioButton client, server;
115 protected Panel panel = new HorizontalPanel();
116
117 public ControlTypeSelect() {
118 client = new RadioButton(RADIO_GROUP, TestSelector.CLIENT_TYPE);
119 server = new RadioButton(RADIO_GROUP, TestSelector.SERVER_TYPE);
120 panel.add(client);
121 panel.add(server);
122 client.setValue(true); // client is default
123 initWidget(panel);
124
125 client.addClickHandler(new ClickHandler() {
126 public void onClick(ClickEvent event) {
127 onChanged();
128 }
129 });
130 server.addClickHandler(new ClickHandler() {
131 public void onClick(ClickEvent event) {
132 onChanged();
133 }
134 });
135 }
136
137 public String getControlType() {
138 if (client.getValue())
139 return client.getText();
140 return server.getText();
141 }
142
143 public void setControlType(String type) {
144 if (client.getText().equals(type))
145 client.setValue(true);
146 else if (server.getText().equals(type))
147 server.setValue(true);
148 else
149 throw new IllegalArgumentException("Invalid control type");
150 onChanged();
151 }
152
153 public void setEnabled(boolean enabled) {
154 client.setEnabled(enabled);
155 server.setEnabled(enabled);
156 }
157
158 protected void onChanged() {
159 }
160 }
161
162 protected StaticDataRepository staticData = StaticDataRepository.getReposito ry();
163
164 protected TextBox jobName = new TextBox();
165 protected ListBox priorityList = new ListBox();
166 protected TextBox kernel = new TextBox();
167 protected TextBox kernel_cmdline = new TextBox();
168 protected TextBox timeout = new TextBox();
169 private TextBox maxRuntime = new TextBox();
170 protected TextBox emailList = new TextBox();
171 protected CheckBox skipVerify = new CheckBox();
172 private RadioChooser rebootBefore = new RadioChooser();
173 private RadioChooser rebootAfter = new RadioChooser();
174 private CheckBox parseFailedRepair = new CheckBox();
175 private CheckBox hostless = new CheckBox();
176 protected TestSelector testSelector;
177 protected CheckBoxPanel<CheckBox> profilersPanel =
178 new CheckBoxPanel<CheckBox>(TEST_COLUMNS);
179 private CheckBox runNonProfiledIteration =
180 new CheckBox("Run each test without profilers first");
181 private ListBox droneSet = new ListBox();
182 protected TextArea controlFile = new TextArea();
183 protected DisclosurePanel controlFilePanel = new DisclosurePanel();
184 protected ControlTypeSelect controlTypeSelect;
185 protected TextBox synchCountInput = new TextBox();
186 protected Button editControlButton = new Button(EDIT_CONTROL_STRING);
187 protected HostSelector hostSelector;
188 protected Button submitJobButton = new Button("Submit Job");
189 protected Button createTemplateJobButton = new Button("Create Template Job") ;
190 private Button resetButton = new Button("Reset");
191
192 protected boolean controlEdited = false;
193 protected boolean controlReadyForSubmit = false;
194 private JSONArray dependencies = new JSONArray();
195
196 public CreateJobView(JobCreateListener listener) {
197 this.listener = listener; 121 this.listener = listener;
198 } 122 }
199 123
200 @Override
201 public String getElementId() {
202 return "create_job";
203 }
204
205 public void cloneJob(JSONValue cloneInfo) { 124 public void cloneJob(JSONValue cloneInfo) {
206 // reset() fires the TestSelectorListener, which will generate a new con trol file. We do 125 // reset() fires the TestSelectorListener, which will generate a new con trol file. We do
207 // no want this, so we'll stop listening to it for a bit. 126 // no want this, so we'll stop listening to it for a bit.
208 testSelector.setListener(null); 127 testSelector.setListener(null);
209 reset(); 128 reset();
210 testSelector.setListener(this); 129 testSelector.setListener(this);
211 130
212 disableInputs(); 131 disableInputs();
213 openControlFileEditor(); 132 openControlFileEditor();
214 JSONObject cloneObject = cloneInfo.isObject(); 133 JSONObject cloneObject = cloneInfo.isObject();
215 JSONObject jobObject = cloneObject.get("job").isObject(); 134 JSONObject jobObject = cloneObject.get("job").isObject();
216 135
217 jobName.setText(jobObject.get("name").isString().stringValue()); 136 display.getJobName().setText(jobObject.get("name").isString().stringValu e());
218 137
219 String priority = jobObject.get("priority").isString().stringValue(); 138 String priority = jobObject.get("priority").isString().stringValue();
220 for (int i = 0; i < priorityList.getItemCount(); i++) { 139 display.getPriorityList().selectByName(priority);
221 if (priorityList.getItemText(i).equals(priority)) {
222 priorityList.setSelectedIndex(i);
223 break;
224 }
225 }
226 140
227 timeout.setText(Utils.jsonToString(jobObject.get("timeout"))); 141 display.getTimeout().setText(Utils.jsonToString(jobObject.get("timeout") ));
228 maxRuntime.setText(Utils.jsonToString(jobObject.get("max_runtime_hrs"))) ; 142 display.getMaxRuntime().setText(Utils.jsonToString(jobObject.get("max_ru ntime_hrs")));
229 emailList.setText( 143 display.getEmailList().setText(
230 jobObject.get("email_list").isString().stringValue()); 144 jobObject.get("email_list").isString().stringValue());
231 145
232 skipVerify.setValue(!jobObject.get("run_verify").isBoolean().booleanValu e()); 146 display.getSkipVerify().setValue(!jobObject.get("run_verify").isBoolean( ).booleanValue());
233 rebootBefore.setSelectedChoice(Utils.jsonToString(jobObject.get("reboot_ before"))); 147 rebootBefore.setSelectedChoice(Utils.jsonToString(jobObject.get("reboot_ before")));
234 rebootAfter.setSelectedChoice(Utils.jsonToString(jobObject.get("reboot_a fter"))); 148 rebootAfter.setSelectedChoice(Utils.jsonToString(jobObject.get("reboot_a fter")));
235 parseFailedRepair.setValue( 149 display.getParseFailedRepair().setValue(
236 jobObject.get("parse_failed_repair").isBoolean().booleanValue()) ; 150 jobObject.get("parse_failed_repair").isBoolean().booleanValue()) ;
237 hostless.setValue(cloneObject.get("hostless").isBoolean().booleanValue() ); 151 display.getHostless().setValue(cloneObject.get("hostless").isBoolean().b ooleanValue());
238 if (hostless.getValue()) { 152 if (display.getHostless().getValue()) {
239 hostSelector.setEnabled(false); 153 hostSelector.setEnabled(false);
240 } 154 }
241 if (cloneObject.get("drone_set").isNull() == null) { 155 if (cloneObject.get("drone_set").isNull() == null) {
242 AfeUtils.setSelectedItem(droneSet, Utils.jsonToString(cloneObject.ge t("drone_set"))); 156 display.getDroneSet().selectByName(Utils.jsonToString(cloneObject.ge t("drone_set")));
243 } 157 }
244 158
245 controlTypeSelect.setControlType( 159 controlTypeSelect.setControlType(
246 jobObject.get("control_type").isString().stringValue()); 160 jobObject.get("control_type").isString().stringValue());
247 synchCountInput.setText(Utils.jsonToString(jobObject.get("synch_count")) ); 161 display.getSynchCountInput().setText(Utils.jsonToString(jobObject.get("s ynch_count")));
248 setSelectedDependencies(jobObject.get("dependencies").isArray()); 162 setSelectedDependencies(jobObject.get("dependencies").isArray());
249 controlFile.setText( 163 display.getControlFile().setText(
250 jobObject.get("control_file").isString().stringValue()); 164 jobObject.get("control_file").isString().stringValue());
251 controlReadyForSubmit = true; 165 controlReadyForSubmit = true;
252 166
253 JSONArray hostInfo = cloneObject.get("hosts").isArray(); 167 JSONArray hostInfo = cloneObject.get("hosts").isArray();
254 List<String> hostnames = new ArrayList<String>(); 168 List<String> hostnames = new ArrayList<String>();
255 for (JSONObject host : new JSONArrayList<JSONObject>(hostInfo)) { 169 for (JSONObject host : new JSONArrayList<JSONObject>(hostInfo)) {
256 hostnames.add(Utils.jsonToString(host.get("hostname"))); 170 hostnames.add(Utils.jsonToString(host.get("hostname")));
257 } 171 }
258 hostSelector.setSelectedHostnames(hostnames, true); 172 hostSelector.setSelectedHostnames(hostnames, true);
259 173
260 JSONObject metaHostCounts = cloneObject.get("meta_host_counts").isObject (); 174 JSONObject metaHostCounts = cloneObject.get("meta_host_counts").isObject ();
261 175
262 for (String label : metaHostCounts.keySet()) { 176 for (String label : metaHostCounts.keySet()) {
263 String number = Integer.toString( 177 String number = Integer.toString(
264 (int) metaHostCounts.get(label).isNumber().doubleValue()); 178 (int) metaHostCounts.get(label).isNumber().doubleValue());
265 hostSelector.addMetaHosts(label, number); 179 hostSelector.addMetaHosts(label, number);
266 } 180 }
267 181
268 hostSelector.refresh(); 182 hostSelector.refresh();
269 } 183 }
270 184
271 protected void openControlFileEditor() { 185 private void openControlFileEditor() {
272 controlFile.setReadOnly(false); 186 display.getControlFile().setReadOnly(false);
273 editControlButton.setText(UNEDIT_CONTROL_STRING); 187 display.getEditControlButton().setText(UNEDIT_CONTROL_STRING);
274 controlFilePanel.setOpen(true); 188 display.setControlFilePanelOpen(true);
275 controlTypeSelect.setEnabled(true); 189 controlTypeSelect.setEnabled(true);
276 synchCountInput.setEnabled(true); 190 display.getSynchCountInput().setEnabled(true);
277 editControlButton.setEnabled(true); 191 display.getEditControlButton().setEnabled(true);
278 } 192 }
279 193
280 protected void populatePriorities(JSONArray priorities) { 194 private void populatePriorities(JSONArray priorities) {
281 for(int i = 0; i < priorities.size(); i++) { 195 for(int i = 0; i < priorities.size(); i++) {
282 JSONArray priorityData = priorities.get(i).isArray(); 196 JSONArray priorityData = priorities.get(i).isArray();
283 String priority = priorityData.get(1).isString().stringValue(); 197 String priority = priorityData.get(1).isString().stringValue();
284 priorityList.addItem(priority); 198 display.getPriorityList().addItem(priority, priority);
285 } 199 }
286 200
287 resetPriorityToDefault(); 201 resetPriorityToDefault();
288 } 202 }
289 203
290 protected void resetPriorityToDefault() { 204 private void resetPriorityToDefault() {
291 JSONValue defaultValue = staticData.getData("default_priority"); 205 JSONValue defaultValue = staticData.getData("default_priority");
292 String defaultPriority = defaultValue.isString().stringValue(); 206 String defaultPriority = defaultValue.isString().stringValue();
293 for(int i = 0; i < priorityList.getItemCount(); i++) { 207 display.getPriorityList().selectByName(defaultPriority);
294 if (priorityList.getItemText(i).equals(defaultPriority))
295 priorityList.setSelectedIndex(i);
296 }
297 } 208 }
298 209
299 protected void populateProfilers() { 210 private void populateProfilers() {
300 JSONArray tests = staticData.getData("profilers").isArray(); 211 JSONArray tests = staticData.getData("profilers").isArray();
301 212
302 for(JSONObject profiler : new JSONArrayList<JSONObject>(tests)) { 213 for(JSONObject profiler : new JSONArrayList<JSONObject>(tests)) {
303 String name = profiler.get("name").isString().stringValue(); 214 String name = profiler.get("name").isString().stringValue();
304 CheckBox checkbox = new CheckBox(name); 215 ICheckBox checkbox = profilersPanel.generateCheckBox();
216 checkbox.setText(name);
305 checkbox.addClickHandler(new ClickHandler() { 217 checkbox.addClickHandler(new ClickHandler() {
306 public void onClick(ClickEvent event) { 218 public void onClick(ClickEvent event) {
307 updateNonProfiledRunControl(); 219 updateNonProfiledRunControl();
308 generateControlFile(false); 220 generateControlFile(false);
309 setInputsEnabled(); 221 setInputsEnabled();
310 } 222 }
311 }); 223 });
312 profilersPanel.add(checkbox); 224 profilersPanel.add(checkbox);
313 } 225 }
314 226
315 runNonProfiledIteration.addClickHandler(new ClickHandler() { 227 display.getRunNonProfiledIteration().addClickHandler(new ClickHandler() {
316 @Override 228 @Override
317 public void onClick(ClickEvent event) { 229 public void onClick(ClickEvent event) {
318 generateControlFile(false); 230 generateControlFile(false);
319 } 231 }
320 }); 232 });
321 // default to checked -- run a non-profiled iteration by default 233 // default to checked -- run a non-profiled iteration by default
322 runNonProfiledIteration.setValue(true); 234 display.getRunNonProfiledIteration().setValue(true);
323 } 235 }
324 236
325 private void updateNonProfiledRunControl() { 237 private void updateNonProfiledRunControl() {
326 boolean anyProfilersChecked = !profilersPanel.getChecked().isEmpty(); 238 boolean anyProfilersChecked = !profilersPanel.getChecked().isEmpty();
327 runNonProfiledIteration.setVisible(anyProfilersChecked); 239 display.getRunNonProfiledIteration().setVisible(anyProfilersChecked);
328 } 240 }
329 241
330 private void populateRebootChoices() { 242 private void populateRebootChoices() {
331 AfeUtils.populateRadioChooser(rebootBefore, "reboot_before"); 243 AfeUtils.populateRadioChooser(rebootBefore, "reboot_before");
332 AfeUtils.populateRadioChooser(rebootAfter, "reboot_after"); 244 AfeUtils.populateRadioChooser(rebootAfter, "reboot_after");
333 } 245 }
334 246
335 247
336 private JSONArray getKernelParams(String kernel_list, String cmdline) { 248 private JSONArray getKernelParams(String kernel_list, String cmdline) {
337 JSONArray result = new JSONArray(); 249 JSONArray result = new JSONArray();
(...skipping 13 matching lines...) Expand all
351 return result; 263 return result;
352 } 264 }
353 /** 265 /**
354 * Get parameters to submit to the generate_control_file RPC. 266 * Get parameters to submit to the generate_control_file RPC.
355 * @param readyForSubmit are we getting a control file that's ready to submi t for a job, or just 267 * @param readyForSubmit are we getting a control file that's ready to submi t for a job, or just
356 * an intermediate control file to be viewed by the user? 268 * an intermediate control file to be viewed by the user?
357 */ 269 */
358 protected JSONObject getControlFileParams(boolean readyForSubmit) { 270 protected JSONObject getControlFileParams(boolean readyForSubmit) {
359 JSONObject params = new JSONObject(); 271 JSONObject params = new JSONObject();
360 272
361 String kernelString = kernel.getText(); 273 String kernelString = display.getKernel().getText();
362 if (!kernelString.equals("")) { 274 if (!kernelString.equals("")) {
363 params.put("kernel", getKernelParams(kernelString, kernel_cmdline.ge tText())); 275 params.put(
276 "kernel", getKernelParams(kernelString, display.getKernelCmd line().getText()));
364 } 277 }
365 278
366 JSONArray tests = new JSONArray(); 279 JSONArray tests = new JSONArray();
367 for (JSONObject test : testSelector.getSelectedTests()) { 280 for (JSONObject test : testSelector.getSelectedTests()) {
368 tests.set(tests.size(), test.get("id")); 281 tests.set(tests.size(), test.get("id"));
369 } 282 }
370 283
371 JSONArray profilers = new JSONArray(); 284 JSONArray profilers = new JSONArray();
372 for (CheckBox profiler : profilersPanel.getChecked()) { 285 for (ICheckBox profiler : profilersPanel.getChecked()) {
373 profilers.set(profilers.size(), new JSONString(profiler.getText())); 286 profilers.set(profilers.size(), new JSONString(profiler.getText()));
374 } 287 }
375 288
376 params.put("tests", tests); 289 params.put("tests", tests);
377 params.put("profilers", profilers); 290 params.put("profilers", profilers);
378 291
379 if (runNonProfiledIteration.isVisible()) { 292 if (display.getRunNonProfiledIteration().isVisible()) {
380 boolean profileOnly = !runNonProfiledIteration.getValue(); 293 boolean profileOnly = !display.getRunNonProfiledIteration().getValue ();
381 params.put("profile_only", JSONBoolean.getInstance(profileOnly)); 294 params.put("profile_only", JSONBoolean.getInstance(profileOnly));
382 } 295 }
383 296
384 return params; 297 return params;
385 } 298 }
386 299
387 protected void generateControlFile(final boolean readyForSubmit, 300 private void generateControlFile(final boolean readyForSubmit,
388 final SimpleCallback finishedCallback, 301 final SimpleCallback finishedCallback,
389 final SimpleCallback errorCallback) { 302 final SimpleCallback errorCallback) {
390 JSONObject params = getControlFileParams(readyForSubmit); 303 JSONObject params = getControlFileParams(readyForSubmit);
391 rpcProxy.rpcCall("generate_control_file", params, new JsonRpcCallback() { 304 rpcProxy.rpcCall("generate_control_file", params, new JsonRpcCallback() {
392 @Override 305 @Override
393 public void onSuccess(JSONValue result) { 306 public void onSuccess(JSONValue result) {
394 JSONObject controlInfo = result.isObject(); 307 JSONObject controlInfo = result.isObject();
395 String controlFileText = controlInfo.get("control_file").isStrin g().stringValue(); 308 String controlFileText = controlInfo.get("control_file").isStrin g().stringValue();
396 boolean isServer = controlInfo.get("is_server").isBoolean().bool eanValue(); 309 boolean isServer = controlInfo.get("is_server").isBoolean().bool eanValue();
397 String synchCount = Utils.jsonToString(controlInfo.get("synch_co unt")); 310 String synchCount = Utils.jsonToString(controlInfo.get("synch_co unt"));
398 setSelectedDependencies(controlInfo.get("dependencies").isArray( )); 311 setSelectedDependencies(controlInfo.get("dependencies").isArray( ));
399 controlFile.setText(controlFileText); 312 display.getControlFile().setText(controlFileText);
400 controlTypeSelect.setControlType(isServer ? TestSelector.SERVER_ TYPE : 313 controlTypeSelect.setControlType(isServer ? TestSelector.SERVER_ TYPE :
401 TestSelector.CLIENT_ TYPE); 314 TestSelector.CLIENT_ TYPE);
402 synchCountInput.setText(synchCount); 315 display.getSynchCountInput().setText(synchCount);
403 controlReadyForSubmit = readyForSubmit; 316 controlReadyForSubmit = readyForSubmit;
404 if (finishedCallback != null) 317 if (finishedCallback != null) {
405 finishedCallback.doCallback(this); 318 finishedCallback.doCallback(this);
319 }
406 } 320 }
407 321
408 @Override 322 @Override
409 public void onError(JSONObject errorObject) { 323 public void onError(JSONObject errorObject) {
410 super.onError(errorObject); 324 super.onError(errorObject);
411 if (errorCallback != null) 325 if (errorCallback != null) {
412 errorCallback.doCallback(this); 326 errorCallback.doCallback(this);
327 }
413 } 328 }
414 }); 329 });
415 } 330 }
416 331
417 protected void generateControlFile(boolean readyForSubmit) { 332 protected void generateControlFile(boolean readyForSubmit) {
418 generateControlFile(readyForSubmit, null, null); 333 generateControlFile(readyForSubmit, null, null);
419 } 334 }
420 335
421 public void handleSkipVerify() { 336 public void handleSkipVerify() {
422 boolean shouldSkipVerify = false; 337 boolean shouldSkipVerify = false;
423 for (JSONObject test : testSelector.getSelectedTests()) { 338 for (JSONObject test : testSelector.getSelectedTests()) {
424 boolean runVerify = test.get("run_verify").isBoolean().booleanValue( ); 339 boolean runVerify = test.get("run_verify").isBoolean().booleanValue( );
425 if (!runVerify) { 340 if (!runVerify) {
426 shouldSkipVerify = true; 341 shouldSkipVerify = true;
427 break; 342 break;
428 } 343 }
429 } 344 }
430 345
431 if (shouldSkipVerify) { 346 if (shouldSkipVerify) {
432 skipVerify.setValue(true); 347 display.getSkipVerify().setValue(true);
433 skipVerify.setEnabled(false); 348 display.getSkipVerify().setEnabled(false);
434 } else { 349 } else {
435 skipVerify.setEnabled(true); 350 display.getSkipVerify().setEnabled(true);
436 } 351 }
437 } 352 }
438 353
439 protected void setInputsEnabled() { 354 protected void setInputsEnabled() {
440 testSelector.setEnabled(true); 355 testSelector.setEnabled(true);
441 profilersPanel.setEnabled(true); 356 profilersPanel.setEnabled(true);
442 handleSkipVerify(); 357 handleSkipVerify();
443 kernel.setEnabled(true); 358 display.getKernel().setEnabled(true);
444 kernel_cmdline.setEnabled(true); 359 display.getKernelCmdline().setEnabled(true);
445 }
446
447 protected boolean isClientTypeSelected() {
448 return testSelector.getSelectedTestType().equals(TestSelector.CLIENT_TYP E);
449 } 360 }
450 361
451 protected void disableInputs() { 362 protected void disableInputs() {
452 testSelector.setEnabled(false); 363 testSelector.setEnabled(false);
453 profilersPanel.setEnabled(false); 364 profilersPanel.setEnabled(false);
454 kernel.setEnabled(false); 365 display.getKernel().setEnabled(false);
455 kernel_cmdline.setEnabled(false); 366 display.getKernelCmdline().setEnabled(false);
456 } 367 }
457 368
458 @Override
459 public void initialize() { 369 public void initialize() {
460 super.initialize(); 370 profilersPanel.bindDisplay(display.getCheckBoxPanelDisplay());
371 controlTypeSelect.bindDisplay(display.getControlTypeSelectDisplay());
372 testSelector.bindDisplay(display.getTestSelectorDisplay());
373 rebootBefore.bindDisplay(display.getRebootBefore());
374 rebootAfter.bindDisplay(display.getRebootAfter());
375
376 display.getEditControlButton().setText(EDIT_CONTROL_STRING);
377 display.getViewLink().setText(VIEW_CONTROL_STRING);
378
379 hostSelector = new HostSelector();
380 hostSelector.initialize();
381 hostSelector.bindDisplay(display.getHostSelectorDisplay());
461 382
462 populatePriorities(staticData.getData("priorities").isArray()); 383 populatePriorities(staticData.getData("priorities").isArray());
463 384
464 BlurHandler kernelBlurHandler = new BlurHandler() { 385 BlurHandler kernelBlurHandler = new BlurHandler() {
465 public void onBlur(BlurEvent event) { 386 public void onBlur(BlurEvent event) {
466 generateControlFile(false); 387 generateControlFile(false);
467 } 388 }
468 }; 389 };
469 390
470 kernel.addBlurHandler(kernelBlurHandler); 391 display.getKernel().addBlurHandler(kernelBlurHandler);
471 kernel_cmdline.addBlurHandler(kernelBlurHandler); 392 display.getKernelCmdline().addBlurHandler(kernelBlurHandler);
472 393
473 KeyPressHandler kernelKeyPressHandler = new KeyPressHandler() { 394 KeyPressHandler kernelKeyPressHandler = new KeyPressHandler() {
474 public void onKeyPress(KeyPressEvent event) { 395 public void onKeyPress(KeyPressEvent event) {
475 if (event.getCharCode() == (char) KeyCodes.KEY_ENTER) 396 if (event.getCharCode() == (char) KeyCodes.KEY_ENTER) {
476 generateControlFile(false); 397 generateControlFile(false);
398 }
477 } 399 }
478 }; 400 };
479 401
480 kernel.addKeyPressHandler(kernelKeyPressHandler); 402 display.getKernel().addKeyPressHandler(kernelKeyPressHandler);
481 kernel_cmdline.addKeyPressHandler(kernelKeyPressHandler); 403 display.getKernelCmdline().addKeyPressHandler(kernelKeyPressHandler);
482 404
483 populateProfilers(); 405 populateProfilers();
484 Panel profilerControls = new VerticalPanel();
485 profilerControls.add(profilersPanel);
486 profilerControls.add(runNonProfiledIteration);
487 updateNonProfiledRunControl(); 406 updateNonProfiledRunControl();
488 407
489 testSelector = new TestSelector();
490
491 populateRebootChoices(); 408 populateRebootChoices();
492 onPreferencesChanged(); 409 onPreferencesChanged();
493 410
494 controlFile.setSize("50em", "30em");
495 controlTypeSelect = new ControlTypeSelect();
496 HorizontalPanel controlOptionsPanel = new HorizontalPanel();
497 controlOptionsPanel.setVerticalAlignment(HorizontalPanel.ALIGN_BOTTOM);
498 controlOptionsPanel.add(controlTypeSelect);
499 Label useLabel = new Label("Use");
500 useLabel.getElement().getStyle().setProperty("marginLeft", "1em");
501 synchCountInput.setSize("3em", ""); // set width only
502 synchCountInput.getElement().getStyle().setProperty("margin", "0 0.5em 0 0.5em");
503 controlOptionsPanel.add(useLabel);
504 controlOptionsPanel.add(synchCountInput);
505 controlOptionsPanel.add(new Label("host(s) per execution"));
506 Panel controlEditPanel = new VerticalPanel();
507 controlEditPanel.add(controlOptionsPanel);
508 controlEditPanel.add(controlFile);
509
510 Panel controlHeaderPanel = new HorizontalPanel();
511 final Anchor viewLink = new Anchor(VIEW_CONTROL_STRING);
512 controlHeaderPanel.add(viewLink);
513 controlHeaderPanel.add(editControlButton);
514
515 if (parameterizedJobsEnabled()) { 411 if (parameterizedJobsEnabled()) {
516 editControlButton.setEnabled(false); 412 display.getEditControlButton().setEnabled(false);
517 } 413 }
518 414
519 controlFilePanel.setHeader(controlHeaderPanel); 415 display.getEditControlButton().addClickHandler(new ClickHandler() {
520 controlFilePanel.add(controlEditPanel);
521
522 editControlButton.addClickHandler(new ClickHandler() {
523 public void onClick(ClickEvent event) { 416 public void onClick(ClickEvent event) {
524 DOM.eventCancelBubble(DOM.eventGetCurrentEvent(), true); 417 DOM.eventCancelBubble(DOM.eventGetCurrentEvent(), true);
525 418
526 if (editControlButton.getText().equals(EDIT_CONTROL_STRING)) { 419 if (display.getEditControlButton().getText().equals(EDIT_CONTROL _STRING)) {
527 disableInputs(); 420 disableInputs();
528 editControlButton.setEnabled(false); 421 display.getEditControlButton().setEnabled(false);
529 SimpleCallback onGotControlFile = new SimpleCallback() { 422 SimpleCallback onGotControlFile = new SimpleCallback() {
530 public void doCallback(Object source) { 423 public void doCallback(Object source) {
531 openControlFileEditor(); 424 openControlFileEditor();
532 } 425 }
533 }; 426 };
534 SimpleCallback onControlFileError = new SimpleCallback() { 427 SimpleCallback onControlFileError = new SimpleCallback() {
535 public void doCallback(Object source) { 428 public void doCallback(Object source) {
536 setInputsEnabled(); 429 setInputsEnabled();
537 editControlButton.setEnabled(true); 430 display.getEditControlButton().setEnabled(true);
538 } 431 }
539 }; 432 };
540 generateControlFile(true, onGotControlFile, onControlFileErr or); 433 generateControlFile(true, onGotControlFile, onControlFileErr or);
541 } 434 }
542 else { 435 else {
543 if (controlEdited && 436 if (controlEdited &&
544 !Window.confirm("Are you sure you want to revert your" + 437 !Window.confirm("Are you sure you want to revert your" +
545 " changes?")) 438 " changes?")) {
546 return; 439 return;
440 }
547 generateControlFile(false); 441 generateControlFile(false);
548 controlFile.setReadOnly(true); 442 display.getControlFile().setReadOnly(true);
549 setInputsEnabled(); 443 setInputsEnabled();
550 editControlButton.setText(EDIT_CONTROL_STRING); 444 display.getEditControlButton().setText(EDIT_CONTROL_STRING);
551 controlTypeSelect.setEnabled(false); 445 controlTypeSelect.setEnabled(false);
552 synchCountInput.setEnabled(false); 446 display.getSynchCountInput().setEnabled(false);
553 controlEdited = false; 447 controlEdited = false;
554 } 448 }
555 } 449 }
556 }); 450 });
557 451
558 controlFile.addChangeHandler(new ChangeHandler() { 452 display.getControlFile().addChangeHandler(new ChangeHandler() {
559 public void onChange(ChangeEvent event) { 453 public void onChange(ChangeEvent event) {
560 controlEdited = true; 454 controlEdited = true;
561 } 455 }
562 }); 456 });
563 457
564 controlFilePanel.addCloseHandler(new CloseHandler<DisclosurePanel>() { 458 display.getControlFilePanelClose().addCloseHandler(new CloseHandler<Disc losurePanel>() {
565 public void onClose(CloseEvent<DisclosurePanel> event) { 459 public void onClose(CloseEvent<DisclosurePanel> event) {
566 viewLink.setText(VIEW_CONTROL_STRING); 460 display.getViewLink().setText(VIEW_CONTROL_STRING);
567 } 461 }
568 }); 462 });
569 463
570 controlFilePanel.addOpenHandler(new OpenHandler<DisclosurePanel>() { 464 display.getControlFilePanelOpen().addOpenHandler(new OpenHandler<Disclos urePanel>() {
571 public void onOpen(OpenEvent<DisclosurePanel> event) { 465 public void onOpen(OpenEvent<DisclosurePanel> event) {
572 viewLink.setText(HIDE_CONTROL_STRING); 466 display.getViewLink().setText(HIDE_CONTROL_STRING);
573 } 467 }
574 }); 468 });
575 469
576 hostSelector = new HostSelector(); 470 display.getSubmitJobButton().addClickHandler(new ClickHandler() {
577 HostSelectorDisplay hostSelectorDisplay = new HostSelectorDisplay();
578 hostSelector.initialize();
579 hostSelector.bindDisplay(hostSelectorDisplay);
580
581 submitJobButton.addClickHandler(new ClickHandler() {
582 public void onClick(ClickEvent event) { 471 public void onClick(ClickEvent event) {
583 submitJob(false); 472 submitJob(false);
584 } 473 }
585 }); 474 });
586 475
587 createTemplateJobButton.addClickHandler(new ClickHandler() { 476 display.getCreateTemplateJobButton().addClickHandler(new ClickHandler() {
588 public void onClick(ClickEvent event) { 477 public void onClick(ClickEvent event) {
589 submitJob(true); 478 submitJob(true);
590 } 479 }
591 }); 480 });
592 481
593 resetButton.addClickHandler(new ClickHandler() { 482 display.getResetButton().addClickHandler(new ClickHandler() {
594 public void onClick(ClickEvent event) { 483 public void onClick(ClickEvent event) {
595 reset(); 484 reset();
596 } 485 }
597 }); 486 });
598 487
599 hostless.addClickHandler(new ClickHandler() { 488 display.getHostless().addClickHandler(new ClickHandler() {
600 @Override 489 @Override
601 public void onClick(ClickEvent event) { 490 public void onClick(ClickEvent event) {
602 hostSelector.setEnabled(!hostless.getValue()); 491 hostSelector.setEnabled(!display.getHostless().getValue());
603 } 492 }
604 }); 493 });
605 494
606 reset(); 495 reset();
607 496
608 addWidget(jobName, "create_job_name");
609 addWidget(kernel, "create_kernel");
610 addWidget(kernel_cmdline, "create_kernel_cmdline");
611 addWidget(timeout, "create_timeout");
612 addWidget(maxRuntime, "create_max_runtime");
613 addWidget(emailList, "create_email_list");
614 addWidget(priorityList, "create_priority");
615 addWidget(skipVerify, "create_skip_verify");
616 addWidget(rebootBefore, "create_reboot_before");
617 addWidget(rebootAfter, "create_reboot_after");
618 addWidget(parseFailedRepair, "create_parse_failed_repair");
619 addWidget(hostless, "create_hostless");
620 addWidget(testSelector, "create_tests");
621 addWidget(profilerControls, "create_profilers");
622 addWidget(controlFilePanel, "create_edit_control");
623 addWidget(hostSelectorDisplay, "create_host_selector");
624 addWidget(submitJobButton, "create_submit");
625 addWidget(createTemplateJobButton, "create_template_job");
626 addWidget(resetButton, "create_reset");
627
628 if (staticData.getData("drone_sets_enabled").isBoolean().booleanValue()) { 497 if (staticData.getData("drone_sets_enabled").isBoolean().booleanValue()) {
629 AfeUtils.popualateListBox(droneSet, "drone_sets"); 498 AfeUtils.populateListBox(display.getDroneSet(), "drone_sets");
630 addWidget(droneSet, "create_drone_set");
631 } else { 499 } else {
632 AfeUtils.removeElement("create_drone_set_wrapper"); 500 AfeUtils.removeElement("create_drone_set_wrapper");
633 } 501 }
634 502
635 testSelector.setListener(this); 503 testSelector.setListener(this);
636 } 504 }
637 505
638 public void reset() { 506 public void reset() {
639 StaticDataRepository repository = StaticDataRepository.getRepository(); 507 StaticDataRepository repository = StaticDataRepository.getRepository();
640 508
641 jobName.setText(""); 509 display.getJobName().setText("");
642 resetPriorityToDefault(); 510 resetPriorityToDefault();
643 rebootBefore.reset(); 511 rebootBefore.reset();
644 rebootAfter.reset(); 512 rebootAfter.reset();
645 parseFailedRepair.setValue( 513 display.getParseFailedRepair().setValue(
646 repository.getData("parse_failed_repair_default").isBoolean().bo oleanValue()); 514 repository.getData("parse_failed_repair_default").isBoolean().bo oleanValue());
647 hostless.setValue(false); 515 display.getHostless().setValue(false);
648 kernel.setText(""); 516 display.getKernel().setText("");
649 kernel_cmdline.setText(""); 517 display.getKernelCmdline().setText("");
650 timeout.setText(Utils.jsonToString(repository.getData("job_timeout_defau lt"))); 518 display.getTimeout().setText(Utils.jsonToString(repository.getData("job_ timeout_default")));
651 maxRuntime.setText(Utils.jsonToString(repository.getData("job_max_runtim e_hrs_default"))); 519 display.getMaxRuntime().setText(
652 emailList.setText(""); 520 Utils.jsonToString(repository.getData("job_max_runtime_hrs_defau lt")));
521 display.getEmailList().setText("");
653 testSelector.reset(); 522 testSelector.reset();
654 skipVerify.setValue(false); 523 display.getSkipVerify().setValue(false);
655 profilersPanel.reset(); 524 profilersPanel.reset();
656 setInputsEnabled(); 525 setInputsEnabled();
657 controlTypeSelect.setControlType(TestSelector.CLIENT_TYPE); 526 controlTypeSelect.setControlType(TestSelector.CLIENT_TYPE);
658 controlTypeSelect.setEnabled(false); 527 controlTypeSelect.setEnabled(false);
659 synchCountInput.setEnabled(false); 528 display.getSynchCountInput().setEnabled(false);
660 synchCountInput.setText("1"); 529 display.getSynchCountInput().setText("1");
661 controlFile.setText(""); 530 display.getControlFile().setText("");
662 controlFile.setReadOnly(true); 531 display.getControlFile().setReadOnly(true);
663 controlEdited = false; 532 controlEdited = false;
664 controlFilePanel.setOpen(false); 533 display.setControlFilePanelOpen(false);
665 editControlButton.setText(EDIT_CONTROL_STRING); 534 display.getEditControlButton().setText(EDIT_CONTROL_STRING);
666 hostSelector.reset(); 535 hostSelector.reset();
667 dependencies = new JSONArray(); 536 dependencies = new JSONArray();
668 } 537 }
669 538
670 protected void submitJob(final boolean isTemplate) { 539 private void submitJob(final boolean isTemplate) {
671 final int timeoutValue, maxRuntimeValue; 540 final int timeoutValue, maxRuntimeValue;
672 final JSONValue synchCount; 541 final JSONValue synchCount;
673 try { 542 try {
674 timeoutValue = parsePositiveIntegerInput(timeout.getText(), "timeout "); 543 timeoutValue = parsePositiveIntegerInput(display.getTimeout().getTex t(), "timeout");
675 maxRuntimeValue = parsePositiveIntegerInput(maxRuntime.getText(), "m ax runtime"); 544 maxRuntimeValue = parsePositiveIntegerInput(
545 display.getMaxRuntime().getText(), "max runtime");
676 546
677 if (hostless.getValue()) { 547 if (display.getHostless().getValue()) {
678 synchCount = JSONNull.getInstance(); 548 synchCount = JSONNull.getInstance();
679 } else { 549 } else {
680 synchCount = new JSONNumber(parsePositiveIntegerInput( 550 synchCount = new JSONNumber(parsePositiveIntegerInput(
681 synchCountInput.getText(), "number of machines used per exec ution")); 551 display.getSynchCountInput().getText(),
552 "number of machines used per execution"));
682 } 553 }
683 } catch (IllegalArgumentException exc) { 554 } catch (IllegalArgumentException exc) {
684 return; 555 return;
685 } 556 }
686 557
687 // disallow accidentally clicking submit twice 558 // disallow accidentally clicking submit twice
688 submitJobButton.setEnabled(false); 559 display.getSubmitJobButton().setEnabled(false);
689 560
690 final SimpleCallback doSubmit = new SimpleCallback() { 561 final SimpleCallback doSubmit = new SimpleCallback() {
691 public void doCallback(Object source) { 562 public void doCallback(Object source) {
692 JSONObject args = new JSONObject(); 563 JSONObject args = new JSONObject();
693 args.put("name", new JSONString(jobName.getText())); 564 args.put("name", new JSONString(display.getJobName().getText())) ;
694 String priority = priorityList.getItemText(priorityList.getSelec tedIndex()); 565 String priority = display.getPriorityList().getSelectedName();
695 args.put("priority", new JSONString(priority)); 566 args.put("priority", new JSONString(priority));
696 args.put("control_file", new JSONString(controlFile.getText())); 567 args.put("control_file", new JSONString(display.getControlFile() .getText()));
697 args.put("control_type", 568 args.put("control_type",
698 new JSONString(controlTypeSelect.getControlType())); 569 new JSONString(controlTypeSelect.getControlType()));
699 args.put("synch_count", synchCount); 570 args.put("synch_count", synchCount);
700 args.put("timeout", new JSONNumber(timeoutValue)); 571 args.put("timeout", new JSONNumber(timeoutValue));
701 args.put("max_runtime_hrs", new JSONNumber(maxRuntimeValue)); 572 args.put("max_runtime_hrs", new JSONNumber(maxRuntimeValue));
702 args.put("email_list", new JSONString(emailList.getText())); 573 args.put("email_list", new JSONString(display.getEmailList().get Text()));
703 args.put("run_verify", JSONBoolean.getInstance(!skipVerify.getVa lue())); 574 args.put("run_verify", JSONBoolean.getInstance(
575 !display.getSkipVerify().getValue()));
704 args.put("is_template", JSONBoolean.getInstance(isTemplate)); 576 args.put("is_template", JSONBoolean.getInstance(isTemplate));
705 args.put("dependencies", getSelectedDependencies()); 577 args.put("dependencies", getSelectedDependencies());
706 args.put("reboot_before", new JSONString(rebootBefore.getSelecte dChoice())); 578 args.put("reboot_before", new JSONString(rebootBefore.getSelecte dChoice()));
707 args.put("reboot_after", new JSONString(rebootAfter.getSelectedC hoice())); 579 args.put("reboot_after", new JSONString(rebootAfter.getSelectedC hoice()));
708 args.put("parse_failed_repair", 580 args.put("parse_failed_repair",
709 JSONBoolean.getInstance(parseFailedRepair.getValue())); 581 JSONBoolean.getInstance(display.getParseFailedRepair(). getValue()));
710 args.put("hostless", JSONBoolean.getInstance(hostless.getValue() )); 582 args.put("hostless", JSONBoolean.getInstance(display.getHostless ().getValue()));
711 583
712 if (staticData.getData("drone_sets_enabled").isBoolean().boolean Value()) { 584 if (staticData.getData("drone_sets_enabled").isBoolean().boolean Value()) {
713 args.put("drone_set", 585 args.put("drone_set", new JSONString(display.getDroneSet().g etSelectedName()));
714 new JSONString(droneSet.getItemText(droneSet.getSele ctedIndex())));
715 } 586 }
716 587
717 HostSelector.HostSelection hosts = hostSelector.getSelectedHosts (); 588 HostSelector.HostSelection hosts = hostSelector.getSelectedHosts ();
718 args.put("hosts", Utils.stringsToJSON(hosts.hosts)); 589 args.put("hosts", Utils.stringsToJSON(hosts.hosts));
719 args.put("meta_hosts", Utils.stringsToJSON(hosts.metaHosts)); 590 args.put("meta_hosts", Utils.stringsToJSON(hosts.metaHosts));
720 args.put("one_time_hosts", 591 args.put("one_time_hosts",
721 Utils.stringsToJSON(hosts.oneTimeHosts)); 592 Utils.stringsToJSON(hosts.oneTimeHosts));
722 593
723 rpcProxy.rpcCall("create_job", args, new JsonRpcCallback() { 594 rpcProxy.rpcCall("create_job", args, new JsonRpcCallback() {
724 @Override 595 @Override
725 public void onSuccess(JSONValue result) { 596 public void onSuccess(JSONValue result) {
726 int id = (int) result.isNumber().doubleValue(); 597 int id = (int) result.isNumber().doubleValue();
727 NotifyManager.getInstance().showMessage( 598 NotifyManager.getInstance().showMessage(
728 "Job " + Integer.toString(id) + " created"); 599 "Job " + Integer.toString(id) + " created");
729 reset(); 600 reset();
730 if (listener != null) 601 if (listener != null) {
731 listener.onJobCreated(id); 602 listener.onJobCreated(id);
732 submitJobButton.setEnabled(true); 603 }
604 display.getSubmitJobButton().setEnabled(true);
733 } 605 }
734 606
735 @Override 607 @Override
736 public void onError(JSONObject errorObject) { 608 public void onError(JSONObject errorObject) {
737 super.onError(errorObject); 609 super.onError(errorObject);
738 submitJobButton.setEnabled(true); 610 display.getSubmitJobButton().setEnabled(true);
739 } 611 }
740 }); 612 });
741 } 613 }
742 }; 614 };
743 615
744 // ensure control file is ready for submission 616 // ensure control file is ready for submission
745 if (!controlReadyForSubmit) 617 if (!controlReadyForSubmit) {
746 generateControlFile(true, doSubmit, new SimpleCallback() { 618 generateControlFile(true, doSubmit, new SimpleCallback() {
747 public void doCallback(Object source) { 619 public void doCallback(Object source) {
748 submitJobButton.setEnabled(true); 620 display.getSubmitJobButton().setEnabled(true);
749 } 621 }
750 }); 622 });
751 else 623 } else {
752 doSubmit.doCallback(this); 624 doSubmit.doCallback(this);
625 }
753 } 626 }
754 627
755 private JSONArray getSelectedDependencies() { 628 private JSONArray getSelectedDependencies() {
756 return dependencies; 629 return dependencies;
757 } 630 }
758 631
759 private void setSelectedDependencies(JSONArray dependencies) { 632 private void setSelectedDependencies(JSONArray dependencies) {
760 this.dependencies = dependencies; 633 this.dependencies = dependencies;
761 } 634 }
762 635
763 private int parsePositiveIntegerInput(String input, String fieldName) { 636 private int parsePositiveIntegerInput(String input, String fieldName) {
764 final int parsedInt; 637 final int parsedInt;
765 try { 638 try {
766 if (input.equals("") || 639 if (input.equals("") ||
767 (parsedInt = Integer.parseInt(input)) <= 0) { 640 (parsedInt = Integer.parseInt(input)) <= 0) {
768 String error = "Please enter a positive " + fieldName; 641 String error = "Please enter a positive " + fieldName;
769 NotifyManager.getInstance().showError(error); 642 NotifyManager.getInstance().showError(error);
770 throw new IllegalArgumentException(); 643 throw new IllegalArgumentException();
771 } 644 }
772 } catch (NumberFormatException e) { 645 } catch (NumberFormatException e) {
773 String error = "Invalid " + fieldName + ": \"" + input + "\""; 646 String error = "Invalid " + fieldName + ": \"" + input + "\"";
774 NotifyManager.getInstance().showError(error); 647 NotifyManager.getInstance().showError(error);
775 throw new IllegalArgumentException(); 648 throw new IllegalArgumentException();
776 } 649 }
777 return parsedInt; 650 return parsedInt;
778 } 651 }
779 652
780 @Override
781 public void refresh() { 653 public void refresh() {
782 super.refresh();
783 hostSelector.refresh(); 654 hostSelector.refresh();
784 } 655 }
785 656
786 public void onTestSelectionChanged() { 657 public void onTestSelectionChanged() {
787 generateControlFile(false); 658 generateControlFile(false);
788 setInputsEnabled(); 659 setInputsEnabled();
789 } 660 }
790 661
791 private void setRebootSelectorDefault(RadioChooser chooser, String name) { 662 private void setRebootSelectorDefault(RadioChooser chooser, String name) {
792 JSONObject user = staticData.getData("current_user").isObject(); 663 JSONObject user = staticData.getData("current_user").isObject();
793 String defaultOption = Utils.jsonToString(user.get(name)); 664 String defaultOption = Utils.jsonToString(user.get(name));
794 chooser.setDefaultChoice(defaultOption); 665 chooser.setDefaultChoice(defaultOption);
795 } 666 }
796 667
797 private void selectPreferredDroneSet() { 668 private void selectPreferredDroneSet() {
798 JSONObject user = staticData.getData("current_user").isObject(); 669 JSONObject user = staticData.getData("current_user").isObject();
799 String preference = Utils.jsonToString(user.get("drone_set")); 670 JSONValue droneSet = user.get("drone_set");
800 AfeUtils.setSelectedItem(droneSet, preference); 671 if (droneSet.isNull() == null) {
672 String preference = Utils.jsonToString(user.get("drone_set"));
673 display.getDroneSet().selectByName(preference);
674 }
801 } 675 }
802 676
803 public void onPreferencesChanged() { 677 public void onPreferencesChanged() {
804 setRebootSelectorDefault(rebootBefore, "reboot_before"); 678 setRebootSelectorDefault(rebootBefore, "reboot_before");
805 setRebootSelectorDefault(rebootAfter, "reboot_after"); 679 setRebootSelectorDefault(rebootAfter, "reboot_after");
806 selectPreferredDroneSet(); 680 selectPreferredDroneSet();
807 testSelector.reset(); 681 testSelector.reset();
808 } 682 }
809 683
810 private boolean parameterizedJobsEnabled() { 684 private boolean parameterizedJobsEnabled() {
811 return staticData.getData("parameterized_jobs").isBoolean().booleanValue (); 685 return staticData.getData("parameterized_jobs").isBoolean().booleanValue ();
812 } 686 }
813 } 687 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698