]> git.argeo.org Git - gpl/argeo-suite.git/blob - knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkFormListServlet.java
Introduce Geonames support.
[gpl/argeo-suite.git] / knowledge / org.argeo.support.odk / src / org / argeo / support / odk / servlet / OdkFormListServlet.java
1 package org.argeo.support.odk.servlet;
2
3 import java.io.IOException;
4 import java.io.Writer;
5 import java.util.Collections;
6 import java.util.HashSet;
7 import java.util.Set;
8
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.apache.commons.logging.Log;
15 import org.apache.commons.logging.LogFactory;
16 import org.argeo.support.odk.OdkForm;
17
18 /** Lists available forms. */
19 public class OdkFormListServlet extends HttpServlet {
20 private static final long serialVersionUID = 2706191315048423321L;
21 private final static Log log = LogFactory.getLog(OdkFormListServlet.class);
22
23 private Set<OdkForm> odkForms = Collections.synchronizedSet(new HashSet<>());
24
25 @Override
26 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
27 resp.setContentType("text/xml; charset=utf-8");
28 resp.setHeader("X-OpenRosa-Version", "1.0");
29 resp.setDateHeader("Date", System.currentTimeMillis());
30
31 String serverName = req.getServerName();
32 int serverPort = req.getServerPort();
33 String protocol = serverPort == 443 || req.isSecure() ? "https" : "http";
34
35 Writer writer = resp.getWriter();
36 writer.append("<?xml version='1.0' encoding='UTF-8' ?>");
37 writer.append("<xforms xmlns=\"http://openrosa.org/xforms/xformsList\">");
38 for (OdkForm form : odkForms) {
39 StringBuilder sb = new StringBuilder();
40 sb.append("<xform>");
41 sb.append("<formID>" + form.getFormId() + "</formID>");
42 sb.append("<name>" + form.getName() + "</name>");
43 sb.append("<version>" + form.getVersion() + "</version>");
44 sb.append("<hash>" + form.getHash(null) + "</hash>");
45 sb.append("<descriptionText>" + form.getDescription() + "</descriptionText>");
46 sb.append("<downloadUrl>" + protocol + "://" + serverName
47 + (serverPort == 80
48 || serverPort == 443 ? "" : ":" + serverPort) + "/api/odk/" + form.getFileName()
49 + "</downloadUrl>");
50 sb.append("</xform>");
51 String str = sb.toString();
52 if (log.isDebugEnabled())
53 log.debug(str);
54 writer.append(str);
55 }
56 writer.append("</xforms>");
57 }
58
59 public void addForm(OdkForm odkForm) {
60 odkForms.add(odkForm);
61 }
62
63 public void removeForm(OdkForm odkForm) {
64 odkForms.remove(odkForm);
65 }
66 }