package com.kdcloud.ext.rehab.user;
import java.util.Date;
import java.util.HashMap;
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 org.w3c.dom.NodeList;
import com.googlecode.objectify.Key;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.kdcloud.ext.rehab.angles.AngleController;
import com.kdcloud.ext.rehab.angles.CalibrationController;
import com.kdcloud.ext.rehab.db.RehabUser;
import com.kdcloud.server.entity.User;
import com.kdcloud.server.rest.resource.KDServerResource;
public class ComputeAnglesRestlet extends RehabServerResource {
public static final String URI = "/rehab/computeangles";
@Post("xml")
public Representation acceptItem(Representation entity) {
DomRepresentation result = null;
Document d = null;
try {
String username = rehabUser.getUsername();
DomRepresentation input = new DomRepresentation(entity);
Document doc = input.getDocument();
// handle document input
Element rootEl = doc.getDocumentElement();
int timestamp = XMLUtils.getIntValue(rootEl, "timestamp");
int elbowknee = XMLUtils.getIntValue(rootEl, "elbowknee");
int[] rawData = new int[6];
NodeList nl = rootEl.getElementsByTagName("raw");
if (nl != null && nl.getLength() > 0) {
Element el = (Element) nl.item(0);
// {bx, by, bz, fx, fy, fz}
rawData[0] = XMLUtils.getIntValue(el, "bx");
rawData[1] = XMLUtils.getIntValue(el, "by");
rawData[2] = XMLUtils.getIntValue(el, "bz");
rawData[3] = XMLUtils.getIntValue(el, "fx");
rawData[4] = XMLUtils.getIntValue(el, "fy");
rawData[5] = XMLUtils.getIntValue(el, "fz");
}
CalibrationController.F_MIN = rehabUser.getF_MIN();
CalibrationController.F_MAX = rehabUser.getF_MAX();
CalibrationController.F_ZERO = rehabUser.getF_ZERO();
CalibrationController.B_MIN = rehabUser.getB_MIN();
CalibrationController.B_MAX = rehabUser.getB_MAX();
CalibrationController.B_ZERO = rehabUser.getB_ZERO();
// calcolo angoli
AngleController controller = new AngleController();
int[] angoli = controller.computeAngles(rawData, elbowknee);
// output
result = new DomRepresentation(MediaType.TEXT_XML);
d = result.getDocument();
Map<String, String> map = new HashMap<String, String>();
map.put("timestamp", "" + timestamp);
map.put("elbowknee", "" + angoli[0]);
map.put("backline", "" + angoli[1]);
map.put("foreline", "" + angoli[2]);
map.put("sideangle", "" + angoli[3]);
d = XMLUtils.createXMLResult("computeanglesOutput", map, d);
} catch (Exception e) {
result = XMLUtils.createXMLError("compute angles error", ""
+ e.getMessage());
}
return result;
}
}