]>
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
.jcr
.Repository
;
11 import javax
.jcr
.RepositoryException
;
12 import javax
.jcr
.Session
;
13 import javax
.servlet
.ServletException
;
14 import javax
.servlet
.http
.HttpServlet
;
15 import javax
.servlet
.http
.HttpServletRequest
;
16 import javax
.servlet
.http
.HttpServletResponse
;
18 import org
.apache
.commons
.io
.FilenameUtils
;
19 import org
.argeo
.cms
.servlet
.ServletAuthUtils
;
20 import org
.argeo
.jcr
.Jcr
;
21 import org
.argeo
.support
.odk
.OdkForm
;
22 import org
.argeo
.support
.odk
.OdkNames
;
24 /** Retrieves a single form. */
25 public class OdkFormServlet
extends HttpServlet
{
26 private static final long serialVersionUID
= 7838305967987687370L;
28 private Repository repository
;
29 private Map
<String
, OdkForm
> odkForms
= Collections
.synchronizedMap(new HashMap
<>());
32 protected void doGet(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
33 resp
.setContentType("text/xml; charset=utf-8");
35 Session session
= ServletAuthUtils
.doAs(() -> Jcr
.login(repository
, null), req
);
37 String pathInfo
= req
.getPathInfo();
38 if (pathInfo
.startsWith("//"))
39 pathInfo
= pathInfo
.substring(1);
41 boolean oldApproach
= false;
44 session
.exportDocumentView(pathInfo
+ "/" + OdkNames
.H_HTML
, resp
.getOutputStream(), true, false);
47 String fileName
= FilenameUtils
.getName(pathInfo
);
48 OdkForm form
= odkForms
.get(fileName
);
50 throw new IllegalArgumentException("No form named " + fileName
+ " was found");
52 byte[] buffer
= new byte[1024];
53 try (InputStream in
= form
.openStream(); OutputStream out
= resp
.getOutputStream();) {
55 while ((bytesRead
= in
.read(buffer
)) != -1)
56 out
.write(buffer
, 0, bytesRead
);
59 } catch (RepositoryException e
) {
68 public void addForm(OdkForm odkForm
) {
69 odkForms
.put(odkForm
.getFileName(), odkForm
);
72 public void removeForm(OdkForm odkForm
) {
73 odkForms
.remove(odkForm
.getFileName());
76 public void setRepository(Repository repository
) {
77 this.repository
= repository
;