1e3f6868dac3b4c4714637d12b93d97823011a35cshowardpackage autotest.afe; 21c390f85167cfd1c14f9500bb20b05a9e677c0eashoward 36f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.afe.create.CreateJobViewPresenter.JobCreateListener; 43bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luoimport autotest.common.CustomHistory.HistoryToken; 59dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.SimpleCallback; 6e3f6868dac3b4c4714637d12b93d97823011a35cshowardimport autotest.common.Utils; 7e3f6868dac3b4c4714637d12b93d97823011a35cshowardimport autotest.common.table.DataSource; 86f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.common.table.DataSource.DataCallback; 96f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.common.table.DataSource.Query; 106f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.common.table.DataSource.SortDirection; 119dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.table.DataTable; 1257bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luoimport autotest.common.table.DatetimeSegmentFilter; 13e3f6868dac3b4c4714637d12b93d97823011a35cshowardimport autotest.common.table.DynamicTable; 146f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.common.table.DynamicTable.DynamicTableListener; 15cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luoimport autotest.common.table.JSONObjectSet; 16e3f6868dac3b4c4714637d12b93d97823011a35cshowardimport autotest.common.table.RpcDataSource; 179dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.table.SelectionManager; 18e3f6868dac3b4c4714637d12b93d97823011a35cshowardimport autotest.common.table.SimpleFilter; 19e3f6868dac3b4c4714637d12b93d97823011a35cshowardimport autotest.common.table.TableDecorator; 209dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.ui.ContextMenu; 21e3f6868dac3b4c4714637d12b93d97823011a35cshowardimport autotest.common.ui.DetailView; 22e3f6868dac3b4c4714637d12b93d97823011a35cshowardimport autotest.common.ui.NotifyManager; 239dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.ui.TableActionsPanel.TableActionsListener; 241c390f85167cfd1c14f9500bb20b05a9e677c0eashoward 25a5e4d84c9616b0a987e904d3b1d1d3fd9ca1be86showardimport com.google.gwt.event.dom.client.ClickEvent; 26a5e4d84c9616b0a987e904d3b1d1d3fd9ca1be86showardimport com.google.gwt.event.dom.client.ClickHandler; 2779ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luoimport com.google.gwt.event.dom.client.KeyCodes; 2879ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luoimport com.google.gwt.event.dom.client.KeyPressEvent; 2979ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luoimport com.google.gwt.event.dom.client.KeyPressHandler; 3057bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luoimport com.google.gwt.event.logical.shared.ValueChangeEvent; 3157bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luoimport com.google.gwt.event.logical.shared.ValueChangeHandler; 32b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showardimport com.google.gwt.json.client.JSONArray; 338aa84fcb18489265208f291a7fc3c33799696eaeshowardimport com.google.gwt.json.client.JSONBoolean; 340c1a37dd9b1237fe8d43c7f911ce601104806339MK Ryuimport com.google.gwt.json.client.JSONNumber; 351c390f85167cfd1c14f9500bb20b05a9e677c0eashowardimport com.google.gwt.json.client.JSONObject; 361c390f85167cfd1c14f9500bb20b05a9e677c0eashowardimport com.google.gwt.json.client.JSONString; 37b5611a81e109472e81e983da636d9580c3022b24showardimport com.google.gwt.json.client.JSONValue; 389dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport com.google.gwt.user.client.Command; 39e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showardimport com.google.gwt.user.client.ui.Button; 40c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showardimport com.google.gwt.user.client.ui.CheckBox; 4179ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luoimport com.google.gwt.user.client.ui.TextBox; 421c390f85167cfd1c14f9500bb20b05a9e677c0eashoward 434879914c122f4ed97eae3b08c5af1930fd75b39dshowardimport java.util.List; 443bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luoimport java.util.Map; 45cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luoimport java.util.Set; 464879914c122f4ed97eae3b08c5af1930fd75b39dshoward 47cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luopublic class HostDetailView extends DetailView implements DataCallback, TableActionsListener { 48affe09b5a82a1ec1a6c8f19571e07bb9f901abe0showard private static final String[][] HOST_JOBS_COLUMNS = { 496f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li {DataTable.WIDGET_COLUMN, ""}, {"type", "Type"}, {"job__id", "Job ID"}, 50c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard {"job_owner", "Job Owner"}, {"job_name", "Job Name"}, {"started_on", "Time started"}, 51c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard {"status", "Status"} 521c390f85167cfd1c14f9500bb20b05a9e677c0eashoward }; 531c390f85167cfd1c14f9500bb20b05a9e677c0eashoward public static final int JOBS_PER_PAGE = 20; 546f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 55b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard public interface HostDetailListener { 56b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard public void onJobSelected(int jobId); 57b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 586f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 59b5611a81e109472e81e983da636d9580c3022b24showard private static class HostQueueEntryDataSource extends RpcDataSource { 60b5611a81e109472e81e983da636d9580c3022b24showard public HostQueueEntryDataSource() { 61b5611a81e109472e81e983da636d9580c3022b24showard super("get_host_queue_entries", "get_num_host_queue_entries"); 62b5611a81e109472e81e983da636d9580c3022b24showard } 63b5611a81e109472e81e983da636d9580c3022b24showard 64b5611a81e109472e81e983da636d9580c3022b24showard @Override 654879914c122f4ed97eae3b08c5af1930fd75b39dshoward protected List<JSONObject> handleJsonResult(JSONValue result) { 664879914c122f4ed97eae3b08c5af1930fd75b39dshoward List<JSONObject> resultArray = super.handleJsonResult(result); 674879914c122f4ed97eae3b08c5af1930fd75b39dshoward for (JSONObject row : resultArray) { 68b5611a81e109472e81e983da636d9580c3022b24showard // get_host_queue_entries() doesn't return type, so fill it in for consistency with 69b5611a81e109472e81e983da636d9580c3022b24showard // get_host_queue_entries_and_special_tasks() 70b5611a81e109472e81e983da636d9580c3022b24showard row.put("type", new JSONString("Job")); 71b5611a81e109472e81e983da636d9580c3022b24showard } 72b5611a81e109472e81e983da636d9580c3022b24showard return resultArray; 73b5611a81e109472e81e983da636d9580c3022b24showard } 74b5611a81e109472e81e983da636d9580c3022b24showard } 756f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 76b5611a81e109472e81e983da636d9580c3022b24showard private static class HostJobsTable extends DynamicTable { 77b5611a81e109472e81e983da636d9580c3022b24showard private static final DataSource normalDataSource = new HostQueueEntryDataSource(); 786f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li private static final DataSource dataSourceWithSpecialTasks = 79c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard new RpcDataSource("get_host_queue_entries_and_special_tasks", 80c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard "get_num_host_queue_entries_and_special_tasks"); 81c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard 82c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard private SimpleFilter hostFilter = new SimpleFilter(); 8379ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo private String hostId; 8457bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo private String startTime; 8557bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo private String endTime; 86c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard 87c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard public HostJobsTable() { 88c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard super(HOST_JOBS_COLUMNS, normalDataSource); 89c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard addFilter(hostFilter); 90c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 916f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 9279ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo public void setHostId(String hostId) { 9379ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo this.hostId = hostId; 94c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard updateFilter(); 95c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 96c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard 9757bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo public void setStartTime(String startTime) { 9857bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo this.startTime = startTime; 9957bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo updateFilter(); 10057bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo } 10157bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo 10257bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo public void setEndTime(String endTime) { 10357bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo this.endTime = endTime; 10457bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo updateFilter(); 10557bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo } 10657bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo 107c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard private void updateFilter() { 108c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard if (getDataSource() == normalDataSource) { 109a5288b4bb2b09aafe914d0b7d5aab79a7e433eafshoward sortOnColumn("job__id", SortDirection.DESCENDING); 110c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } else { 111c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard clearSorts(); 112c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 113c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard 114c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard hostFilter.clear(); 1150c1a37dd9b1237fe8d43c7f911ce601104806339MK Ryu hostFilter.setParameter("host", 1160c1a37dd9b1237fe8d43c7f911ce601104806339MK Ryu new JSONNumber(Double.parseDouble(hostId))); 11757bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo if (startTime != null && startTime != "") 11857bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo hostFilter.setParameter("start_time", new JSONString(startTime)); 11957bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo if (endTime != null && endTime != "") 12057bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo hostFilter.setParameter("end_time", new JSONString(endTime)); 121c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 1226f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 123c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard public void setSpecialTasksEnabled(boolean enabled) { 124c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard if (enabled) { 125c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard setDataSource(dataSourceWithSpecialTasks); 126c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } else { 127c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard setDataSource(normalDataSource); 128c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 1296f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 130c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard updateFilter(); 131b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 132b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard 1336bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 134b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard protected void preprocessRow(JSONObject row) { 135b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard JSONObject job = row.get("job").isObject(); 136c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard JSONString blank = new JSONString(""); 137c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard JSONString jobId = blank, owner = blank, name = blank; 138c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard if (job != null) { 139c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard int id = (int) job.get("id").isNumber().doubleValue(); 140c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard jobId = new JSONString(Integer.toString(id)); 141c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard owner = job.get("owner").isString(); 142c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard name = job.get("name").isString(); 143c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 144c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard 145a5288b4bb2b09aafe914d0b7d5aab79a7e433eafshoward row.put("job__id", jobId); 146c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard row.put("job_owner", owner); 147c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard row.put("job_name", name); 148b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 149b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 1506f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 151c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard private String hostname = ""; 15279ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo private String hostId = ""; 153c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard private DataSource hostDataSource = new HostDataSource(); 154c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard private HostJobsTable jobsTable = new HostJobsTable(); 155c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard private TableDecorator tableDecorator = new TableDecorator(jobsTable); 1561fe34c4612727e711818f1414072149f685e364eshoward private HostDetailListener hostDetailListener = null; 1571fe34c4612727e711818f1414072149f685e364eshoward private JobCreateListener jobCreateListener = null; 1589dbdcda5104991cbf344ea5cba1aa58e1af444f3showard private SelectionManager selectionManager; 1596f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 160e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard private JSONObject currentHostObject; 1616f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 162e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard private Button lockButton = new Button(); 163d9642c07837d093b13bc5c32132874f8ecce5d5dshoward private Button reverifyButton = new Button("Reverify"); 16473dae55766b9c8b6922194901e334c4e52f67d14Simran Basi private Button repairButton = new Button("Repair"); 165c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard private CheckBox showSpecialTasks = new CheckBox(); 16657bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo private DatetimeSegmentFilter startedTimeFilter = new DatetimeSegmentFilter(); 16779ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo private TextBox hostnameInput = new TextBox(); 16879ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo private Button hostnameFetchButton = new Button("Go"); 1696818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori private TextBox lockReasonInput = new TextBox(); 170b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard 1711fe34c4612727e711818f1414072149f685e364eshoward public HostDetailView(HostDetailListener hostDetailListener, 1721fe34c4612727e711818f1414072149f685e364eshoward JobCreateListener jobCreateListener) { 1731fe34c4612727e711818f1414072149f685e364eshoward this.hostDetailListener = hostDetailListener; 1741fe34c4612727e711818f1414072149f685e364eshoward this.jobCreateListener = jobCreateListener; 175b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 1761c390f85167cfd1c14f9500bb20b05a9e677c0eashoward 1776bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 1781c390f85167cfd1c14f9500bb20b05a9e677c0eashoward public String getElementId() { 1791c390f85167cfd1c14f9500bb20b05a9e677c0eashoward return "view_host"; 1801c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 1811c390f85167cfd1c14f9500bb20b05a9e677c0eashoward 1826bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 1831c390f85167cfd1c14f9500bb20b05a9e677c0eashoward protected String getFetchControlsElementId() { 1841c390f85167cfd1c14f9500bb20b05a9e677c0eashoward return "view_host_fetch_controls"; 1851c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 1866f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 18779ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo private String getFetchByHostnameControlsElementId() { 18879ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo return "view_host_fetch_by_hostname_controls"; 18979ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo } 19079ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo 1916bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 1921c390f85167cfd1c14f9500bb20b05a9e677c0eashoward protected String getDataElementId() { 1931c390f85167cfd1c14f9500bb20b05a9e677c0eashoward return "view_host_data"; 1941c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 1956f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 1966bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 1971c390f85167cfd1c14f9500bb20b05a9e677c0eashoward protected String getTitleElementId() { 1981c390f85167cfd1c14f9500bb20b05a9e677c0eashoward return "view_host_title"; 1991c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 2001c390f85167cfd1c14f9500bb20b05a9e677c0eashoward 2016bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 2021c390f85167cfd1c14f9500bb20b05a9e677c0eashoward protected String getNoObjectText() { 2031c390f85167cfd1c14f9500bb20b05a9e677c0eashoward return "No host selected"; 2041c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 2056f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 2066bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 2071c390f85167cfd1c14f9500bb20b05a9e677c0eashoward protected String getObjectId() { 20879ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo return hostId; 2091c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 2106f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 2113bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo protected String getHostname() { 2123bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo return hostname; 2133bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo } 2143bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo 2156bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 2161c390f85167cfd1c14f9500bb20b05a9e677c0eashoward protected void setObjectId(String id) { 2176f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li if (id.length() == 0) { 2181c390f85167cfd1c14f9500bb20b05a9e677c0eashoward throw new IllegalArgumentException(); 2196f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 22079ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo this.hostId = id; 2211c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 2226f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 2236bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 2241c390f85167cfd1c14f9500bb20b05a9e677c0eashoward protected void fetchData() { 2251c390f85167cfd1c14f9500bb20b05a9e677c0eashoward JSONObject params = new JSONObject(); 22679ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo params.put("id", new JSONString(getObjectId())); 22779ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo fetchDataCommmon(params); 22879ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo } 22979ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo 23079ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo private void fetchDataByHostname(String hostname) { 23179ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo JSONObject params = new JSONObject(); 2321c390f85167cfd1c14f9500bb20b05a9e677c0eashoward params.put("hostname", new JSONString(hostname)); 23379ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo fetchDataCommmon(params); 23479ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo } 23579ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo 23679ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo private void fetchDataCommmon(JSONObject params) { 2378aa84fcb18489265208f291a7fc3c33799696eaeshoward params.put("valid_only", JSONBoolean.getInstance(false)); 238b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward hostDataSource.query(params, this); 2391c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 240b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward 24179ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo private void fetchByHostname(String hostname) { 24279ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo fetchDataByHostname(hostname); 24379ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo updateHistory(); 24479ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo } 24579ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo 246b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward @Override 247b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward public void handleTotalResultCount(int totalCount) {} 248b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward 249b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward @Override 250b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward public void onQueryReady(Query query) { 251b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward query.getPage(null, null, null, this); 252b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 253b9c6617bdc063b3b4aa760a0a45190ee069139fdshoward 2544879914c122f4ed97eae3b08c5af1930fd75b39dshoward public void handlePage(List<JSONObject> data) { 255b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard try { 2564879914c122f4ed97eae3b08c5af1930fd75b39dshoward currentHostObject = Utils.getSingleObjectFromList(data); 257b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 258b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard catch (IllegalArgumentException exc) { 259b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard NotifyManager.getInstance().showError("No such host found"); 260b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard resetPage(); 261b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard return; 262b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 2636f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 26479ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo setObjectId(currentHostObject.get("id").toString()); 26579ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo 26642d4d6221bed50117da283d7ad8917b5eaf414e3showard String lockedText = Utils.jsonToString(currentHostObject.get(HostDataSource.LOCKED_TEXT)); 26742d4d6221bed50117da283d7ad8917b5eaf414e3showard if (currentHostObject.get("locked").isBoolean().booleanValue()) { 26842d4d6221bed50117da283d7ad8917b5eaf414e3showard String lockedBy = Utils.jsonToString(currentHostObject.get("locked_by")); 26942d4d6221bed50117da283d7ad8917b5eaf414e3showard String lockedTime = Utils.jsonToString(currentHostObject.get("lock_time")); 2706818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori String lockReasonText = Utils.jsonToString(currentHostObject.get("lock_reason")); 27142d4d6221bed50117da283d7ad8917b5eaf414e3showard lockedText += ", by " + lockedBy + " on " + lockedTime; 2726818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori lockedText += ", reason: " + lockReasonText; 27342d4d6221bed50117da283d7ad8917b5eaf414e3showard } 2746f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 275e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard showField(currentHostObject, "status", "view_host_status"); 276e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard showField(currentHostObject, "platform", "view_host_platform"); 277e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard showField(currentHostObject, HostDataSource.HOST_ACLS, "view_host_acls"); 278e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard showField(currentHostObject, HostDataSource.OTHER_LABELS, "view_host_labels"); 27942d4d6221bed50117da283d7ad8917b5eaf414e3showard showText(lockedText, "view_host_locked"); 28005e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian String shard_url = Utils.jsonToString(currentHostObject.get("shard")).trim(); 28105e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian String host_id = Utils.jsonToString(currentHostObject.get("id")).trim(); 28205e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian if (shard_url.equals("<null>")){ 28305e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian shard_url = ""; 28405e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian } else { 28505e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian shard_url = "http://" + shard_url; 28605e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian } 28705e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian shard_url = shard_url + "/afe/#tab_id=view_host&object_id=" + host_id; 28805e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian showField(currentHostObject, "shard", "view_host_shard"); 28905e94c488c55bf764f27e9c112d1dda6f03d2d7dPrashanth Balasubramanian getElementById("view_host_shard").setAttribute("href", shard_url); 29037df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi 29137df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi String job_id = Utils.jsonToString(currentHostObject.get("current_job")).trim(); 29237df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi if (!job_id.equals("<null>")){ 29337df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi String job_url = "#tab_id=view_job&object_id=" + job_id; 29437df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi showField(currentHostObject, "current_job", "view_host_current_job"); 29537df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi getElementById("view_host_current_job").setAttribute("href", job_url); 29637df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi } 29779ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo hostname = currentHostObject.get("hostname").isString().stringValue(); 29837df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi 29937df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi String task = Utils.jsonToString(currentHostObject.get("current_special_task")).trim(); 30037df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi if (!task.equals("<null>")){ 30137df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi String task_url = Utils.getRetrieveLogsUrl("hosts/" + hostname + "/" + task); 30237df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi showField(currentHostObject, "current_special_task", "view_host_current_special_task"); 30337df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi getElementById("view_host_current_special_task").setAttribute("href", task_url); 30437df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi } 30537df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi 30637df54d11d7598f6b7192b5a397d6e9ca05bf8e3Dan Shi showField(currentHostObject, "protection", "view_host_protection"); 3076bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward String pageTitle = "Host " + hostname; 30879ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo hostnameInput.setText(hostname); 309c6645c5789a6c8e15290ccba0d643b7b8ad173d6Dan Shi hostnameInput.setWidth("240px"); 310e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard updateLockButton(); 3116818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori updateLockReasonInput(); 3126bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward displayObjectData(pageTitle); 3136f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 31479ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo jobsTable.setHostId(getObjectId()); 315b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard jobsTable.refresh(); 316b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 3176f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 3186bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward @Override 3191c390f85167cfd1c14f9500bb20b05a9e677c0eashoward public void initialize() { 3201c390f85167cfd1c14f9500bb20b05a9e677c0eashoward super.initialize(); 3216f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 32279ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo // Replace fetch by id with fetch by hostname 32379ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo addWidget(hostnameInput, getFetchByHostnameControlsElementId()); 32479ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo addWidget(hostnameFetchButton, getFetchByHostnameControlsElementId()); 32579ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo 32679ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo hostnameInput.addKeyPressHandler(new KeyPressHandler() { 32779ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo public void onKeyPress (KeyPressEvent event) { 32879ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo if (event.getCharCode() == (char) KeyCodes.KEY_ENTER) 32979ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo fetchByHostname(hostnameInput.getText()); 33079ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo } 33179ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo }); 33279ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo hostnameFetchButton.addClickHandler(new ClickHandler() { 33379ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo public void onClick(ClickEvent event) { 33479ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo fetchByHostname(hostnameInput.getText()); 33579ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo } 33679ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo }); 33779ce642210e581dc2b5cc1df1876e98dae38b286Jiaxi Luo 3381c390f85167cfd1c14f9500bb20b05a9e677c0eashoward jobsTable.setRowsPerPage(JOBS_PER_PAGE); 339b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard jobsTable.setClickable(true); 340b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard jobsTable.addListener(new DynamicTableListener() { 3414cd4763a855d8eb7d25fd4963babc432eb4d25e6showard public void onRowClicked(int rowIndex, JSONObject row, boolean isRightClick) { 342c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard if (isJobRow(row)) { 343c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard JSONObject job = row.get("job").isObject(); 344c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard int jobId = (int) job.get("id").isNumber().doubleValue(); 3451fe34c4612727e711818f1414072149f685e364eshoward hostDetailListener.onJobSelected(jobId); 346c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } else { 347aa3c687e0c87cd7323054fbb1064b448728da7e7showard String resultsPath = Utils.jsonToString(row.get("execution_path")); 348aa3c687e0c87cd7323054fbb1064b448728da7e7showard Utils.openUrlInNewWindow(Utils.getRetrieveLogsUrl(resultsPath)); 349c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 350b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard } 351b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard 352b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard public void onTableRefreshed() {} 353b8d3424d02cfdc6c3eeda788e3527c5ec50ad8f9showard }); 3541c390f85167cfd1c14f9500bb20b05a9e677c0eashoward tableDecorator.addPaginators(); 3559dbdcda5104991cbf344ea5cba1aa58e1af444f3showard selectionManager = tableDecorator.addSelectionManager(false); 3569dbdcda5104991cbf344ea5cba1aa58e1af444f3showard jobsTable.setWidgetFactory(selectionManager); 3579dbdcda5104991cbf344ea5cba1aa58e1af444f3showard tableDecorator.addTableActionsPanel(this, true); 35807e09aff0baf871b33e5479e337e5e3e0523b729Dan Shi tableDecorator.addControl("Show verifies, repairs, cleanups and resets", 35907e09aff0baf871b33e5479e337e5e3e0523b729Dan Shi showSpecialTasks); 36057bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo tableDecorator.addFilter("Filter by time started:", 36157bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo startedTimeFilter); 3629e494cc00c53f9dd0fabec3ef675cb874a9130adshoward addWidget(tableDecorator, "view_host_jobs_table"); 3636f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 364a5e4d84c9616b0a987e904d3b1d1d3fd9ca1be86showard showSpecialTasks.addClickHandler(new ClickHandler() { 365a5e4d84c9616b0a987e904d3b1d1d3fd9ca1be86showard public void onClick(ClickEvent event) { 366cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo selectionManager.deselectAll(); 3677f2b0e15c5928ea2914d078e385ca717d078c6d5showard jobsTable.setSpecialTasksEnabled(showSpecialTasks.getValue()); 368c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard jobsTable.refresh(); 369c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 370c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard }); 3716f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 37257bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo startedTimeFilter.addValueChangeHandler( 37357bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo new ValueChangeHandler() { 37457bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo public void onValueChange(ValueChangeEvent event) { 37557bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo String value = (String) event.getValue(); 37657bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo jobsTable.setStartTime(value); 37757bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo if (value == "") 37857bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo startedTimeFilter.setStartTimeToPlaceHolderValue(); 37957bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo jobsTable.refresh(); 38057bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo } 38157bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo }, 38257bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo new ValueChangeHandler() { 38357bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo public void onValueChange(ValueChangeEvent event) { 38457bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo String value = (String) event.getValue(); 38557bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo jobsTable.setEndTime(value); 38657bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo if (value == "") 38757bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo startedTimeFilter.setEndTimeToPlaceHolderValue(); 38857bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo jobsTable.refresh(); 38957bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo } 39057bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo } 39157bc195c551d71c5268d7630aa6e872aaad242bfJiaxi Luo ); 3926818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori 3939e494cc00c53f9dd0fabec3ef675cb874a9130adshoward addWidget(lockButton, "view_host_lock_button"); 3946818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori addWidget(lockReasonInput, "view_host_lock_reason_input"); 3956818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori 3966818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori lockButton.addClickHandler(new ClickHandler() { 3976818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori public void onClick(ClickEvent event) { 3986818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori boolean locked = currentHostObject.get("locked").isBoolean().booleanValue(); 3996818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori changeLock(!locked); 4006818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori } 4016818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori }); 4026818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori lockReasonInput.addKeyPressHandler(new KeyPressHandler() { 4036818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori public void onKeyPress (KeyPressEvent event) { 4046818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori if (event.getCharCode() == (char) KeyCodes.KEY_ENTER) { 4056818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori boolean locked = currentHostObject.get("locked").isBoolean().booleanValue(); 4066818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori changeLock(!locked); 4076818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori } 4086818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori } 4096818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori }); 4106f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 411a5e4d84c9616b0a987e904d3b1d1d3fd9ca1be86showard reverifyButton.addClickHandler(new ClickHandler() { 412a5e4d84c9616b0a987e904d3b1d1d3fd9ca1be86showard public void onClick(ClickEvent event) { 413d9642c07837d093b13bc5c32132874f8ecce5d5dshoward JSONObject params = new JSONObject(); 4146f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 415d9642c07837d093b13bc5c32132874f8ecce5d5dshoward params.put("id", currentHostObject.get("id")); 416d9642c07837d093b13bc5c32132874f8ecce5d5dshoward AfeUtils.callReverify(params, new SimpleCallback() { 417d9642c07837d093b13bc5c32132874f8ecce5d5dshoward public void doCallback(Object source) { 418d9642c07837d093b13bc5c32132874f8ecce5d5dshoward refresh(); 419d9642c07837d093b13bc5c32132874f8ecce5d5dshoward } 420d9642c07837d093b13bc5c32132874f8ecce5d5dshoward }, "Host " + hostname); 421d9642c07837d093b13bc5c32132874f8ecce5d5dshoward } 422d9642c07837d093b13bc5c32132874f8ecce5d5dshoward }); 4239e494cc00c53f9dd0fabec3ef675cb874a9130adshoward addWidget(reverifyButton, "view_host_reverify_button"); 4246f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 42573dae55766b9c8b6922194901e334c4e52f67d14Simran Basi repairButton.addClickHandler(new ClickHandler() { 42673dae55766b9c8b6922194901e334c4e52f67d14Simran Basi public void onClick(ClickEvent event) { 42773dae55766b9c8b6922194901e334c4e52f67d14Simran Basi JSONObject params = new JSONObject(); 42873dae55766b9c8b6922194901e334c4e52f67d14Simran Basi 42973dae55766b9c8b6922194901e334c4e52f67d14Simran Basi params.put("id", currentHostObject.get("id")); 43073dae55766b9c8b6922194901e334c4e52f67d14Simran Basi AfeUtils.callRepair(params, new SimpleCallback() { 43173dae55766b9c8b6922194901e334c4e52f67d14Simran Basi public void doCallback(Object source) { 43273dae55766b9c8b6922194901e334c4e52f67d14Simran Basi refresh(); 43373dae55766b9c8b6922194901e334c4e52f67d14Simran Basi } 43473dae55766b9c8b6922194901e334c4e52f67d14Simran Basi }, "Host " + hostname); 43573dae55766b9c8b6922194901e334c4e52f67d14Simran Basi } 43673dae55766b9c8b6922194901e334c4e52f67d14Simran Basi }); 43773dae55766b9c8b6922194901e334c4e52f67d14Simran Basi addWidget(repairButton, "view_host_repair_button"); 4381c390f85167cfd1c14f9500bb20b05a9e677c0eashoward } 4395e2c70db8586bcd4c47fe6e5173357539c84cc57showard 4405e2c70db8586bcd4c47fe6e5173357539c84cc57showard public void onError(JSONObject errorObject) { 4415e2c70db8586bcd4c47fe6e5173357539c84cc57showard // RPC handler will display error 4425e2c70db8586bcd4c47fe6e5173357539c84cc57showard } 4439dbdcda5104991cbf344ea5cba1aa58e1af444f3showard 4449dbdcda5104991cbf344ea5cba1aa58e1af444f3showard public ContextMenu getActionMenu() { 4459dbdcda5104991cbf344ea5cba1aa58e1af444f3showard ContextMenu menu = new ContextMenu(); 446cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo menu.addItem("Abort", new Command() { 4479dbdcda5104991cbf344ea5cba1aa58e1af444f3showard public void execute() { 448cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo abortSelectedQueueEntriesAndSpecialTasks(); 4499dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 4509dbdcda5104991cbf344ea5cba1aa58e1af444f3showard }); 4516c40be4575c9101d99027ce9a6ca71b7e4962f85Jiaxi Luo if (selectionManager.isEmpty()) 4526c40be4575c9101d99027ce9a6ca71b7e4962f85Jiaxi Luo menu.setEnabled(false); 4539dbdcda5104991cbf344ea5cba1aa58e1af444f3showard return menu; 4549dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 4559dbdcda5104991cbf344ea5cba1aa58e1af444f3showard 456cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo private void abortSelectedQueueEntriesAndSpecialTasks() { 457cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo Set<JSONObject> selectedEntries = selectionManager.getSelectedObjects(); 458cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo Set<JSONObject> selectedQueueEntries = new JSONObjectSet<JSONObject>(); 459cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo JSONArray selectedSpecialTaskIds = new JSONArray(); 460cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo for (JSONObject entry : selectedEntries) { 461cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo if (isJobRow(entry)) 462cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo selectedQueueEntries.add(entry); 463cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo else 464cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo selectedSpecialTaskIds.set(selectedSpecialTaskIds.size(), 465cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo entry.get("oid")); 466cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 467cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo if (!selectedQueueEntries.isEmpty()) { 468cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo AfeUtils.abortHostQueueEntries(selectedQueueEntries, new SimpleCallback() { 469cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo public void doCallback(Object source) { 470cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo refresh(); 471cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 472cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo }); 473cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 474cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo if (selectedSpecialTaskIds.size() > 0) { 475cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo AfeUtils.abortSpecialTasks(selectedSpecialTaskIds, new SimpleCallback() { 476cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo public void doCallback(Object source) { 477cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo refresh(); 478cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 479cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo }); 480cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 4819dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 4826f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 483e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard private void updateLockButton() { 484e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard boolean locked = currentHostObject.get("locked").isBoolean().booleanValue(); 485e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard if (locked) { 486e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard lockButton.setText("Unlock"); 487e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard } else { 488e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard lockButton.setText("Lock"); 489e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard } 490e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard } 4916f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 4926818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori private void updateLockReasonInput() { 4936818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori boolean locked = currentHostObject.get("locked").isBoolean().booleanValue(); 4946818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori if (locked) { 4956818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori lockReasonInput.setText(""); 4966818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori lockReasonInput.setEnabled(false); 4976818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori } else { 4986818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori lockReasonInput.setEnabled(true); 4996818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori } 5006818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori } 5016818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori 502e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard private void changeLock(final boolean lock) { 503e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard JSONArray hostIds = new JSONArray(); 504e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard hostIds.set(0, currentHostObject.get("id")); 5056f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 5066818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori AfeUtils.changeHostLocks(hostIds, lock, lockReasonInput.getText(), 5076818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori "Host " + hostname, new SimpleCallback() { 508e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard public void doCallback(Object source) { 509e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard refresh(); 510e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard } 511e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard }); 512e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard } 5136f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 514c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard private boolean isJobRow(JSONObject row) { 515c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard String type = Utils.jsonToString(row.get("type")); 516c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard return type.equals("Job"); 517c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 518c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard 519c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard public boolean isRowSelectable(JSONObject row) { 520c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard return isJobRow(row); 521c0ac3a79cceec87873257a8b6d41d19c9fb02ec6showard } 5223bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo 5233bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo @Override 5243bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo public void handleHistoryArguments(Map<String, String> arguments) { 5253bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo String hostname = arguments.get("hostname"); 5263bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo String objectId = arguments.get("object_id"); 5273bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo 5283bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo if (objectId != null) { 5293bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo try { 5303bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo updateObjectId(objectId); 5313bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo } 5323bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo catch (IllegalArgumentException exc) { 5333bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo return; 5343bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo } 5353bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo } else if (hostname != null) { 5363bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo fetchDataByHostname(hostname); 5373bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo } else { 5383bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo resetPage(); 5393bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo } 5403bb15cfa61fd3f5ff766000ed1b84a27815875c8Jiaxi Luo } 5411c390f85167cfd1c14f9500bb20b05a9e677c0eashoward} 542