package com.kdcloud.ext.rehab.user; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; 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 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.CompleteExercise; import com.kdcloud.ext.rehab.db.RehabUser; import com.kdcloud.server.entity.User; import com.kdcloud.server.rest.resource.KDServerResource; public class InsertCompleteExerciseRestlet extends RehabServerResource { public static final String URI = "/rehab/insertcompleteexercise"; @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(); CompleteExercise exercise = new CompleteExercise(); // handle document input Element rootEl = doc.getDocumentElement(); exercise.setName(rootEl.getAttribute("name")); exercise .setNumber(Integer.parseInt(rootEl.getAttribute("number"))); exercise.setElbowknee(Integer.parseInt(rootEl .getAttribute("elbowknee"))); exercise.setInsertDate(new Date()); exercise.setLength(Integer.parseInt(rootEl.getAttribute("length"))); List<Integer[]> rawdataList = new LinkedList<Integer[]>(); List<Integer[]> anglesdataList = new LinkedList<Integer[]>(); Integer[] rawData = new Integer[6]; Integer[] anglesData = new Integer[4]; NodeList nl = rootEl.getElementsByTagName("raw_data"); if (nl != null && nl.getLength() > 0) { for (int i = 0; i < nl.getLength(); i++) { Element el = (Element) nl.item(i); rawData = new Integer[6]; rawData[0] = Integer.parseInt(el.getAttribute("bx")); rawData[1] = Integer.parseInt(el.getAttribute("by")); rawData[2] = Integer.parseInt(el.getAttribute("bz")); rawData[3] = Integer.parseInt(el.getAttribute("fx")); rawData[4] = Integer.parseInt(el.getAttribute("fy")); rawData[5] = Integer.parseInt(el.getAttribute("fz")); rawdataList.add(rawData); } } nl = rootEl.getElementsByTagName("angles_data"); if (nl != null && nl.getLength() > 0) { for (int i = 0; i < nl.getLength(); i++) { Element el = (Element) nl.item(i); anglesData = new Integer[4]; anglesData[0] = Integer.parseInt(el .getAttribute("elbowknee")); anglesData[1] = Integer.parseInt(el .getAttribute("backline")); anglesData[2] = Integer.parseInt(el .getAttribute("foreline")); anglesData[3] = Integer.parseInt(el .getAttribute("sideangle")); anglesdataList.add(anglesData); } } exercise.setRaw(rawdataList); exercise.setAngles(anglesdataList); rehabUser.setRegisteredExercises(rehabUser .getRegisteredExercises() + 1); try { ObjectifyService.register(CompleteExercise.class); ObjectifyService.register(RehabUser.class); } catch (Exception e) { } Objectify ofy = ObjectifyService.begin(); Key<RehabUser> us = new Key<RehabUser>(RehabUser.class, username); exercise.setRehabUser(us); ofy.put(exercise); ofy.put(rehabUser); // output result = new DomRepresentation(MediaType.TEXT_XML); d = result.getDocument(); Map<String, String> map = new HashMap<String, String>(); map.put("exercise_saved", "OK"); d = XMLUtils.createXMLResult("insertcompleteexerciseOutput", map, d); } catch (Exception e) { try { result = new DomRepresentation(MediaType.TEXT_XML); d = result.getDocument(); } catch (IOException e1) { } d = XMLUtils.createXMLError(d, "insert complete exercise error", "" + e.getMessage()); } return result; } }