]>
git.argeo.org Git - gpl/argeo-suite.git/blob - knowledge/org.argeo.support.odk/src/org/argeo/support/odk/servlet/OdkFormServlet.java
1 package org
.argeo
.support
.odk
.servlet
;
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
;
10 import javax
.servlet
.ServletException
;
11 import javax
.servlet
.http
.HttpServlet
;
12 import javax
.servlet
.http
.HttpServletRequest
;
13 import javax
.servlet
.http
.HttpServletResponse
;
15 import org
.apache
.commons
.io
.FilenameUtils
;
16 import org
.argeo
.support
.odk
.OdkForm
;
18 /** Retrieves a single form. */
19 public class OdkFormServlet
extends HttpServlet
{
20 private static final long serialVersionUID
= 7838305967987687370L;
22 private Map
<String
, OdkForm
> odkForms
= Collections
.synchronizedMap(new HashMap
<>());
25 protected void doGet(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
26 resp
.setContentType("text/xml; charset=utf-8");
28 String path
= req
.getServletPath();
29 String fileName
= FilenameUtils
.getName(path
);
30 OdkForm form
= odkForms
.get(fileName
);
32 throw new IllegalArgumentException("No form named " + fileName
+ " was found");
34 byte[] buffer
= new byte[1024];
35 try (InputStream in
= form
.openStream(); OutputStream out
= resp
.getOutputStream();) {
37 while ((bytesRead
= in
.read(buffer
)) != -1)
38 out
.write(buffer
, 0, bytesRead
);
42 public void addForm(OdkForm odkForm
) {
43 odkForms
.put(odkForm
.getFileName(), odkForm
);
46 public void removeForm(OdkForm odkForm
) {
47 odkForms
.remove(odkForm
.getFileName());