package com.kdcloud.ext.rehab.doctor;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.restlet.data.MediaType;
import org.restlet.ext.xml.DomRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Post;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.kdcloud.ext.rehab.db.BufferedData;
import com.kdcloud.ext.rehab.db.CompleteExercise;
import com.kdcloud.ext.rehab.db.RehabUser;
import com.kdcloud.ext.rehab.user.XMLUtils;
import com.kdcloud.server.entity.User;
import com.kdcloud.server.rest.resource.KDServerResource;
public class DownloadUserBufferedDataByIntervalRestlet extends RehabDoctorServerResource {// KDServerResource
// {
// //
public static final String URI = "/rehabdoctor/downloaduserbuffereddatabyinterval";
@Post("xml")
public Representation acceptItem(Representation entity) {
DomRepresentation result = null;
Document d = null;
try {
DomRepresentation input = new DomRepresentation(entity);
// input
Document doc = input.getDocument();
Element rootEl = doc.getDocumentElement();
String username = XMLUtils.getTextValue(rootEl, "username");
String str_start_date = XMLUtils.getTextValue(rootEl, "start_date");
String str_end_date = XMLUtils.getTextValue(rootEl, "end_date");
DateFormat formatter;
Date startDate;
Date endDate;
// formatter = new SimpleDateFormat("dow mon dd hh:mm:ss zzz yyyy");
// 29 Nov 2012 16:13:18 GMT
formatter = new SimpleDateFormat("d MMM yyyy HH:mm:ss z");
startDate = (Date) formatter.parse(str_start_date);
endDate = (Date) formatter.parse(str_end_date);
try {
ObjectifyService.register(BufferedData.class);
} catch (Exception e) {
}
Objectify ofy = ObjectifyService.begin();
Key<RehabUser> us = new Key<RehabUser>(RehabUser.class, username);
List<BufferedData> dataList = ofy.query(BufferedData.class)
.filter("rehabuser", us)// .filter("insertdate >", da)
.order("insertdate").list();
result = new DomRepresentation(MediaType.TEXT_XML);
d = result.getDocument();
if (dataList != null) {
Element root = d.createElement("downloaduserbuffereddataOutput");
d.appendChild(root);
int count = 0;
for (BufferedData b : dataList) {
if (b.getInsertDate().after(startDate) && b.getInsertDate().before(endDate)) {
count++;
Element datalistEl = d.createElement("buffered_data");
datalistEl.setAttribute("elbowknee",
"" + b.getElbowknee());
datalistEl.setAttribute("date", ""
+ b.getInsertDate().toGMTString());
datalistEl.setAttribute("length", ""
+ b.getAngles().size());
int i = 0;
for (Integer[] raw_sample : b.getRaw()) {
Element rawdata = d.createElement("raw_data");
rawdata.setAttribute("timestamp", "" + i++);
rawdata.setAttribute("bx", "" + raw_sample[0]);
rawdata.setAttribute("by", "" + raw_sample[1]);
rawdata.setAttribute("bz", "" + raw_sample[2]);
rawdata.setAttribute("fx", "" + raw_sample[3]);
rawdata.setAttribute("fy", "" + raw_sample[4]);
rawdata.setAttribute("fz", "" + raw_sample[5]);
datalistEl.appendChild(rawdata);
}
i = 0;
for (Integer[] angle_sample : b.getAngles()) {
Element angle = d.createElement("angles_data");
angle.setAttribute("timestamp", "" + i++);
angle.setAttribute("elbowknee", ""
+ angle_sample[0]);
angle.setAttribute("backline", "" + angle_sample[1]);
angle.setAttribute("foreline", "" + angle_sample[2]);
angle.setAttribute("sideangle", ""
+ angle_sample[3]);
datalistEl.appendChild(angle);
}
root.appendChild(datalistEl);
}
d.normalizeDocument();
}
} else
result = XMLUtils.createXMLError(
"download buffered data error", "no exercises found");
} catch (Exception e) {
result = XMLUtils.createXMLError("download buffered data error", ""
+ e.getMessage());
}
return result;
}
}