Home | History | Annotate | Download | only in create
      1 package autotest.afe.create;
      2 
      3 import autotest.afe.CheckBoxPanel;
      4 import autotest.afe.CheckBoxPanelDisplay;
      5 import autotest.afe.ControlTypeSelect;
      6 import autotest.afe.ControlTypeSelectDisplay;
      7 import autotest.afe.HostSelector;
      8 import autotest.afe.HostSelectorDisplay;
      9 import autotest.afe.IButton;
     10 import autotest.afe.IButton.ButtonImpl;
     11 import autotest.afe.ICheckBox;
     12 import autotest.afe.ICheckBox.CheckBoxImpl;
     13 import autotest.afe.ITextArea;
     14 import autotest.afe.ITextArea.TextAreaImpl;
     15 import autotest.afe.ITextBox;
     16 import autotest.afe.ITextBox.TextBoxImpl;
     17 import autotest.afe.RadioChooser;
     18 import autotest.afe.RadioChooserDisplay;
     19 import autotest.afe.TestSelector;
     20 import autotest.afe.TestSelectorDisplay;
     21 import autotest.common.ui.ExtendedListBox;
     22 import autotest.common.ui.SimplifiedList;
     23 import autotest.common.ui.ToolTip;
     24 
     25 import com.google.gwt.event.dom.client.HasClickHandlers;
     26 import com.google.gwt.event.logical.shared.HasCloseHandlers;
     27 import com.google.gwt.event.logical.shared.HasOpenHandlers;
     28 import com.google.gwt.user.client.ui.Anchor;
     29 import com.google.gwt.user.client.ui.Button;
     30 import com.google.gwt.user.client.ui.CheckBox;
     31 import com.google.gwt.user.client.ui.DisclosurePanel;
     32 import com.google.gwt.user.client.ui.FlexTable;
     33 import com.google.gwt.user.client.ui.HTMLPanel;
     34 import com.google.gwt.user.client.ui.HTMLTable;
     35 import com.google.gwt.user.client.ui.HasText;
     36 import com.google.gwt.user.client.ui.HasValue;
     37 import com.google.gwt.user.client.ui.HorizontalPanel;
     38 import com.google.gwt.user.client.ui.Label;
     39 import com.google.gwt.user.client.ui.Panel;
     40 import com.google.gwt.user.client.ui.TextBox;
     41 import com.google.gwt.user.client.ui.VerticalPanel;
     42 
     43 public class CreateJobViewDisplay implements CreateJobViewPresenter.Display {
     44     public static final int CHECKBOX_PANEL_COLUMNS = 5;
     45 
     46     private TextBox jobName = new TextBox();
     47     private ToolTip jobNameToolTip = new ToolTip(
     48         "?",
     49         "Name for the job. The string should be meaningful when viewing a list of jobs.");
     50     private ExtendedListBox priorityList = new ExtendedListBox();
     51     private ToolTip priorityListToolTip = new ToolTip(
     52         "?",
     53         "Lowest to highest: Weekly, Daily, PostBuild, Default.");
     54     private TextBoxImpl image_url = new TextBoxImpl();
     55     private ToolTip image_urlToolTip = new ToolTip(
     56         "?",
     57         "Name of the test image to use. Example: \"x86-alex-release/R27-3837.0.0\". " +
     58         "If no image is specified, regular tests will use current image on the Host. " +
     59         "Please note that an image is required to run a test suite.");
     60     /**
     61      * - When the fetch tests from build checkbox is unchecked (by default), the tests
     62      * selection dropdown list is filled up by using the build on Moblab device.
     63      * - You can only check the checkbox if a build is selected in the test source build
     64      * dropdown list
     65      * - Whenever the source build dropdown selection changes, automatically switch back
     66      * to fetch tests from Moblab device.
     67      */
     68     private CheckBoxImpl fetchTestsCheckBox = new CheckBoxImpl("Fetch Tests from Build");
     69     private TextBox timeout = new TextBox();
     70     private ToolTip timeoutToolTip = new ToolTip(
     71         "?",
     72         "The number of minutes after the job creation before the scheduler " +
     73         "automatically aborts an incomplete job.");
     74     private TextBox maxRuntime = new TextBox();
     75     private ToolTip maxRuntimeToolTip = new ToolTip(
     76         "?",
     77         "The number of minutes after the job starts running before the scheduler " +
     78         "automatically aborts an incomplete job.");
     79     private TextBox testRetry = new TextBox();
     80     private ToolTip testRetryToolTip = new ToolTip(
     81         "?",
     82         "Number of times to retry test if the test did not complete successfully.");
     83     private TextBox emailList = new TextBox();
     84     private ToolTip emailListToolTip = new ToolTip(
     85         "?",
     86         "Email addresses to notify when this job completes. " +
     87         "Use a comma or space to separate multiple addresses.");
     88     private CheckBoxImpl skipVerify = new CheckBoxImpl();
     89     private ToolTip skipVerifyToolTip = new ToolTip(
     90         "?",
     91         "Skips the host verification step before running the job. " +
     92         "This is useful for machine reinstalls, for example.");
     93     private CheckBoxImpl skipReset = new CheckBoxImpl();
     94     private ToolTip skipResetToolTip = new ToolTip(
     95         "?",
     96         "Skips the host reset step before running the job.");
     97     private RadioChooserDisplay rebootBefore = new RadioChooserDisplay();
     98     private ToolTip rebootBeforeToolTip = new ToolTip(
     99         "?",
    100         "Reboots all assigned hosts before the job runs. " +
    101         "Click If dirty to reboot the host only if it hasnt been rebooted " +
    102         "since it was added, locked, or after running the last job.");
    103     private RadioChooserDisplay rebootAfter = new RadioChooserDisplay();
    104     private ToolTip rebootAfterToolTip = new ToolTip(
    105         "?",
    106         "Reboots all assigned hosts after the job runs. Click If all tests passed " +
    107         "to skip rebooting the host if any test in the job fails.");
    108     private CheckBox parseFailedRepair = new CheckBox();
    109     private ToolTip parseFailedRepairToolTip = new ToolTip(
    110         "?",
    111         "When a host fails repair, displays repair and verify test entries in " +
    112         "the results database along with a SERVER_JOB entry. " +
    113         "Otherwise, no information is displayed in TKO (Result Database).");
    114     private CheckBoxImpl hostless = new CheckBoxImpl();
    115     private ToolTip hostlessToolTip = new ToolTip(
    116         "?",
    117         "Check to run a suite of tests, and select Server from the Test type dropdown list.");
    118     private CheckBoxImpl require_ssp = new CheckBoxImpl();
    119     private ToolTip require_sspToolTip = new ToolTip(
    120         "?",
    121         "Check to force a server side test to use server-side packaging. This " +
    122         "option has no effect on suite job. Test jobs created by a suite job " +
    123         "will use SSP if enable_ssp_container is set to True in global config " +
    124         "and there exists a drone supporting SSP.");
    125     private TextBox pool = new TextBox();
    126     private ToolTip poolToolTip = new ToolTip(
    127         "?",
    128         "Specify the pool of machines to use for suite job.");
    129     private TextBoxImpl args = new TextBoxImpl();
    130     private ToolTip argsToolTip = new ToolTip(
    131         "?",
    132         "Example: \"device_addrs=00:1F:20:33:6A:1E, arg2=value2, arg3=value3\". " +
    133         "Separate multiple args with commas.");
    134     private TextBoxImpl firmwareRWBuild = new TextBoxImpl();
    135     private ToolTip firmwareRWBuildToolTip = new ToolTip(
    136         "?",
    137         "Name of the firmware build to update RW firmware of the DUT. Example: " +
    138         "\"x86-alex-firmware/R41-6588.9.0\". If no firmware build is specified, " +
    139         "the RW firmware of the DUT will not be updated.");
    140     private TextBoxImpl firmwareROBuild = new TextBoxImpl();
    141     private ToolTip firmwareROBuildToolTip = new ToolTip(
    142         "?",
    143         "Name of the firmware build to update RO firmware of the DUT. Example: " +
    144         "\"x86-alex-firmware/R41-6588.9.0\". If no firmware RO build is specified, " +
    145         "the RO firmware of the DUT will not be updated.");
    146     private ExtendedListBox testSourceBuildList = new ExtendedListBox();
    147     private ToolTip testSourceBuildListToolTip = new ToolTip(
    148         "?",
    149         "The image/build from which the tests will be fetched and ran from. It can " +
    150         "be one of the specified Build Image, Firmware RW Build or the Firmware RO Build.");
    151     private TestSelectorDisplay testSelector = new TestSelectorDisplay();
    152     private CheckBoxPanelDisplay profilersPanel = new CheckBoxPanelDisplay(CHECKBOX_PANEL_COLUMNS);
    153     private CheckBoxImpl runNonProfiledIteration =
    154         new CheckBoxImpl("Run each test without profilers first");
    155     private ExtendedListBox droneSet = new ExtendedListBox();
    156     private TextAreaImpl controlFile = new TextAreaImpl();
    157     private DisclosurePanel controlFilePanel = new DisclosurePanel("");
    158     private ControlTypeSelectDisplay controlTypeSelect = new ControlTypeSelectDisplay();
    159     private TextBoxImpl synchCountInput = new TextBoxImpl();
    160     private ButtonImpl editControlButton = new ButtonImpl();
    161     private HostSelectorDisplay hostSelector = new HostSelectorDisplay();
    162     private ButtonImpl submitJobButton = new ButtonImpl("Submit Job");
    163     private Button createTemplateJobButton = new Button("Create Template Job");
    164     private Button resetButton = new Button("Reset");
    165     private Label viewLink = new Label("");
    166     private DisclosurePanel advancedOptionsPanel = new DisclosurePanel("");
    167     private DisclosurePanel firmwareBuildOptionsPanel = new DisclosurePanel("");
    168 
    169     public void initialize(HTMLPanel panel) {
    170         jobName.addStyleName("jobname-image-boundedwidth");
    171         image_url.addStyleName("jobname-image-boundedwidth");
    172 
    173         Panel profilerControls = new VerticalPanel();
    174         profilerControls.add(profilersPanel);
    175         profilerControls.add(runNonProfiledIteration);
    176 
    177         controlFile.setSize("100%", "30em");
    178 
    179         HorizontalPanel controlOptionsPanel = new HorizontalPanel();
    180         controlOptionsPanel.setVerticalAlignment(HorizontalPanel.ALIGN_BOTTOM);
    181         controlOptionsPanel.add(controlTypeSelect);
    182         Label useLabel = new Label("Use");
    183         useLabel.getElement().getStyle().setProperty("marginLeft", "1em");
    184         synchCountInput.setSize("3em", ""); // set width only
    185         synchCountInput.getElement().getStyle().setProperty("margin", "0 0.5em 0 0.5em");
    186         controlOptionsPanel.add(useLabel);
    187         controlOptionsPanel.add(synchCountInput);
    188         controlOptionsPanel.add(new Label("host(s) per execution"));
    189         Panel controlEditPanel = new VerticalPanel();
    190         controlEditPanel.add(controlOptionsPanel);
    191         controlEditPanel.add(controlFile);
    192         controlEditPanel.setWidth("100%");
    193 
    194         Panel controlHeaderPanel = new HorizontalPanel();
    195         controlHeaderPanel.add(controlFilePanel.getHeader());
    196         controlHeaderPanel.add(viewLink);
    197         controlHeaderPanel.add(editControlButton);
    198 
    199         controlFilePanel.setHeader(controlHeaderPanel);
    200         controlFilePanel.add(controlEditPanel);
    201         controlFilePanel.addStyleName("panel-boundedwidth");
    202 
    203         // Setup the Advanced options panel
    204         advancedOptionsPanel.getHeaderTextAccessor().setText("Advanced Options");
    205 
    206         FlexTable advancedOptionsLayout = new FlexTable();
    207 
    208         Panel priorityPanel = new HorizontalPanel();
    209         priorityPanel.add(priorityList);
    210         priorityPanel.add(priorityListToolTip);
    211         advancedOptionsLayout.setWidget(0, 0, new Label("Priority:"));
    212         advancedOptionsLayout.setWidget(0, 1, priorityPanel);
    213 
    214         Panel timeoutPanel = new HorizontalPanel();
    215         timeoutPanel.add(timeout);
    216         timeoutPanel.add(timeoutToolTip);
    217         advancedOptionsLayout.setWidget(3, 0, new Label("Timeout (minutes):"));
    218         advancedOptionsLayout.setWidget(3, 1, timeoutPanel);
    219 
    220         Panel maxRuntimePanel = new HorizontalPanel();
    221         maxRuntimePanel.add(maxRuntime);
    222         maxRuntimePanel.add(maxRuntimeToolTip);
    223         advancedOptionsLayout.setWidget(4, 0, new Label("Max runtime (minutes):"));
    224         advancedOptionsLayout.setWidget(4, 1, maxRuntimePanel);
    225 
    226         Panel testRetryPanel = new HorizontalPanel();
    227         testRetryPanel.add(testRetry);
    228         testRetryPanel.add(testRetryToolTip);
    229         advancedOptionsLayout.setWidget(5, 0, new Label("Test Retries: (optional)"));
    230         advancedOptionsLayout.setWidget(5, 1, testRetryPanel);
    231 
    232         Panel emailListPanel = new HorizontalPanel();
    233         emailListPanel.add(emailList);
    234         emailListPanel.add(emailListToolTip);
    235         advancedOptionsLayout.setWidget(6, 0, new Label("Email List: (optional)"));
    236         advancedOptionsLayout.setWidget(6, 1, emailListPanel);
    237 
    238         Panel skipVerifyPanel = new HorizontalPanel();
    239         skipVerifyPanel.add(skipVerify);
    240         skipVerifyPanel.add(skipVerifyToolTip);
    241         advancedOptionsLayout.setWidget(7, 0, new Label("Skip verify:"));
    242         advancedOptionsLayout.setWidget(7, 1, skipVerifyPanel);
    243 
    244         Panel skipResetPanel = new HorizontalPanel();
    245         skipResetPanel.add(skipReset);
    246         skipResetPanel.add(skipResetToolTip);
    247         advancedOptionsLayout.setWidget(8, 0, new Label("Skip reset:"));
    248         advancedOptionsLayout.setWidget(8, 1, skipResetPanel);
    249 
    250         Panel rebootBeforePanel = new HorizontalPanel();
    251         rebootBeforePanel.add(rebootBefore);
    252         rebootBeforePanel.add(rebootBeforeToolTip);
    253         advancedOptionsLayout.setWidget(9, 0, new Label("Reboot before:"));
    254         advancedOptionsLayout.setWidget(9, 1, rebootBeforePanel);
    255 
    256         Panel rebootAfterPanel = new HorizontalPanel();
    257         rebootAfterPanel.add(rebootAfter);
    258         rebootAfterPanel.add(rebootAfterToolTip);
    259         advancedOptionsLayout.setWidget(10, 0, new Label("Reboot after:"));
    260         advancedOptionsLayout.setWidget(10, 1, rebootAfterPanel);
    261 
    262         Panel parseFailedRepairPanel = new HorizontalPanel();
    263         parseFailedRepairPanel.add(parseFailedRepair);
    264         parseFailedRepairPanel.add(parseFailedRepairToolTip);
    265         advancedOptionsLayout.setWidget(11, 0, new Label("Include failed repair results:"));
    266         advancedOptionsLayout.setWidget(11, 1, parseFailedRepairPanel);
    267 
    268         Panel hostlessPanel = new HorizontalPanel();
    269         hostlessPanel.add(hostless);
    270         hostlessPanel.add(hostlessToolTip);
    271         advancedOptionsLayout.setWidget(12, 0, new Label("Hostless (Suite Job):"));
    272         advancedOptionsLayout.setWidget(12, 1, hostlessPanel);
    273 
    274         Panel require_sspPanel = new HorizontalPanel();
    275         require_sspPanel.add(require_ssp);
    276         require_sspPanel.add(require_sspToolTip);
    277         advancedOptionsLayout.setWidget(13, 0, new Label("Require server-side packaging:"));
    278         advancedOptionsLayout.setWidget(13, 1, require_sspPanel);
    279 
    280         Panel poolPanel = new HorizontalPanel();
    281         poolPanel.add(pool);
    282         poolPanel.add(poolToolTip);
    283         advancedOptionsLayout.setWidget(14, 0, new Label("Pool: (optional)"));
    284         advancedOptionsLayout.setWidget(14, 1, poolPanel);
    285 
    286         Panel argsPanel = new HorizontalPanel();
    287         argsPanel.add(args);
    288         argsPanel.add(argsToolTip);
    289         advancedOptionsLayout.setWidget(15, 0, new Label("Args: (optional)"));
    290         advancedOptionsLayout.setWidget(15, 1, argsPanel);
    291 
    292         advancedOptionsLayout.setWidget(16, 0, new Label("Profilers: (optional)"));
    293         advancedOptionsLayout.setWidget(16, 1, profilerControls);
    294 
    295         HTMLTable.RowFormatter advOptLayoutFormatter = advancedOptionsLayout.getRowFormatter();
    296         for (int row = 0; row < advancedOptionsLayout.getRowCount(); ++row)
    297         {
    298           if (row % 2 == 0) {
    299               advOptLayoutFormatter.addStyleName(row, "data-row");
    300           }
    301           else {
    302               advOptLayoutFormatter.addStyleName(row, "data-row-alternate");
    303           }
    304 
    305         }
    306         advancedOptionsLayout.setWidth("100%");
    307         advancedOptionsPanel.addStyleName("panel-boundedwidth");
    308         advancedOptionsPanel.add(advancedOptionsLayout);
    309 
    310         // Setup the Firmware Build options panel
    311         firmwareBuildOptionsPanel.getHeaderTextAccessor().setText("Firmware Build Options (optional)");
    312         FlexTable firmwareBuildOptionsLayout = new FlexTable();
    313 
    314         firmwareBuildOptionsLayout.getFlexCellFormatter().setColSpan(0, 0, 2);
    315         firmwareBuildOptionsLayout.setWidget(0, 0, new Label("Image URL/Build must be specified for " +
    316             "updating the firmware of the test device with given firmware build. A servo may be " +
    317             "required to be attached to the test device in order to have firmware updated."));
    318 
    319         Panel firmwareRWBuildPanel = new HorizontalPanel();
    320         firmwareRWBuild.addStyleName("jobname-image-boundedwidth");
    321         firmwareRWBuildPanel.add(firmwareRWBuild);
    322         firmwareRWBuildPanel.add(firmwareRWBuildToolTip);
    323         firmwareBuildOptionsLayout.setWidget(1, 0, new Label("Firmware RW build:"));
    324         firmwareBuildOptionsLayout.setWidget(1, 1, firmwareRWBuildPanel);
    325 
    326         Panel firmwareROBuildPanel = new HorizontalPanel();
    327         firmwareROBuild.addStyleName("jobname-image-boundedwidth");
    328         firmwareROBuildPanel.add(firmwareROBuild);
    329         firmwareROBuildPanel.add(firmwareROBuildToolTip);
    330         firmwareBuildOptionsLayout.setWidget(2, 0, new Label("Firmware RO build:"));
    331         firmwareBuildOptionsLayout.setWidget(2, 1, firmwareROBuildPanel);
    332 
    333         firmwareBuildOptionsLayout.setWidth("100%");
    334         firmwareBuildOptionsPanel.addStyleName("panel-boundedwidth");
    335         firmwareBuildOptionsPanel.add(firmwareBuildOptionsLayout);
    336         firmwareRWBuild.setEnabled(false);
    337         firmwareROBuild.setEnabled(false);
    338 
    339         testSourceBuildList.getElement().getStyle().setProperty("minWidth", "15em");
    340 
    341         fetchTestsCheckBox.setEnabled(false);
    342         // Add the remaining widgets to the main panel
    343         panel.add(jobName, "create_job_name");
    344         panel.add(jobNameToolTip, "create_job_name");
    345         panel.add(image_url, "create_image_url");
    346         panel.add(image_urlToolTip, "create_image_url");
    347         panel.add(testSourceBuildList, "create_test_source_build");
    348         panel.add(testSourceBuildListToolTip, "create_test_source_build");
    349         panel.add(fetchTestsCheckBox, "fetch_tests_from_build");
    350         panel.add(testSelector, "create_tests");
    351         panel.add(controlFilePanel, "create_edit_control");
    352         panel.add(hostSelector, "create_host_selector");
    353         panel.add(submitJobButton, "create_submit");
    354         panel.add(createTemplateJobButton, "create_template_job");
    355         panel.add(resetButton, "create_reset");
    356         panel.add(droneSet, "create_drone_set");
    357 
    358         panel.add(advancedOptionsPanel, "create_advanced_options");
    359         panel.add(firmwareBuildOptionsPanel, "create_firmware_build_options");
    360     }
    361 
    362     public CheckBoxPanel.Display getCheckBoxPanelDisplay() {
    363         return profilersPanel;
    364     }
    365 
    366     public ControlTypeSelect.Display getControlTypeSelectDisplay() {
    367         return controlTypeSelect;
    368     }
    369 
    370     public ITextArea getControlFile() {
    371         return controlFile;
    372     }
    373 
    374     public HasCloseHandlers<DisclosurePanel> getControlFilePanelClose() {
    375         return controlFilePanel;
    376     }
    377 
    378     public HasOpenHandlers<DisclosurePanel> getControlFilePanelOpen() {
    379         return controlFilePanel;
    380     }
    381 
    382     public HasClickHandlers getCreateTemplateJobButton() {
    383         return createTemplateJobButton;
    384     }
    385 
    386     public SimplifiedList getDroneSet() {
    387         return droneSet;
    388     }
    389 
    390     public IButton getEditControlButton() {
    391         return editControlButton;
    392     }
    393 
    394     public HasText getEmailList() {
    395         return emailList;
    396     }
    397 
    398     public HostSelector.Display getHostSelectorDisplay() {
    399         return hostSelector;
    400     }
    401 
    402     public ICheckBox getHostless() {
    403         return hostless;
    404     }
    405 
    406     public ICheckBox getRequireSSP() {
    407       return require_ssp;
    408     }
    409 
    410     public HasText getPool() {
    411         return pool;
    412     }
    413 
    414     public ITextBox getArgs() {
    415         return args;
    416     }
    417 
    418     public HasText getJobName() {
    419         return jobName;
    420     }
    421 
    422     public ITextBox getImageUrl() {
    423         return image_url;
    424     }
    425 
    426     public HasText getMaxRuntime() {
    427         return maxRuntime;
    428     }
    429 
    430     public HasText getTestRetry() {
    431         return testRetry;
    432     }
    433 
    434     public HasValue<Boolean> getParseFailedRepair() {
    435         return parseFailedRepair;
    436     }
    437 
    438     public ExtendedListBox getPriorityList() {
    439         return priorityList;
    440     }
    441 
    442     public RadioChooser.Display getRebootAfter() {
    443         return rebootAfter;
    444     }
    445 
    446     public RadioChooser.Display getRebootBefore() {
    447         return rebootBefore;
    448     }
    449 
    450     public HasClickHandlers getResetButton() {
    451         return resetButton;
    452     }
    453 
    454     public ICheckBox getRunNonProfiledIteration() {
    455         return runNonProfiledIteration;
    456     }
    457 
    458     public ICheckBox getSkipVerify() {
    459         return skipVerify;
    460     }
    461 
    462     public ICheckBox getSkipReset() {
    463       return skipReset;
    464     }
    465 
    466     public IButton getSubmitJobButton() {
    467         return submitJobButton;
    468     }
    469 
    470     public ITextBox getSynchCountInput() {
    471         return synchCountInput;
    472     }
    473 
    474     public TestSelector.Display getTestSelectorDisplay() {
    475         return testSelector;
    476     }
    477 
    478     public HasText getTimeout() {
    479         return timeout;
    480     }
    481 
    482     public HasText getViewLink() {
    483         return viewLink;
    484     }
    485 
    486     public void setControlFilePanelOpen(boolean isOpen) {
    487         controlFilePanel.setOpen(isOpen);
    488     }
    489 
    490     public ICheckBox getFetchTestsFromBuildCheckBox() {
    491       return fetchTestsCheckBox;
    492     }
    493 
    494     public ITextBox getFirmwareRWBuild() {
    495       return firmwareRWBuild;
    496     }
    497 
    498     public ITextBox getFirmwareROBuild() {
    499       return firmwareROBuild;
    500     }
    501 
    502     public ExtendedListBox getTestSourceBuildList() {
    503       return testSourceBuildList;
    504     }
    505 }
    506