DataTable data = new DataTable();
ArrayList cd = new ArrayList();
try {
// Fill the data table.
cd.add(new ColumnDescription("date", ValueType.DATETIME, "Date"));
Sensor sensor =
ofy().load().type(Sensor.class).id(Long.parseLong(request.getParameter("id"))).now();
log.log(Level.WARNING, "sensor={0}", sensor);
if (sensor.getType() == Sensor.Type.TEMPERATURE || sensor.getType() == Sensor.Type.HUMIDITY) {
cd.add(new ColumnDescription("high", ValueType.NUMBER, "High"));
cd.add(new ColumnDescription("low", ValueType.NUMBER, "Low"));
} else if (sensor.getType() == Sensor.Type.LIGHT) {
cd.add(new ColumnDescription("nonzeroavg", ValueType.NUMBER, "Total"));
} else if (sensor.getType() == Sensor.Type.WINDSPEED) {
cd.add(new ColumnDescription("high", ValueType.NUMBER, "High"));
}
data.addColumns(cd);
List<ReadingHistory> readings =
ofy().load().type(ReadingHistory.class).ancestor(sensor).list();
GregorianCalendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
// without a timezone of GMT, you will get:
// can't create DateTimeValue from GregorianCalendar that is not GMT.
// and if you want your graph in a TZ other than GMT? Nope.
for (ReadingHistory reading : readings) {
cal.setTime(new Date(reading.getTimestamp().getTime()));
if (sensor.getType() == Sensor.Type.TEMPERATURE || sensor.getType() == Sensor.Type.HUMIDITY) {
data.addRowFromValues(cal, new Double(reading.getHigh()), new Double(reading.getLow()));
} else if (sensor.getType() == Sensor.Type.LIGHT) {
data.addRowFromValues(cal, new Double(reading.getAverage()));
} else if (sensor.getType() == Sensor.Type.WINDSPEED) {
data.addRowFromValues(cal, new Double(reading.getHigh()));
}
}
} catch (final TypeMismatchException e) {
log.log(Level.SEVERE, e.toString(), e);