]> git.argeo.org Git - gpl/argeo-suite.git/blob - knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkFormServlet.java
Introduce Geonames support.
[gpl/argeo-suite.git] / knowledge / org.argeo.support.odk / src / org / argeo / support / odk / servlet / OdkFormServlet.java
1 package org.argeo.support.odk.servlet;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5 import java.io.OutputStream;
6 import java.util.Collections;
7 import java.util.HashMap;
8 import java.util.Map;
9
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 import org.apache.commons.io.FilenameUtils;
16 import org.argeo.support.odk.OdkForm;
17
18 /** Retrieves a single form. */
19 public class OdkFormServlet extends HttpServlet {
20 private static final long serialVersionUID = 7838305967987687370L;
21
22 private Map<String, OdkForm> odkForms = Collections.synchronizedMap(new HashMap<>());
23
24 @Override
25 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
26 resp.setContentType("text/xml; charset=utf-8");
27
28 String path = req.getServletPath();
29 String fileName = FilenameUtils.getName(path);
30 OdkForm form = odkForms.get(fileName);
31 if (form == null)
32 throw new IllegalArgumentException("No form named " + fileName + " was found");
33
34 byte[] buffer = new byte[1024];
35 try (InputStream in = form.openStream(); OutputStream out = resp.getOutputStream();) {
36 int bytesRead;
37 while ((bytesRead = in.read(buffer)) != -1)
38 out.write(buffer, 0, bytesRead);
39 }
40 }
41
42 public void addForm(OdkForm odkForm) {
43 odkForms.put(odkForm.getFileName(), odkForm);
44 }
45
46 public void removeForm(OdkForm odkForm) {
47 odkForms.remove(odkForm.getFileName());
48 }
49
50 }