You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2015/07/09 10:47:39 UTC

svn commit: r1690028 - in /sling/trunk/bundles: jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/ jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/ servlets/get/src/main/java/org/apache/sling/serv...

Author: radu
Date: Thu Jul  9 08:47:39 2015
New Revision: 1690028

URL: http://svn.apache.org/r1690028
Log:
SLING-4865 - Add support for nt:linkedFile nodes

* return the correct InputStream when calling Resource#adapTo(InpuStream.class) on a nt:linkedFile based resource
* added support for streaming the correct InputStream for nt:linkedFile based resources in the StreamRendererServlet
* added nt:linkedFile test in JcrNodeResourceTest

Modified:
    sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
    sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java
    sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java

Modified: sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java?rev=1690028&r1=1690027&r2=1690028&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java (original)
+++ sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResource.java Thu Jul  9 08:47:39 2015
@@ -19,6 +19,7 @@ package org.apache.sling.jcr.resource.in
 import static org.apache.jackrabbit.JcrConstants.JCR_CONTENT;
 import static org.apache.jackrabbit.JcrConstants.JCR_DATA;
 import static org.apache.jackrabbit.JcrConstants.NT_FILE;
+import static org.apache.jackrabbit.JcrConstants.NT_LINKEDFILE;
 
 import java.io.InputStream;
 import java.security.AccessControlException;
@@ -196,7 +197,7 @@ class JcrNodeResource extends JcrItemRes
                 // otherwise it is the node of this resource
                 Node content = node.isNodeType(NT_FILE)
                         ? node.getNode(JCR_CONTENT)
-                        : node;
+                        : node.isNodeType(NT_LINKEDFILE) ? node.getProperty(JCR_CONTENT).getNode() : node;
 
                 Property data;
 

Modified: sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java?rev=1690028&r1=1690027&r2=1690028&view=diff
==============================================================================
--- sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java (original)
+++ sling/trunk/bundles/jcr/resource/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrNodeResourceTest.java Thu Jul  9 08:47:39 2015
@@ -23,9 +23,9 @@ import java.io.InputStream;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
+import javax.jcr.Session;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.Resource;
@@ -40,6 +40,26 @@ public class JcrNodeResourceTest extends
         return new HelperData(null, new PathMapperImpl());
     }
 
+    public void testLinkedFile() throws Exception {
+        String fileName = "file";
+        String linkedFileName = "linkedFile";
+
+        Session session = getSession();
+        Node file = rootNode.addNode(fileName, JcrConstants.NT_FILE);
+        Node res = file.addNode(JcrConstants.JCR_CONTENT, JcrConstants.NT_RESOURCE);
+        setupResource(res);
+        file.addMixin(JcrConstants.MIX_REFERENCEABLE);
+        session.save();
+
+        Node linkedFile = rootNode.addNode(linkedFileName, JcrConstants.NT_LINKEDFILE);
+        linkedFile.setProperty(JcrConstants.JCR_CONTENT, file);
+        session.save();
+
+        JcrNodeResource linkedFileResource = new JcrNodeResource(null, linkedFile.getPath(), null, linkedFile, getHelperData());
+        assertEquals(TEST_DATA, linkedFileResource.adaptTo(InputStream.class));
+
+    }
+
     public void testNtFileNtResource() throws Exception {
 
         String name = "file";

Modified: sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java?rev=1690028&r1=1690027&r2=1690028&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java (original)
+++ sling/trunk/bundles/servlets/get/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java Thu Jul  9 08:47:39 2015
@@ -31,12 +31,16 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.StringTokenizer;
 
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.RepositoryException;
 import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
@@ -110,7 +114,7 @@ public class StreamRendererServlet exten
             return;
         }
 
-        final Resource resource = request.getResource();
+        Resource resource = request.getResource();
         if (ResourceUtil.isNonExistingResource(resource)) {
             throw new ResourceNotFoundException("No data to render.");
         }
@@ -132,6 +136,16 @@ public class StreamRendererServlet exten
         }
 
         // fall back to plain text rendering if the resource has no stream
+        if (resource.getResourceType().equals(JcrConstants.NT_LINKEDFILE)) {
+            try {
+                String actualResourcePath = resource.adaptTo(Node.class).getProperty(JcrConstants.JCR_CONTENT).getNode().getPath();
+                resource = request.getResourceResolver().getResource(actualResourcePath);
+            } catch (PathNotFoundException e) {
+                throw new ResourceNotFoundException("No data to render");
+            } catch (RepositoryException e) {
+                throw new IOException(e);
+            }
+        }
         InputStream stream = resource.adaptTo(InputStream.class);
         if (stream != null) {
 
@@ -310,7 +324,6 @@ public class StreamRendererServlet exten
 
     /**
      * @param resource
-     * @param request
      * @param response
      */
     private void setHeaders(Resource resource,
@@ -453,7 +466,6 @@ public class StreamRendererServlet exten
      * @param resource The resource from which to send ranges
      * @param ostream The output stream to write to
      * @param ranges Iterator of the ranges the client wanted to retrieve
-     * @param contentType Content type of the resource
      * @exception IOException if an input/output error occurs
      */
     private void copy(Resource resource, ServletOutputStream ostream,