1a2216e7e327b464ac03932b4add2983e9052bc79showardpackage autotest.afe; 2a2216e7e327b464ac03932b4add2983e9052bc79showard 36f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.afe.create.CreateJobViewPresenter.JobCreateListener; 49dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.JSONArrayList; 59dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.JsonRpcCallback; 69dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.JsonRpcProxy; 79dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.SimpleCallback; 8acdbe3535529a24555d874a8038993c62fd690c2showardimport autotest.common.StaticDataRepository; 99dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.Utils; 109dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.table.JSONObjectSet; 119dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport autotest.common.ui.NotifyManager; 126f27d4f22a1ba5063968b8c322fa0845f3279adeEric Liimport autotest.common.ui.SimplifiedList; 13acdbe3535529a24555d874a8038993c62fd690c2showard 14a2216e7e327b464ac03932b4add2983e9052bc79showardimport com.google.gwt.json.client.JSONArray; 15e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showardimport com.google.gwt.json.client.JSONBoolean; 16a2216e7e327b464ac03932b4add2983e9052bc79showardimport com.google.gwt.json.client.JSONObject; 17a2216e7e327b464ac03932b4add2983e9052bc79showardimport com.google.gwt.json.client.JSONString; 189dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport com.google.gwt.json.client.JSONValue; 1976fcf19ec42d5c7580d2e7891e4610e5fe725286jamesrenimport com.google.gwt.user.client.DOM; 2076fcf19ec42d5c7580d2e7891e4610e5fe725286jamesrenimport com.google.gwt.user.client.Element; 2176fcf19ec42d5c7580d2e7891e4610e5fe725286jamesrenimport com.google.gwt.user.client.ui.ListBox; 22a2216e7e327b464ac03932b4add2983e9052bc79showard 23c9d462b1b48a8cd109308453dd5eb610dd7108cbshowardimport java.util.ArrayList; 249dbdcda5104991cbf344ea5cba1aa58e1af444f3showardimport java.util.Collection; 25a2216e7e327b464ac03932b4add2983e9052bc79showardimport java.util.Iterator; 26c9d462b1b48a8cd109308453dd5eb610dd7108cbshowardimport java.util.List; 27a2216e7e327b464ac03932b4add2983e9052bc79showardimport java.util.Set; 28a2216e7e327b464ac03932b4add2983e9052bc79showard 29a2216e7e327b464ac03932b4add2983e9052bc79showard/** 30a2216e7e327b464ac03932b4add2983e9052bc79showard * Utility methods. 31a2216e7e327b464ac03932b4add2983e9052bc79showard */ 32a2216e7e327b464ac03932b4add2983e9052bc79showardpublic class AfeUtils { 33a2216e7e327b464ac03932b4add2983e9052bc79showard public static final String PLATFORM_SUFFIX = " (platform)"; 34589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 35a2216e7e327b464ac03932b4add2983e9052bc79showard public static final ClassFactory factory = new SiteClassFactory(); 360fc3830f17d644bab74bfe38556299f5e58bc0fashoward 370fc3830f17d644bab74bfe38556299f5e58bc0fashoward private static StaticDataRepository staticData = StaticDataRepository.getRepository(); 38589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 39a2216e7e327b464ac03932b4add2983e9052bc79showard public static String formatStatusCounts(JSONObject counts, String joinWith) { 40589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren StringBuilder result = new StringBuilder(); 416bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward Set<String> statusSet = counts.keySet(); 426bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward for (Iterator<String> i = statusSet.iterator(); i.hasNext();) { 436bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward String status = i.next(); 446bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward int count = (int) counts.get(status).isNumber().doubleValue(); 45589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren result.append(Integer.toString(count)); 46589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren result.append(" "); 47589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren result.append(status); 48589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren if (i.hasNext()) { 49589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren result.append(joinWith); 50589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren } 51a2216e7e327b464ac03932b4add2983e9052bc79showard } 52589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren return result.toString(); 53a2216e7e327b464ac03932b4add2983e9052bc79showard } 54589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 55a2216e7e327b464ac03932b4add2983e9052bc79showard public static String[] getLabelStrings() { 56c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward return getFilteredLabelStrings(false, false); 57c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward } 58589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 59c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward protected static String[] getFilteredLabelStrings(boolean onlyPlatforms, 60c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward boolean onlyNonPlatforms) { 616f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li assert !(onlyPlatforms && onlyNonPlatforms); 62a2216e7e327b464ac03932b4add2983e9052bc79showard JSONArray labels = staticData.getData("labels").isArray(); 63c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward List<String> result = new ArrayList<String>(); 64a2216e7e327b464ac03932b4add2983e9052bc79showard for (int i = 0; i < labels.size(); i++) { 65a2216e7e327b464ac03932b4add2983e9052bc79showard JSONObject label = labels.get(i).isObject(); 66a2216e7e327b464ac03932b4add2983e9052bc79showard String name = label.get("name").isString().stringValue(); 6721baa459ea14f96e06212f1f35fcddab9442b3fcshoward boolean labelIsPlatform = label.get("platform").isBoolean().booleanValue(); 686f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li if (onlyPlatforms && labelIsPlatform || 696f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li onlyNonPlatforms && !labelIsPlatform) { 70c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward result.add(name); 71c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward } else if (!onlyPlatforms && !onlyNonPlatforms) { 72c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward if (labelIsPlatform) { 73c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward name += PLATFORM_SUFFIX; 74c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward } 75c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward result.add(name); 76a2216e7e327b464ac03932b4add2983e9052bc79showard } 77a2216e7e327b464ac03932b4add2983e9052bc79showard } 786bc47015cce0ebc2fc255d3950bfeaf4851f36fdshoward return result.toArray(new String[result.size()]); 79c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward } 800228f1407cce41f6567b7200a4fed7be6f4b5511showard 81c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward public static String[] getPlatformStrings() { 820228f1407cce41f6567b7200a4fed7be6f4b5511showard return getFilteredLabelStrings(true, false); 83c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward } 84589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 85c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward public static String[] getNonPlatformLabelStrings() { 86c9d462b1b48a8cd109308453dd5eb610dd7108cbshoward return getFilteredLabelStrings(false, true); 87a2216e7e327b464ac03932b4add2983e9052bc79showard } 880228f1407cce41f6567b7200a4fed7be6f4b5511showard 89a2216e7e327b464ac03932b4add2983e9052bc79showard public static String decodeLabelName(String labelName) { 900228f1407cce41f6567b7200a4fed7be6f4b5511showard String name = labelName; 910228f1407cce41f6567b7200a4fed7be6f4b5511showard if (name.endsWith(PLATFORM_SUFFIX)) { 920228f1407cce41f6567b7200a4fed7be6f4b5511showard int nameLength = name.length() - PLATFORM_SUFFIX.length(); 930228f1407cce41f6567b7200a4fed7be6f4b5511showard name = name.substring(0, nameLength); 940228f1407cce41f6567b7200a4fed7be6f4b5511showard } 950228f1407cce41f6567b7200a4fed7be6f4b5511showard return name; 96a2216e7e327b464ac03932b4add2983e9052bc79showard } 970228f1407cce41f6567b7200a4fed7be6f4b5511showard 98a2216e7e327b464ac03932b4add2983e9052bc79showard public static JSONString getLockedText(JSONObject host) { 9921baa459ea14f96e06212f1f35fcddab9442b3fcshoward boolean locked = host.get("locked").isBoolean().booleanValue(); 100a2216e7e327b464ac03932b4add2983e9052bc79showard return new JSONString(locked ? "Yes" : "No"); 101a2216e7e327b464ac03932b4add2983e9052bc79showard } 102589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 103589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren public static void abortHostQueueEntries(Collection<JSONObject> entries, 1049dbdcda5104991cbf344ea5cba1aa58e1af444f3showard final SimpleCallback onSuccess) { 1059dbdcda5104991cbf344ea5cba1aa58e1af444f3showard if (entries.isEmpty()) { 1069dbdcda5104991cbf344ea5cba1aa58e1af444f3showard NotifyManager.getInstance().showError("No entries selected to abort"); 1079dbdcda5104991cbf344ea5cba1aa58e1af444f3showard return; 1089dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 109589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 1109dbdcda5104991cbf344ea5cba1aa58e1af444f3showard final JSONArray asynchronousEntryIds = new JSONArray(); 1112bab8f45adedeacbf2d62d37b90255581adc3c7dshoward Set<JSONObject> synchronousEntries = new JSONObjectSet<JSONObject>(); 1129dbdcda5104991cbf344ea5cba1aa58e1af444f3showard for (JSONObject entry : entries) { 1139dbdcda5104991cbf344ea5cba1aa58e1af444f3showard JSONObject job = entry.get("job").isObject(); 1142bab8f45adedeacbf2d62d37b90255581adc3c7dshoward int synchCount = (int) job.get("synch_count").isNumber().doubleValue(); 115589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren boolean hasExecutionSubdir = 116cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo entry.containsKey("execution_subdir") && 1172bab8f45adedeacbf2d62d37b90255581adc3c7dshoward !Utils.jsonToString(entry.get("execution_subdir")).equals(""); 1182bab8f45adedeacbf2d62d37b90255581adc3c7dshoward if (synchCount > 1 && hasExecutionSubdir) { 1192bab8f45adedeacbf2d62d37b90255581adc3c7dshoward synchronousEntries.add(entry); 1209dbdcda5104991cbf344ea5cba1aa58e1af444f3showard continue; 1219dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 1229dbdcda5104991cbf344ea5cba1aa58e1af444f3showard 1239dbdcda5104991cbf344ea5cba1aa58e1af444f3showard JSONValue idListValue = entry.get("id_list"); 1249dbdcda5104991cbf344ea5cba1aa58e1af444f3showard if (idListValue != null) { 1259dbdcda5104991cbf344ea5cba1aa58e1af444f3showard // metahost row 1269dbdcda5104991cbf344ea5cba1aa58e1af444f3showard extendJsonArray(asynchronousEntryIds, idListValue.isArray()); 1279dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } else { 128cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo JSONValue id = entry.get("id"); 129cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo if (entry.containsKey("oid")) 130cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo id = entry.get("oid"); 131cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo asynchronousEntryIds.set(asynchronousEntryIds.size(), id); 1329dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 1339dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 134589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 1359dbdcda5104991cbf344ea5cba1aa58e1af444f3showard SimpleCallback abortAsynchronousEntries = new SimpleCallback() { 1369dbdcda5104991cbf344ea5cba1aa58e1af444f3showard public void doCallback(Object source) { 1379dbdcda5104991cbf344ea5cba1aa58e1af444f3showard JSONObject params = new JSONObject(); 1389dbdcda5104991cbf344ea5cba1aa58e1af444f3showard params.put("id__in", asynchronousEntryIds); 1399dbdcda5104991cbf344ea5cba1aa58e1af444f3showard AfeUtils.callAbort(params, onSuccess); 1409dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 1419dbdcda5104991cbf344ea5cba1aa58e1af444f3showard }; 142589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 1432bab8f45adedeacbf2d62d37b90255581adc3c7dshoward if (synchronousEntries.size() == 0) { 1449dbdcda5104991cbf344ea5cba1aa58e1af444f3showard abortAsynchronousEntries.doCallback(null); 1459dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } else { 1469dbdcda5104991cbf344ea5cba1aa58e1af444f3showard AbortSynchronousDialog dialog = new AbortSynchronousDialog( 1472bab8f45adedeacbf2d62d37b90255581adc3c7dshoward abortAsynchronousEntries, synchronousEntries, asynchronousEntryIds.size() != 0); 1489dbdcda5104991cbf344ea5cba1aa58e1af444f3showard dialog.center(); 1499dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 1509dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 1519dbdcda5104991cbf344ea5cba1aa58e1af444f3showard 152cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo public static void abortSpecialTasks(final JSONArray specialTaskIds, 153cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo final SimpleCallback onSuccess) { 154cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo if (specialTaskIds.size() == 0) { 155cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo NotifyManager.getInstance().showError("No entries selected to abort"); 156cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo return; 157cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 158cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo 159cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo SimpleCallback abortSpecialTasks = new SimpleCallback() { 160cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo public void doCallback(Object source) { 161cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo JSONObject params = new JSONObject(); 162cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo params.put("id__in", specialTaskIds); 163cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo AfeUtils.callAbortSpecialTasks(params, onSuccess); 164cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 165cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo }; 166cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo 167cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo abortSpecialTasks.doCallback(null); 168cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 169cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo 1709dbdcda5104991cbf344ea5cba1aa58e1af444f3showard private static void extendJsonArray(JSONArray array, JSONArray newValues) { 1719dbdcda5104991cbf344ea5cba1aa58e1af444f3showard for (JSONValue value : new JSONArrayList<JSONValue>(newValues)) { 1729dbdcda5104991cbf344ea5cba1aa58e1af444f3showard array.set(array.size(), value); 1739dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 1749dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 175589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 1762bab8f45adedeacbf2d62d37b90255581adc3c7dshoward public static void callAbort(JSONObject params, final SimpleCallback onSuccess, 1772bab8f45adedeacbf2d62d37b90255581adc3c7dshoward final boolean showMessage) { 1789dbdcda5104991cbf344ea5cba1aa58e1af444f3showard JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(); 1799dbdcda5104991cbf344ea5cba1aa58e1af444f3showard rpcProxy.rpcCall("abort_host_queue_entries", params, new JsonRpcCallback() { 1809dbdcda5104991cbf344ea5cba1aa58e1af444f3showard @Override 1819dbdcda5104991cbf344ea5cba1aa58e1af444f3showard public void onSuccess(JSONValue result) { 1822bab8f45adedeacbf2d62d37b90255581adc3c7dshoward if (showMessage) { 1832bab8f45adedeacbf2d62d37b90255581adc3c7dshoward NotifyManager.getInstance().showMessage("Jobs aborted"); 1842bab8f45adedeacbf2d62d37b90255581adc3c7dshoward } 1859dbdcda5104991cbf344ea5cba1aa58e1af444f3showard if (onSuccess != null) { 1869dbdcda5104991cbf344ea5cba1aa58e1af444f3showard onSuccess.doCallback(null); 1879dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 1889dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 1899dbdcda5104991cbf344ea5cba1aa58e1af444f3showard }); 1909dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 191589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 1922bab8f45adedeacbf2d62d37b90255581adc3c7dshoward public static void callAbort(JSONObject params, final SimpleCallback onSuccess) { 1932bab8f45adedeacbf2d62d37b90255581adc3c7dshoward callAbort(params, onSuccess, true); 1942bab8f45adedeacbf2d62d37b90255581adc3c7dshoward } 195589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 196cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo public static void callAbortSpecialTasks(JSONObject params, final SimpleCallback onSuccess, 197cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo final boolean showMessage) { 198cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(); 199cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo rpcProxy.rpcCall("abort_special_tasks", params, new JsonRpcCallback() { 200cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo @Override 201cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo public void onSuccess(JSONValue result) { 202cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo if (showMessage) { 203cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo NotifyManager.getInstance().showMessage("Special tasks aborted"); 204cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 205cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo if (onSuccess != null) { 206cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo onSuccess.doCallback(null); 207cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 208cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 209cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo }); 210cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 211cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo 212cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo public static void callAbortSpecialTasks(JSONObject params, final SimpleCallback onSuccess) { 213cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo callAbortSpecialTasks(params, onSuccess, true); 214cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo } 215cb91d2eb70554b4f1e18ff5f5ec29a6b8cb3d9a8Jiaxi Luo 216d9642c07837d093b13bc5c32132874f8ecce5d5dshoward public static void callReverify(JSONObject params, final SimpleCallback onSuccess, 217d9642c07837d093b13bc5c32132874f8ecce5d5dshoward final String messagePrefix) { 2181ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(); 2191ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard rpcProxy.rpcCall("reverify_hosts", params, new JsonRpcCallback() { 2201ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard @Override 2211ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard public void onSuccess(JSONValue result) { 222589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 2231ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard NotifyManager.getInstance().showMessage( 224d9642c07837d093b13bc5c32132874f8ecce5d5dshoward messagePrefix + " scheduled for reverification"); 225589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 2261ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard if (onSuccess != null) { 2271ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard onSuccess.doCallback(null); 2281ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard } 2291ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard } 2301ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard }); 2311ff7b2e88ae7a382f85ab76e786a471134e8a6a0showard } 232589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 23373dae55766b9c8b6922194901e334c4e52f67d14Simran Basi public static void callRepair(JSONObject params, final SimpleCallback onSuccess, 23473dae55766b9c8b6922194901e334c4e52f67d14Simran Basi final String messagePrefix) { 23573dae55766b9c8b6922194901e334c4e52f67d14Simran Basi JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(); 23673dae55766b9c8b6922194901e334c4e52f67d14Simran Basi rpcProxy.rpcCall("repair_hosts", params, new JsonRpcCallback() { 23773dae55766b9c8b6922194901e334c4e52f67d14Simran Basi @Override 23873dae55766b9c8b6922194901e334c4e52f67d14Simran Basi public void onSuccess(JSONValue result) { 23973dae55766b9c8b6922194901e334c4e52f67d14Simran Basi 24073dae55766b9c8b6922194901e334c4e52f67d14Simran Basi NotifyManager.getInstance().showMessage( 24173dae55766b9c8b6922194901e334c4e52f67d14Simran Basi messagePrefix + " scheduled for repair"); 24273dae55766b9c8b6922194901e334c4e52f67d14Simran Basi 24373dae55766b9c8b6922194901e334c4e52f67d14Simran Basi if (onSuccess != null) { 24473dae55766b9c8b6922194901e334c4e52f67d14Simran Basi onSuccess.doCallback(null); 24573dae55766b9c8b6922194901e334c4e52f67d14Simran Basi } 24673dae55766b9c8b6922194901e334c4e52f67d14Simran Basi } 24773dae55766b9c8b6922194901e334c4e52f67d14Simran Basi }); 24873dae55766b9c8b6922194901e334c4e52f67d14Simran Basi } 24973dae55766b9c8b6922194901e334c4e52f67d14Simran Basi 250276f9443bbfc12c781d86f51dab5d8988e2090f5showard public static void callModifyHosts(JSONObject params, final SimpleCallback onSuccess) { 251276f9443bbfc12c781d86f51dab5d8988e2090f5showard JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(); 252276f9443bbfc12c781d86f51dab5d8988e2090f5showard rpcProxy.rpcCall("modify_hosts", params, new JsonRpcCallback() { 253276f9443bbfc12c781d86f51dab5d8988e2090f5showard @Override 254276f9443bbfc12c781d86f51dab5d8988e2090f5showard public void onSuccess(JSONValue result) { 255276f9443bbfc12c781d86f51dab5d8988e2090f5showard if (onSuccess != null) { 256276f9443bbfc12c781d86f51dab5d8988e2090f5showard onSuccess.doCallback(null); 257276f9443bbfc12c781d86f51dab5d8988e2090f5showard } 258276f9443bbfc12c781d86f51dab5d8988e2090f5showard } 259276f9443bbfc12c781d86f51dab5d8988e2090f5showard }); 260276f9443bbfc12c781d86f51dab5d8988e2090f5showard } 261589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 262e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard public static void changeHostLocks(JSONArray hostIds, final boolean lock, 2636818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori String lockReason, final String messagePrefix, 2646818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori final SimpleCallback callback) { 265e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard JSONObject hostFilterData = new JSONObject(); 266e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard JSONObject updateData = new JSONObject(); 267e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard JSONObject params = new JSONObject(); 268589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 269e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard hostFilterData.put("id__in", hostIds); 270e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard updateData.put("locked", JSONBoolean.getInstance(lock)); 2716818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori updateData.put("lock_reason", new JSONString("")); 2726818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori 2736818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori if (lockReason != null && !lockReason.trim().isEmpty()) { 2746818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori updateData.put("lock_reason", new JSONString(lockReason.trim())); 2756818633834ad52c3de153235639ea9299a6e9a6dMatthew Sartori } 276589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 277e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard params.put("host_filter_data", hostFilterData); 278e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard params.put("update_data", updateData); 279589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 280e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard callModifyHosts(params, new SimpleCallback() { 281e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard public void doCallback(Object source) { 282e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard String message = messagePrefix + " "; 283e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard if (!lock) { 284e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard message += "un"; 285e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard } 286e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard message += "locked"; 287589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 288e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard NotifyManager.getInstance().showMessage(message); 289589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 290e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard callback.doCallback(source); 291e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard } 292e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard }); 293e529d0fe5667f9796c7a6d607322fbfdf6a85cd2showard } 2940fc3830f17d644bab74bfe38556299f5e58bc0fashoward 2959dbdcda5104991cbf344ea5cba1aa58e1af444f3showard public static String getJobTag(JSONObject job) { 2969dbdcda5104991cbf344ea5cba1aa58e1af444f3showard return Utils.jsonToString(job.get("id")) + "-" + Utils.jsonToString(job.get("owner")); 2979dbdcda5104991cbf344ea5cba1aa58e1af444f3showard } 2980fc3830f17d644bab74bfe38556299f5e58bc0fashoward 2990fc3830f17d644bab74bfe38556299f5e58bc0fashoward public static void populateRadioChooser(RadioChooser chooser, String name) { 3000fc3830f17d644bab74bfe38556299f5e58bc0fashoward JSONArray options = staticData.getData(name + "_options").isArray(); 3010fc3830f17d644bab74bfe38556299f5e58bc0fashoward for (JSONString jsonOption : new JSONArrayList<JSONString>(options)) { 3020fc3830f17d644bab74bfe38556299f5e58bc0fashoward chooser.addChoice(Utils.jsonToString(jsonOption)); 3030fc3830f17d644bab74bfe38556299f5e58bc0fashoward } 3040fc3830f17d644bab74bfe38556299f5e58bc0fashoward } 305589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 3066f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static void populateListBox(ListBox box, String staticDataKey) { 30776fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren JSONArray options = staticData.getData(staticDataKey).isArray(); 30876fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren for (JSONString jsonOption : new JSONArrayList<JSONString>(options)) { 30976fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren box.addItem(Utils.jsonToString(jsonOption)); 31076fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren } 31176fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren } 312589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 3136f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li public static void populateListBox(SimplifiedList box, String staticDataKey) { 3146f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li JSONArray options = staticData.getData(staticDataKey).isArray(); 3156f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li for (JSONString jsonOption : new JSONArrayList<JSONString>(options)) { 3166f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li String option = Utils.jsonToString(jsonOption); 3176f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li box.addItem(option, option); 3186f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 3196f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li } 3206f27d4f22a1ba5063968b8c322fa0845f3279adeEric Li 32176fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren public static void setSelectedItem(ListBox box, String item) { 32276fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren box.setSelectedIndex(0); 32376fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren for (int i = 0; i < box.getItemCount(); i++) { 32476fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren if (box.getItemText(i).equals(item)) { 32576fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren box.setSelectedIndex(i); 32676fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren break; 32776fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren } 32876fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren } 32976fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren } 330589cc78019a41fa293d7583a3c1b6dfca42da41bjamesren 33176fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren public static void removeElement(String id) { 33276fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren Element element = DOM.getElementById(id); 33376fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren element.getParentElement().removeChild(element); 33476fcf19ec42d5c7580d2e7891e4610e5fe725286jamesren } 33529f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard 33629f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard public static int parsePositiveIntegerInput(String input, String fieldName) { 33729f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard final int parsedInt; 33829f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard try { 33929f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard if (input.equals("") || 34029f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard (parsedInt = Integer.parseInt(input)) <= 0) { 34129f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard String error = "Please enter a positive " + fieldName; 34229f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard NotifyManager.getInstance().showError(error); 34329f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard throw new IllegalArgumentException(); 34429f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard } 34529f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard } catch (NumberFormatException e) { 34629f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard String error = "Invalid " + fieldName + ": \"" + input + "\""; 34729f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard NotifyManager.getInstance().showError(error); 34829f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard throw new IllegalArgumentException(); 34929f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard } 35029f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard return parsedInt; 35129f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard } 35229f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard 35329f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard public static void removeSecondsFromDateField(JSONObject row, 35429f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard String sourceFieldName, 35529f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard String targetFieldName) { 35629f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard JSONValue dateValue = row.get(sourceFieldName); 35729f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard String date = ""; 35829f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard if (dateValue.isNull() == null) { 35929f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard date = dateValue.isString().stringValue(); 36029f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard date = date.substring(0, date.length() - 3); 36129f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard } 36229f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard row.put(targetFieldName, new JSONString(date)); 36329f7cd27e51add2648fb62ab2a0c588f9acb1ec4showard } 364193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi 365193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi public static void callGetJobHistory(JSONObject params, 366193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi final SimpleCallback onSuccess, 367193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi final boolean showMessage) { 368193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(); 369193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi rpcProxy.rpcCall("get_job_history", params, new JsonRpcCallback() { 370193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi @Override 371193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi public void onSuccess(JSONValue result) { 372193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi if (showMessage) { 373193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi NotifyManager.getInstance().showMessage("Get job history succeeded."); 374193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi } 375193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi if (onSuccess != null) { 376193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi onSuccess.doCallback(result); 377193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi } 378193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi } 379193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi }); 380193905e68043c4386ed1d3f21a74d88de4e9a9b7Dan Shi } 381c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi 382c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi public static void callGetSpongeUrl(JSONObject params, 383c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi final SimpleCallback onSuccess) { 384c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi JsonRpcProxy rpcProxy = JsonRpcProxy.getProxy(JsonRpcProxy.TKO_BASE_URL); 385c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi rpcProxy.rpcCall("get_detailed_test_views", params, new JsonRpcCallback() { 386c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi @Override 387c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi public void onSuccess(JSONValue result) { 388c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi if (onSuccess != null) { 389c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi JSONArray testViews = (JSONArray)result; 390c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi JSONValue keyVals = ((JSONObject)testViews.get(0)).get("job_keyvals"); 391c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi String spongeUrl = ((JSONObject)keyVals).get("sponge_url").isString().stringValue(); 392c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi onSuccess.doCallback(spongeUrl); 393c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi } 394c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi } 395c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi }); 396c28d3955905faa1ac8585f35a46a29ce550b9c03Dan Shi } 397a2216e7e327b464ac03932b4add2983e9052bc79showard} 398