use of org.qi4j.library.rest.common.table.Table in project qi4j-sdk by Qi4j.
the class TableResponseReader method readResponse.
@Override
public Object readResponse(Response response, Class<?> resultType) throws ResourceException {
if (response.getEntity().getMediaType().equals(MediaType.APPLICATION_JSON) && Table.class.isAssignableFrom(resultType)) {
String jsonValue = response.getEntityAsText();
try {
JSONObject jsonObject = new JSONObject(jsonValue);
JSONObject table = jsonObject.getJSONObject("table");
TableBuilder builder = new TableBuilder(module);
JSONArray cols = table.getJSONArray("cols");
for (int i = 0; i < cols.length(); i++) {
JSONObject col = cols.getJSONObject(i);
builder.column(col.optString("id"), col.getString("label"), col.getString("type"));
}
JSONArray rows = table.getJSONArray("rows");
for (int i = 0; i < rows.length(); i++) {
builder.row();
JSONObject row = rows.getJSONObject(i);
JSONArray cells = row.getJSONArray("c");
for (int j = 0; j < cells.length(); j++) {
JSONObject cell = cells.getJSONObject(j);
Object value = cell.opt("v");
String formatted = cell.optString("f");
if (cols.getJSONObject(j).getString("type").equals("datetime") && value != null)
value = Dates.fromString(value.toString());
else if (cols.getJSONObject(j).getString("type").equals("date") && value != null)
try {
value = new SimpleDateFormat("yyyy-MM-dd").parse(value.toString());
} catch (ParseException e) {
throw new ResourceException(e);
}
else if (cols.getJSONObject(j).getString("type").equals("timeofday") && value != null)
try {
value = new SimpleDateFormat("HH:mm:ss").parse(value.toString());
} catch (ParseException e) {
throw new ResourceException(e);
}
builder.cell(value, formatted);
}
builder.endRow();
}
return builder.newTable();
} catch (JSONException e) {
throw new ResourceException(Status.CLIENT_ERROR_UNPROCESSABLE_ENTITY, e);
}
}
return null;
}
Aggregations