]>
git.argeo.org Git - gpl/argeo-suite.git/blob - 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
.net
.URLDecoder
;
7 import java
.nio
.charset
.StandardCharsets
;
8 import java
.util
.Collections
;
9 import java
.util
.HashMap
;
12 import javax
.jcr
.Repository
;
13 import javax
.jcr
.RepositoryException
;
14 import javax
.jcr
.Session
;
15 import javax
.servlet
.ServletException
;
16 import javax
.servlet
.http
.HttpServlet
;
17 import javax
.servlet
.http
.HttpServletRequest
;
18 import javax
.servlet
.http
.HttpServletResponse
;
20 import org
.apache
.commons
.io
.FilenameUtils
;
21 import org
.argeo
.cms
.servlet
.ServletAuthUtils
;
22 import org
.argeo
.jcr
.Jcr
;
23 import org
.argeo
.support
.odk
.OdkForm
;
24 import org
.argeo
.support
.odk
.OdkNames
;
26 /** Retrieves a single form. */
27 public class OdkFormServlet
extends HttpServlet
{
28 private static final long serialVersionUID
= 7838305967987687370L;
30 private Repository repository
;
31 private Map
<String
, OdkForm
> odkForms
= Collections
.synchronizedMap(new HashMap
<>());
34 protected void doGet(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
35 resp
.setContentType("text/xml; charset=utf-8");
37 Session session
= ServletAuthUtils
.doAs(() -> Jcr
.login(repository
, null), req
);
39 String pathInfo
= req
.getPathInfo();
40 if (pathInfo
.startsWith("//"))
41 pathInfo
= pathInfo
.substring(1);
43 boolean oldApproach
= false;
46 String path
= URLDecoder
.decode(pathInfo
, StandardCharsets
.UTF_8
);
47 session
.exportDocumentView(path
+ "/" + OdkNames
.H_HTML
, resp
.getOutputStream(), true, false);
50 String fileName
= FilenameUtils
.getName(pathInfo
);
51 OdkForm form
= odkForms
.get(fileName
);
53 throw new IllegalArgumentException("No form named " + fileName
+ " was found");
55 byte[] buffer
= new byte[1024];
56 try (InputStream in
= form
.openStream(); OutputStream out
= resp
.getOutputStream();) {
58 while ((bytesRead
= in
.read(buffer
)) != -1)
59 out
.write(buffer
, 0, bytesRead
);
62 } catch (RepositoryException e
) {
71 public void addForm(OdkForm odkForm
) {
72 odkForms
.put(odkForm
.getFileName(), odkForm
);
75 public void removeForm(OdkForm odkForm
) {
76 odkForms
.remove(odkForm
.getFileName());
79 public void setRepository(Repository repository
) {
80 this.repository
= repository
;