blob: 87da925453743f269c794a84eda4eb2b5bc7fd9a [file] [log] [blame]
package autotest.common.table;
import autotest.common.Utils;
import com.google.gwt.json.client.JSONObject;
import java.util.List;
public interface DataSource {
public static enum SortDirection {ASCENDING, DESCENDING}
public static class SortSpec {
private String field;
private SortDirection direction;
public SortSpec(String field, SortDirection direction) {
this.field = field;
this.direction = direction;
}
public SortSpec(String field) {
this(field, SortDirection.ASCENDING);
}
public int getDirectionMultiplier() {
return direction == SortDirection.ASCENDING ? 1 : -1;
}
public String getField() {
return field;
}
public SortDirection getDirection() {
return direction;
}
@Override
public String toString() {
String prefix = "";
if (direction == SortDirection.DESCENDING) {
prefix = "-";
}
return prefix + field;
}
public static SortSpec fromString(String sortString) {
if (sortString.charAt(0) == '-') {
return new SortSpec(sortString.substring(1), SortDirection.DESCENDING);
} else {
return new SortSpec(sortString, SortDirection.ASCENDING);
}
}
}
public interface Query {
public JSONObject getParams();
/**
* Get the total number of results matching this query. After completion,
* callback.handleTotalResultCount() will be called with the count.
*/
public void getTotalResultCount(final DataCallback callback);
/**
* Get a page of data. After completion, callback.handlePage() will be
* called with the data.
* @param start row to start with (for pagination)
* @param maxCount maximum rows to be returned
* @param sortOn list of columns + directions to sort on; results will be sorted by the
* first field, then the second, etc.
*/
public void getPage(Integer start, Integer maxCount, SortSpec[] sortOn,
final DataCallback callback);
}
abstract class DefaultQuery implements Query {
protected JSONObject params;
public DefaultQuery(JSONObject params) {
if (params == null) {
this.params = new JSONObject();
} else {
this.params = Utils.copyJSONObject(params);
}
}
@Override
public JSONObject getParams() {
return Utils.copyJSONObject(params);
}
@Override
public abstract void getPage(Integer start, Integer maxCount, SortSpec[] sortOn,
DataCallback callback);
@Override
public abstract void getTotalResultCount(DataCallback callback);
}
public interface DataCallback {
public void onQueryReady(Query query);
public void handlePage(List<JSONObject> data);
public void handleTotalResultCount(int totalCount);
public void onError(JSONObject errorObject);
}
public static class DefaultDataCallback implements DataCallback {
public void handlePage(List<JSONObject> data) {}
public void handleTotalResultCount(int totalCount) {}
public void onQueryReady(Query query) {}
public void onError(JSONObject errorObject) {}
}
public void query(JSONObject params, final DataCallback callback);
}