1 package org
.argeo
.cms
.integration
;
3 import java
.io
.IOException
;
5 import javax
.jcr
.ImportUUIDBehavior
;
7 import javax
.jcr
.Session
;
8 import javax
.jcr
.nodetype
.NodeType
;
9 import javax
.servlet
.ServletException
;
10 import javax
.servlet
.http
.HttpServletRequest
;
11 import javax
.servlet
.http
.HttpServletResponse
;
13 import org
.apache
.commons
.io
.FilenameUtils
;
14 import org
.apache
.commons
.io
.IOUtils
;
15 import org
.argeo
.api
.cms
.CmsLog
;
16 import org
.argeo
.jcr
.JcrUtils
;
18 /** Access a JCR repository via web services. */
19 public class JcrWriteServlet
extends JcrReadServlet
{
20 private static final long serialVersionUID
= 17272653843085492L;
21 private final static CmsLog log
= CmsLog
.getLog(JcrWriteServlet
.class);
24 protected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
25 if (log
.isDebugEnabled())
26 log
.debug("Data service POST: " + req
.getPathInfo());
28 String dataWorkspace
= getWorkspace(req
);
29 String jcrPath
= getJcrPath(req
);
31 Session session
= null;
34 session
= openJcrSession(req
, resp
, getRepository(), dataWorkspace
);
36 if (req
.getContentType() != null && req
.getContentType().equals(XML_CONTENT_TYPE
)) {
37 // resp.setContentType(XML_CONTENT_TYPE);
38 session
.getWorkspace().importXML(jcrPath
, req
.getInputStream(),
39 ImportUUIDBehavior
.IMPORT_UUID_COLLISION_REMOVE_EXISTING
);
43 if (!session
.itemExists(jcrPath
)) {
44 String parentPath
= FilenameUtils
.getFullPathNoEndSeparator(jcrPath
);
45 String fileName
= FilenameUtils
.getName(jcrPath
);
46 Node folderNode
= JcrUtils
.mkfolders(session
, parentPath
);
47 byte[] bytes
= IOUtils
.toByteArray(req
.getInputStream());
48 JcrUtils
.copyBytesAsFile(folderNode
, fileName
, bytes
);
50 Node node
= session
.getNode(jcrPath
);
51 if (!node
.isNodeType(NodeType
.NT_FILE
))
52 throw new IllegalArgumentException("Node " + jcrPath
+ " exists but is not a file");
53 byte[] bytes
= IOUtils
.toByteArray(req
.getInputStream());
54 JcrUtils
.copyBytesAsFile(node
.getParent(), node
.getName(), bytes
);
57 } catch (Exception e
) {
58 new CmsExceptionsChain(e
).writeAsJson(getObjectMapper(), resp
);
60 JcrUtils
.logoutQuietly(session
);
65 protected void doDelete(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
66 if (log
.isDebugEnabled())
67 log
.debug("Data service DELETE: " + req
.getPathInfo());
69 String dataWorkspace
= getWorkspace(req
);
70 String jcrPath
= getJcrPath(req
);
72 Session session
= null;
75 session
= openJcrSession(req
, resp
, getRepository(), dataWorkspace
);
76 if (!session
.itemExists(jcrPath
)) {
80 Node node
= session
.getNode(jcrPath
);
84 } catch (Exception e
) {
85 new CmsExceptionsChain(e
).writeAsJson(getObjectMapper(), resp
);
87 JcrUtils
.logoutQuietly(session
);