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.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
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 DownloadUserDailyStatisticsRestlet extends
RehabDoctorServerResource {// KDServerResource
// {
// //
public static final String URI = "/rehabdoctor/downloaduserdailystatistics";
@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");
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();
Set<Date> days = new TreeSet<Date>();
if (dataList != null) {
Element root = d
.createElement("downloaduserdailystatisticsOutput");
d.appendChild(root);
for (BufferedData b : dataList) {
Date insDate = b.getInsertDate();
Date day = new Date(insDate.getYear(), insDate.getMonth(),
insDate.getDate());
days.add(day);
}
List<Date> dayList = new LinkedList<Date>(days);
Collections.sort(dayList);
for (Date dat : dayList) {
Element datalistEl = d.createElement("rehab_day");
datalistEl.setAttribute("date", "" + dat.toGMTString());
Date startOfDay = dat;
Date endOfDay = new Date(dat.getYear(), dat.getMonth(),
dat.getDate(), 23, 59, 59);
int minElbowknee = Integer.MAX_VALUE;
int maxElbowknee = Integer.MIN_VALUE;
int rangeElbowknee = 0;
int minBackline = Integer.MAX_VALUE;
int maxBackline = Integer.MIN_VALUE;
int rangeBackline = 0;
int minSideangle = Integer.MAX_VALUE;
int maxSideangle = Integer.MIN_VALUE;
int rangeSideangle = 0;
int elbkn = -1;
int length = 0;
for (BufferedData b : dataList) {
if (b.getInsertDate().after(startOfDay)
&& b.getInsertDate().before(endOfDay)) {
elbkn = b.getElbowknee();
length += b.getAngles().size();
int i = 0;
for (Integer[] angle_sample : b.getAngles()) {
int elbowknee = 180 - angle_sample[0];
if(elbkn == 0)
elbowknee = - elbowknee;
if (elbowknee > maxElbowknee)
maxElbowknee = elbowknee;
if (elbowknee < minElbowknee)
minElbowknee = elbowknee;
int backline = - angle_sample[1];
if (backline > maxBackline)
maxBackline = backline;
if (backline < minBackline)
minBackline = backline;
int sideangle = angle_sample[3] - 90;
if (sideangle > maxSideangle)
maxSideangle = sideangle;
if (sideangle < minSideangle)
minSideangle = sideangle;
}
}
}
datalistEl.setAttribute("elbowknee", "" + elbkn);
datalistEl.setAttribute("length", "" + length);
datalistEl.setAttribute("minElbowknee", "" + minElbowknee);
datalistEl.setAttribute("maxElbowknee", "" + maxElbowknee);
rangeElbowknee = maxElbowknee - minElbowknee;
datalistEl.setAttribute("rangeElbowknee", "" + rangeElbowknee);
datalistEl.setAttribute("minBackline", "" + minBackline);
datalistEl.setAttribute("maxBackline", "" + maxBackline);
rangeBackline = maxBackline - minBackline;
datalistEl.setAttribute("rangeBackline", "" + rangeBackline);
datalistEl.setAttribute("minSideangle", "" + minSideangle);
datalistEl.setAttribute("maxSideangle", "" + maxSideangle);
rangeSideangle = maxSideangle - minSideangle;
datalistEl.setAttribute("rangeSideangle", "" + rangeSideangle);
root.appendChild(datalistEl);
}
d.normalizeDocument();
} else
result = XMLUtils.createXMLError(
"download statistics error", "no statistics found");
} catch (Exception e) {
result = XMLUtils.createXMLError("download statistics error", ""
+ e.getMessage());
}
return result;
}
}