/** {@inheritDoc} */ public void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { try { Resource resource = request.getResource(); Node node = resource.adaptTo(Node.class); if (node == null) { response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } Version version = versionService.saveNode(node, request.getRemoteUser()); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); ExtendedJSONWriter write = new ExtendedJSONWriter(response.getWriter()); write.object(); write.key("versionName"); write.value(version.getName()); ExtendedJSONWriter.writeNodeContentsToWriter(write, version); write.endObject(); } catch (RepositoryException e) { LOGGER.info("Failed to save version ", e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); return; } catch (JSONException e) { LOGGER.info("Failed to save version ", e); response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage()); return; } }
public static void writeLinkNode( Content content, org.sakaiproject.nakamura.api.lite.Session session, JSONWriter writer, boolean objectInProgress) throws StorageClientException, JSONException { if (!objectInProgress) { writer.object(); } ContentManager contentManager = session.getContentManager(); // Write all the properties. ExtendedJSONWriter.writeNodeContentsToWriter(writer, content); // permissions writePermissions(content, session, writer); // Write the actual file. if (content.hasProperty(SAKAI_LINK)) { String linkPath = (String) content.getProperty(SAKAI_LINK); writer.key("file"); try { Content fileNode = contentManager.get(linkPath); writeFileNode(fileNode, session, writer); } catch (org.sakaiproject.nakamura.api.lite.accesscontrol.AccessDeniedException e) { writer.value(false); } } if (!objectInProgress) { writer.endObject(); } }
/** * Writes all the properties for a linked node. * * @param node * @param write * @throws JSONException * @throws RepositoryException */ public static void writeLinkNode(Node node, Session session, JSONWriter write) throws JSONException, RepositoryException { write.object(); // Write all the properties. ExtendedJSONWriter.writeNodeContentsToWriter(write, node); // permissions writePermissions(node, session, write); // Write the actual file. if (node.hasProperty(SAKAI_LINK)) { String uuid = node.getProperty(SAKAI_LINK).getString(); write.key("file"); try { Node fileNode = session.getNodeByIdentifier(uuid); writeFileNode(fileNode, session, write); } catch (ItemNotFoundException e) { write.value(false); } } write.endObject(); }
/** * Represent an entire JCR tree in JSON format. * * @param write The {@link JSONWriter writer} to send the data to. * @param node The node and it's subtree to output. Note: The properties of this node will be * outputted as well. * @param objectInProgress use true if you don't want the method to enclose the output in fresh * object braces * @param maxDepth Maximum depth of subnodes to traverse. The properties on {@link node} are * processed before this is taken into account. * @param currentLevel Internal parameter to track the current processing level. * @throws RepositoryException * @throws JSONException */ protected static void writeNodeTreeToWriter( JSONWriter write, Node node, boolean objectInProgress, int maxDepth, int currentLevel) throws RepositoryException, JSONException { // Write this node's properties. if (!objectInProgress) { write.object(); } writeNodeContentsToWriter(write, node); if (maxDepth == -1 || currentLevel < maxDepth) { // Write all the child nodes. NodeIterator iterator = node.getNodes(); while (iterator.hasNext()) { Node childNode = iterator.nextNode(); write.key(childNode.getName()); writeNodeTreeToWriter(write, childNode, false, maxDepth, currentLevel + 1); } } if (!objectInProgress) { write.endObject(); } }