You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2017/05/23 23:27:05 UTC

svn commit: r1795980 - in /sling/trunk/bundles/extensions/fsresource/src: main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java

Author: sseifert
Date: Tue May 23 23:27:05 2017
New Revision: 1795980

URL: http://svn.apache.org/viewvc?rev=1795980&view=rev
Log:
SLING-6877 FSResource: Allow to adapt to Node from FileResource

Modified:
    sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java
    sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java

Modified: sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java?rev=1795980&r1=1795979&r2=1795980&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java Tue May 23 23:27:05 2017
@@ -28,6 +28,8 @@ import java.util.Calendar;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.jcr.Node;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -40,8 +42,8 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.fsprovider.internal.ContentFileExtensions;
 import org.apache.sling.fsprovider.internal.FsResourceProvider;
+import org.apache.sling.fsprovider.internal.mapper.jcr.FsNode;
 import org.apache.sling.fsprovider.internal.mapper.valuemap.ValueMapDecorator;
-import org.apache.sling.fsprovider.internal.parser.ContentElement;
 import org.apache.sling.fsprovider.internal.parser.ContentFileCache;
 import org.apache.sling.jcr.contentparser.ParserOptions;
 import org.slf4j.Logger;
@@ -200,6 +202,13 @@ public final class FileResource extends
         else if (type == ValueMap.class) {
             return (AdapterType) getValueMap();
         }
+        else if (type == Node.class) {
+            ContentFile contentFile = getNodeDescriptorContentFile();
+            if (contentFile != null) {
+                // support a subset of JCR API for content file resources
+                return (AdapterType)new FsNode(contentFile, getResourceResolver());
+            }
+        }
         return super.adaptTo(type);
     }
 
@@ -227,9 +236,9 @@ public final class FileResource extends
                 props.put("jcr:created", lastModifed);
                 
                 // overlay properties with those from node descriptor content file, if it exists
-                ContentElement content = getNodeDescriptorContent();
-                if (content != null) {
-                    for (Map.Entry<String, Object> entry : content.getProperties().entrySet()) {
+                ContentFile contentFile = getNodeDescriptorContentFile();
+                if (contentFile != null) {
+                    for (Map.Entry<String, Object> entry : contentFile.getValueMap().entrySet()) {
                         // skip primary type if it is the default type assigned by contentparser when none is defined
                         if (StringUtils.equals(entry.getKey(), "jcr:primaryType")
                                 && StringUtils.equals((String)entry.getValue(), ParserOptions.DEFAULT_PRIMARY_TYPE)) {
@@ -245,14 +254,14 @@ public final class FileResource extends
         return valueMap;
     }
     
-    private ContentElement getNodeDescriptorContent() {
+    private ContentFile getNodeDescriptorContentFile() {
         if (contentFileExtensions == null || contentFileCache == null) {
             return null;
         }
         for (String fileNameSuffix : contentFileExtensions.getSuffixes()) {
             File fileWithSuffix = new File(file.getPath() + fileNameSuffix);
             if (fileWithSuffix.exists() && fileWithSuffix.canRead()) {
-                return contentFileCache.get(resourcePath, fileWithSuffix);
+                return new ContentFile(fileWithSuffix, resourcePath, null, contentFileCache);
             }
         }
         return null;

Modified: sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java?rev=1795980&r1=1795979&r2=1795980&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java Tue May 23 23:27:05 2017
@@ -275,6 +275,11 @@ public class JsonContentTest {
         assertArrayEquals(new String[] { "mix:language" }, props.get("jcr:mixinTypes", String[].class));
 
         assertNull(fsroot.getChild("folder2/folder21/file21a.txt.xml"));
+        
+        Node node = file21a.adaptTo(Node.class);
+        assertNotNull(node);
+        assertEquals("/my/super/type", node.getProperty("sling:resourceSuperType").getString());
+        assertEquals("en", node.getProperty("jcr:language").getString());
     }
 
 }