blob: a5e6bdb9fde4544dc6e11b6affa89adb9ce8d754 [file] [log] [blame]
package autotest.tko;
import autotest.common.JSONArrayList;
import autotest.common.Utils;
import autotest.common.table.RpcDataSource;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class TestGroupDataSource extends RpcDataSource {
private static final String NUM_GROUPS_RPC = "get_num_groups";
private static final String GROUP_COUNTS_RPC = "get_group_counts";
private static final String STATUS_COUNTS_RPC = "get_status_counts";
private static final String LATEST_TESTS_RPC = "get_latest_tests";
public static final String GROUP_COUNT_FIELD = "group_count";
public static final String PASS_COUNT_FIELD = "pass_count";
public static final String COMPLETE_COUNT_FIELD = "complete_count";
public static final String INCOMPLETE_COUNT_FIELD = "incomplete_count";
private JSONArray groupByFields;
private JSONArray headerGroups;
private JSONArray headerGroupValues;
private JSONObject queryParameters;
public static TestGroupDataSource getTestGroupDataSource() {
return new TestGroupDataSource(GROUP_COUNTS_RPC);
}
public static TestGroupDataSource getStatusCountDataSource() {
return new TestGroupDataSource(STATUS_COUNTS_RPC);
}
public static TestGroupDataSource getLatestTestsDataSource() {
return new TestGroupDataSource(LATEST_TESTS_RPC);
}
// force construction to go through above factory methods
private TestGroupDataSource(String dataMethodName) {
super(dataMethodName, NUM_GROUPS_RPC);
}
@Override
public void query(JSONObject params, DataCallback callback) {
super.query(getFullRequestParams(params), callback);
}
public JSONObject getFullRequestParams(JSONObject conditionParams) {
JSONObject fullParams = Utils.copyJSONObject(conditionParams);
Utils.updateObject(fullParams, queryParameters);
fullParams.put("group_by", groupByFields);
if (headerGroups != null) {
fullParams.put("header_groups", headerGroups);
}
return fullParams;
}
@Override
/**
* Process the groups, which come simply as lists, into JSONObjects.
*/
protected List<JSONObject> handleJsonResult(JSONValue result) {
JSONObject resultObject = result.isObject();
headerGroupValues = resultObject.get("header_values").isArray();
return new JSONArrayList<JSONObject>(resultObject.get("groups").isArray());
}
public void setGroupColumns(String[] columns) {
groupByFields = new JSONArray();
for (String field : columns) {
groupByFields.set(groupByFields.size(), new JSONString(field));
}
headerGroups = null;
}
public void setHeaderGroups(List<List<String>> headerFieldGroups) {
groupByFields = new JSONArray();
headerGroups = new JSONArray();
for (List<String> headerGroup : headerFieldGroups) {
headerGroups.set(headerGroups.size(), Utils.stringsToJSON(headerGroup));
for(String field : headerGroup) {
groupByFields.set(groupByFields.size(), new JSONString(field));
}
}
}
/**
* Get a list of values for the header group with the given index, as specified to
* setHeaderGroups().
*/
public List<List<String>> getHeaderGroupValues(int groupIndex) {
JSONArray headerList = headerGroupValues.get(groupIndex).isArray();
List<List<String>> headerValueList = new ArrayList<List<String>>();
for (JSONArray header : new JSONArrayList<JSONArray>(headerList)) {
headerValueList.add(Arrays.asList(Utils.JSONtoStrings(header)));
}
return headerValueList;
}
public void setQueryParameters(JSONObject queryParameters) {
this.queryParameters = queryParameters;
}
}