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);
}
}