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
.apache
.commons
.logging
.Log
;
16 import org
.apache
.commons
.logging
.LogFactory
;
17 import org
.argeo
.jcr
.JcrUtils
;
19 /** Access a JCR repository via web services. */
20 public class JcrWriteServlet
extends JcrReadServlet
{
21 private static final long serialVersionUID
= 17272653843085492L;
22 private final static Log log
= LogFactory
.getLog(JcrWriteServlet
.class);
25 protected void doPost(HttpServletRequest req
, HttpServletResponse resp
) throws ServletException
, IOException
{
26 if (log
.isTraceEnabled())
27 log
.trace("Data service: " + req
.getPathInfo());
29 String dataWorkspace
= getWorkspace(req
);
30 String jcrPath
= getJcrPath(req
);
32 Session session
= null;
35 session
= openJcrSession(req
, resp
, getRepository(), dataWorkspace
);
37 if (req
.getContentType() != null && req
.getContentType().equals(XML_CONTENT_TYPE
)) {
38 // resp.setContentType(XML_CONTENT_TYPE);
39 session
.getWorkspace().importXML(jcrPath
, req
.getInputStream(),
40 ImportUUIDBehavior
.IMPORT_UUID_COLLISION_REMOVE_EXISTING
);
44 if (!session
.itemExists(jcrPath
)) {
45 String parentPath
= FilenameUtils
.getFullPathNoEndSeparator(jcrPath
);
46 String fileName
= FilenameUtils
.getName(jcrPath
);
47 Node folderNode
= JcrUtils
.mkfolders(session
, parentPath
);
48 byte[] bytes
= IOUtils
.toByteArray(req
.getInputStream());
49 JcrUtils
.copyBytesAsFile(folderNode
, fileName
, bytes
);
51 Node node
= session
.getNode(jcrPath
);
52 if (!node
.isNodeType(NodeType
.NT_FILE
))
53 throw new IllegalArgumentException("Node " + jcrPath
+ " exists but is not a file");
54 byte[] bytes
= IOUtils
.toByteArray(req
.getInputStream());
55 JcrUtils
.copyBytesAsFile(node
.getParent(), node
.getName(), bytes
);
57 } catch (Exception e
) {
58 new CmsExceptionsChain(e
).writeAsJson(getObjectMapper(), resp
);
60 JcrUtils
.logoutQuietly(session
);