| OLD | NEW |
| 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 Loading... |
| 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 } |
| OLD | NEW |