private String generateDataTableJson(TimeChartData chartData) throws DataSourceException { DataTable data = new DataTable(); ArrayList<ColumnDescription> cd = new ArrayList<ColumnDescription>(); cd.add(new ColumnDescription("date", ValueType.DATETIME, "Date")); for (String serie : chartData.getSeries()) { cd.add(new ColumnDescription(serie, ValueType.NUMBER, serie)); } data.addColumns(cd); try { for (TimeChartDataValue timeSerie : chartData.getValues()) { TableRow row = new TableRow(); GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance(); calendar.setTimeZone(TimeZone.getTimeZone("GMT")); calendar.setTimeInMillis( TimeZone.getDefault().getOffset(timeSerie.getTimestamp().getTime()) + timeSerie.getTimestamp().getTime()); row.addCell(new TableCell(new DateTimeValue(calendar))); for (Double value : timeSerie.getValues()) { if (value != null) { row.addCell(value); } else { row.addCell(Value.getNullValueFromValueType(ValueType.NUMBER)); } } data.addRow(row); } } catch (TypeMismatchException e) { System.out.println("Invalid type!"); } Query query = new Query(); DataSourceParameters parameters = new DataSourceParameters(""); DataSourceRequest request = new DataSourceRequest(query, parameters, ULocale.UK); String generateResponse = DataSourceHelper.generateResponse(data, request); return generateResponse; }