Introduce ODK forms support.
[gpl/argeo-suite.git] / knowledge / org.argeo.support.odk / src / org / argeo / support / odk / servlet / OdkSubmissionServlet.java
diff --git a/knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkSubmissionServlet.java b/knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkSubmissionServlet.java
new file mode 100644 (file)
index 0000000..3a97580
--- /dev/null
@@ -0,0 +1,61 @@
+package org.argeo.support.odk.servlet;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.Part;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/** Receives a form submission. */
+public class OdkSubmissionServlet extends HttpServlet {
+       private static final long serialVersionUID = 7834401404691302385L;
+       private final static Log log = LogFactory.getLog(OdkSubmissionServlet.class);
+
+       private final static String XML_SUBMISSION_FILE = "xml_submission_file";
+
+       @Override
+       protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+               for (Part part : req.getParts()) {
+                       if (log.isDebugEnabled())
+                               log.debug("Part: " + part.getName() + ", " + part.getContentType());
+               }
+               Part xmlSubmissionPart = req.getPart(XML_SUBMISSION_FILE);
+               if (xmlSubmissionPart == null)
+                       throw new ServletException("No " + XML_SUBMISSION_FILE + " part");
+               try (InputStream in = xmlSubmissionPart.getInputStream();) {
+                       // pretty print
+                       Transformer transformer = TransformerFactory.newInstance().newTransformer();
+                       transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+                       transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
+                       StreamResult result = new StreamResult(new StringWriter());
+                       StreamSource source = new StreamSource(in);
+                       transformer.transform(source, result);
+                       String xmlString = result.getWriter().toString();
+                       System.out.println(xmlString);
+               } catch (TransformerException e) {
+                       e.printStackTrace();
+               }
+
+               resp.setContentType("text/xml; charset=utf-8");
+               resp.setHeader("X-OpenRosa-Version", "1.0");
+               resp.setDateHeader("Date", System.currentTimeMillis());
+               resp.setIntHeader("X-OpenRosa-Accept-Content-Length", 1024 * 1024);
+               resp.setStatus(201);
+               resp.getWriter().write("<OpenRosaResponse xmlns=\"http://openrosa.org/http/response\">"
+                               + "<message>Form Received!</message>" + "</OpenRosaResponse>");
+
+       }
+}