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