X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fintegration%2FJcrWriteServlet.java;h=71d915674080b48cf3ae3806cd3dafce0abc1372;hb=4c96729d93e6db492312a54e1f876cb27389793e;hp=d678ccbbe0aab06becc51cc0e4dde329105c4105;hpb=1ffd6c22683f3c03e4c1193ac6bc33c77e155d2b;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/integration/JcrWriteServlet.java b/org.argeo.cms/src/org/argeo/cms/integration/JcrWriteServlet.java index d678ccbbe..71d915674 100644 --- a/org.argeo.cms/src/org/argeo/cms/integration/JcrWriteServlet.java +++ b/org.argeo.cms/src/org/argeo/cms/integration/JcrWriteServlet.java @@ -2,6 +2,7 @@ package org.argeo.cms.integration; import java.io.IOException; +import javax.jcr.ImportUUIDBehavior; import javax.jcr.Node; import javax.jcr.Session; import javax.jcr.nodetype.NodeType; @@ -22,8 +23,8 @@ public class JcrWriteServlet extends JcrReadServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - if (log.isTraceEnabled()) - log.trace("Data service: " + req.getPathInfo()); + if (log.isDebugEnabled()) + log.debug("Data service POST: " + req.getPathInfo()); String dataWorkspace = getWorkspace(req); String jcrPath = getJcrPath(req); @@ -32,10 +33,18 @@ public class JcrWriteServlet extends JcrReadServlet { try { // authentication session = openJcrSession(req, resp, getRepository(), dataWorkspace); + + if (req.getContentType() != null && req.getContentType().equals(XML_CONTENT_TYPE)) { +// resp.setContentType(XML_CONTENT_TYPE); + session.getWorkspace().importXML(jcrPath, req.getInputStream(), + ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING); + return; + } + if (!session.itemExists(jcrPath)) { String parentPath = FilenameUtils.getFullPathNoEndSeparator(jcrPath); String fileName = FilenameUtils.getName(jcrPath); - Node folderNode = JcrUtils.mkdirs(session, parentPath); + Node folderNode = JcrUtils.mkfolders(session, parentPath); byte[] bytes = IOUtils.toByteArray(req.getInputStream()); JcrUtils.copyBytesAsFile(folderNode, fileName, bytes); } else { @@ -45,10 +54,39 @@ public class JcrWriteServlet extends JcrReadServlet { byte[] bytes = IOUtils.toByteArray(req.getInputStream()); JcrUtils.copyBytesAsFile(node.getParent(), node.getName(), bytes); } + session.save(); + } catch (Exception e) { + new CmsExceptionsChain(e).writeAsJson(getObjectMapper(), resp); + } finally { + JcrUtils.logoutQuietly(session); + } + } + + @Override + protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + if (log.isDebugEnabled()) + log.debug("Data service DELETE: " + req.getPathInfo()); + + String dataWorkspace = getWorkspace(req); + String jcrPath = getJcrPath(req); + + Session session = null; + try { + // authentication + session = openJcrSession(req, resp, getRepository(), dataWorkspace); + if (!session.itemExists(jcrPath)) { + // ignore + return; + } else { + Node node = session.getNode(jcrPath); + node.remove(); + } + session.save(); } catch (Exception e) { new CmsExceptionsChain(e).writeAsJson(getObjectMapper(), resp); } finally { JcrUtils.logoutQuietly(session); } } + }