package netflix.adminresources.tableview;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import javax.ws.rs.core.MultivaluedMap;
public class DataTableHelper {
public static JsonObject buildOutput(TableViewResource tableViewResource, MultivaluedMap<String, String> queryParams) {
JsonObject output = new JsonObject();
applyQueryParams(tableViewResource, queryParams);
JsonArray data = tableViewResource.getData();
final String sEcho = queryParams.getFirst("sEcho");
output.addProperty("iTotalRecords", tableViewResource.getTotalNumOfRecords());
output.addProperty("iTotalDisplayRecords", tableViewResource.getFilteredNumOfRecords());
output.addProperty("sEcho", sEcho);
output.add("aaData", data);
return output;
}
/**
* apply pagination, search, sort params
* <p/>
* Sample query from DataTables -
* sEcho=1&iColumns=2&sColumns=&iDisplayStart=0&iDisplayLength=25&mDataProp_0=0&mDataProp_1=1&sSearch=&
* bRegex=false&sSearch_0=&bRegex_0=false&bSearchable_0=true&sSearch_1=&bRegex_1=false&bSearchable_1=true&
* iSortingCols=1&iSortCol_0=0&sSortDir_0=asc&bSortable_0=true&bSortable_1=true
*/
private static void applyQueryParams(TableViewResource resource, MultivaluedMap<String, String> queryParams) {
final String allColsSearch = queryParams.getFirst("sSearch");
final String displayStart = queryParams.getFirst("iDisplayStart");
final String displayLen = queryParams.getFirst("iDisplayLength");
String sortColumnIndex = queryParams.getFirst("iSortCol_0");
String sortColumnDir = queryParams.getFirst("sSortDir_0");
if (sortColumnDir == null || sortColumnIndex == null) {
// defaults
sortColumnDir = "asc";
sortColumnIndex = "0";
}
int colIndex = Integer.parseInt(sortColumnIndex);
String sortColumnName = resource.getColumns().get(colIndex);
if (displayLen != null && displayStart != null) {
final int iDisplayLen = Integer.parseInt(displayLen);
final int iDisplayStart = Integer.parseInt(displayStart);
resource.setAllColumnsSearchTerm(allColsSearch)
.setCurrentPageInfo(iDisplayStart, iDisplayLen)
.enableColumnSort(sortColumnName, !(sortColumnDir.equalsIgnoreCase("asc")));
}
}
}