Author: sseifert
Date: Wed Jul 12 16:46:11 2017
New Revision: 1801751
URL: http://svn.apache.org/viewvc?rev=1801751&view=rev
Log:
SLING-7007 fsresource: Support URL-encoded file names
Added:
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/Escape.java
(with props)
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/mapper/EscapeTest.java
(with props)
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/sling%3Afile1b.txt
(with props)
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/sling%3Acontent2.json
(with props)
Removed:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/file1b.txt
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/content2.json
Modified:
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FilesFolderTest.java
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrMixedTest.java
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrXmlContentTest.java
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/TestUtils.java
Modified:
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java?rev=1801751&r1=1801750&r2=1801751&view=diff
==============================================================================
---
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java
(original)
+++
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java
Wed Jul 12 16:46:11 2017
@@ -131,7 +131,7 @@ public final class ContentFileResourceMa
if (!StringUtils.startsWith(path, providerRootPrefix)) {
return null;
}
- String relPath = path.substring(providerRootPrefix.length());
+ String relPath =
Escape.resourceToFileName(path.substring(providerRootPrefix.length()));
for (String filenameSuffix : contentFileExtensions.getSuffixes()) {
File file = new File(providerFile, relPath + filenameSuffix);
if (file.exists()) {
Added:
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/Escape.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/Escape.java?rev=1801751&view=auto
==============================================================================
---
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/Escape.java
(added)
+++
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/Escape.java
Wed Jul 12 16:46:11 2017
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.fsprovider.internal.mapper;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.BitSet;
+
+import org.apache.commons.lang3.CharEncoding;
+
+/**
+ * Manages deescaping for platform file names to resource names.
+ */
+public final class Escape {
+
+ /**
+ * List of characters typically prohibited on unix and windows file
systems.
+ * "/" is not included because it is neither allowed in resource nor in
file names on any system.
+ */
+ private static final char[] RESERVED_CHARS = {
+ '<',
+ '>',
+ ':',
+ '"',
+ '\\',
+ '|',
+ '?',
+ '*',
+ 0x00
+ };
+ private static final BitSet RESERVED_CHARS_SET = new BitSet();
+ static {
+ for (int i=0; i<RESERVED_CHARS.length; i++) {
+ RESERVED_CHARS_SET.set(RESERVED_CHARS[i]);
+ }
+ }
+
+ private Escape() {
+ // static methods only
+ }
+
+ /**
+ * Convert file name to resource name.
+ * Applies same rules as Apache Sling JCR ContentLoader.
+ * @param path File name or path
+ * @return Resource name or path
+ */
+ public static String fileToResourceName(String path) {
+ // check for encoded characters (%xx)
+ // has encoded characters, need to decode
+ if (path.indexOf('%') >= 0) {
+ try {
+ return URLDecoder.decode(path, "UTF-8");
+ }
+ catch (UnsupportedEncodingException ex) {
+ throw new RuntimeException("Unsupported encoding.", ex);
+ }
+ }
+ return path;
+ }
+
+ /**
+ * Converts resource name to file name.
+ * Allows all characters, but URL-encodes characters that are in the list
of {@link #RESERVED_CHARS}.
+ * @param name Resource name or path
+ * @return File name or path
+ */
+ public static String resourceToFileName(String path) {
+ try {
+ StringBuilder result = new StringBuilder();
+ for (int i=0; i<path.length(); i++) {
+ char c = path.charAt(i);
+ if (RESERVED_CHARS_SET.get(c)) {
+ result.append(URLEncoder.encode(String.valueOf(c),
CharEncoding.UTF_8));
+ }
+ else {
+ result.append(c);
+ }
+ }
+ return result.toString();
+ }
+ catch (UnsupportedEncodingException ex) {
+ throw new RuntimeException("Unsupported encoding.", ex);
+ }
+ }
+
+}
Propchange:
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/Escape.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/Escape.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed Jul 12 16:46:11 2017
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/Escape.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java?rev=1801751&r1=1801750&r2=1801751&view=diff
==============================================================================
---
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java
(original)
+++
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java
Wed Jul 12 16:46:11 2017
@@ -121,7 +121,7 @@ public final class FileResourceMapper im
@Override
public Object transform(Object input) {
File file = (File)input;
- String path = parentPath + "/" + file.getName();
+ String path = parentPath + "/" +
Escape.fileToResourceName(file.getName());
return new FileResource(resolver, path, file,
contentFileExtensions, contentFileCache, fsMode);
}
});
@@ -140,7 +140,7 @@ public final class FileResourceMapper im
return providerFile;
}
if (path.startsWith(providerRootPrefix)) {
- String relPath = path.substring(providerRootPrefix.length());
+ String relPath =
Escape.resourceToFileName(path.substring(providerRootPrefix.length()));
File file = new File(providerFile, relPath);
if (file.exists() && !contentFileExtensions.matchesSuffix(file)) {
return file;
Modified:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FilesFolderTest.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FilesFolderTest.java?rev=1801751&r1=1801750&r2=1801751&view=diff
==============================================================================
---
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FilesFolderTest.java
(original)
+++
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FilesFolderTest.java
Wed Jul 12 16:46:11 2017
@@ -63,10 +63,11 @@ public class FilesFolderTest {
@Test
public void testFiles() {
assertFile(fsroot, "folder1/file1a.txt", "file1a");
- assertFile(fsroot, "folder1/file1b.txt", "file1b");
+ assertFile(fsroot, "folder1/sling:file1b.txt", "file1b");
assertFile(fsroot, "folder1/folder11/file11a.txt", "file11a");
assertFile(fsroot, "folder2/content.json", null);
assertFile(fsroot, "folder2/content/file2content.txt", "file2content");
+ assertFile(fsroot, "folder2/content/sling:content2.json", null);
assertFile(fsroot, "folder3/content.jcr.xml", null);
}
@@ -74,7 +75,7 @@ public class FilesFolderTest {
public void testListChildren() {
assertThat(root, ResourceMatchers.containsChildren("fs-test"));
assertThat(fsroot, ResourceMatchers.hasChildren("folder1", "folder2",
"folder3"));
- assertThat(fsroot.getChild("folder1"),
ResourceMatchers.hasChildren("folder11", "file1a.txt", "file1b.txt"));
+ assertThat(fsroot.getChild("folder1"),
ResourceMatchers.hasChildren("folder11", "file1a.txt", "sling:file1b.txt"));
assertThat(fsroot.getChild("folder2"),
ResourceMatchers.hasChildren("folder21", "content.json"));
assertFalse(fsroot.getChild("folder1/file1a.txt").listChildren().hasNext());
}
Modified:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrMixedTest.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrMixedTest.java?rev=1801751&r1=1801750&r2=1801751&view=diff
==============================================================================
---
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrMixedTest.java
(original)
+++
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrMixedTest.java
Wed Jul 12 16:46:11 2017
@@ -82,7 +82,7 @@ public class JcrMixedTest {
@Test
public void testFiles() {
assertFile(fsroot, "folder1/file1a.txt", "file1a");
- assertFile(fsroot, "folder1/file1b.txt", "file1b");
+ assertFile(fsroot, "folder1/sling:file1b.txt", "file1b");
assertFile(fsroot, "folder1/folder11/file11a.txt", "file11a");
assertFile(fsroot, "folder2/content.json", null);
@@ -97,7 +97,7 @@ public class JcrMixedTest {
public void testListChildren() {
assertThat(root, ResourceMatchers.containsChildren("fs-test"));
assertThat(fsroot, ResourceMatchers.hasChildren("folder1", "folder2",
"folder99"));
- assertThat(fsroot.getChild("folder1"),
ResourceMatchers.hasChildren("file1a.txt", "file1b.txt", "file1c.txt"));
+ assertThat(fsroot.getChild("folder1"),
ResourceMatchers.hasChildren("file1a.txt", "sling:file1b.txt", "file1c.txt"));
}
}
Modified:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrXmlContentTest.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrXmlContentTest.java?rev=1801751&r1=1801750&r2=1801751&view=diff
==============================================================================
---
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrXmlContentTest.java
(original)
+++
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JcrXmlContentTest.java
Wed Jul 12 16:46:11 2017
@@ -81,7 +81,7 @@ public class JcrXmlContentTest {
@Test
public void testFiles() {
assertFile(fsroot, "folder1/file1a.txt", "file1a");
- assertFile(fsroot, "folder1/file1b.txt", "file1b");
+ assertFile(fsroot, "folder1/sling:file1b.txt", "file1b");
assertFile(fsroot, "folder1/folder11/file11a.txt", "file11a");
assertFile(fsroot, "folder2/content.json", null);
assertNull(fsroot.getChild("folder3/content.jcr.xml"));
@@ -91,7 +91,7 @@ public class JcrXmlContentTest {
public void testListChildren() {
assertThat(root, ResourceMatchers.containsChildren("fs-test"));
assertThat(fsroot, ResourceMatchers.hasChildren("folder1", "folder2"));
- assertThat(fsroot.getChild("folder1"),
ResourceMatchers.hasChildren("folder11", "file1a.txt", "file1b.txt"));
+ assertThat(fsroot.getChild("folder1"),
ResourceMatchers.hasChildren("folder11", "file1a.txt", "sling:file1b.txt"));
assertThat(fsroot.getChild("folder2"),
ResourceMatchers.hasChildren("folder21", "content"));
}
Modified:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java?rev=1801751&r1=1801750&r2=1801751&view=diff
==============================================================================
---
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
(original)
+++
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
Wed Jul 12 16:46:11 2017
@@ -91,7 +91,7 @@ public class JsonContentTest {
@Test
public void testFiles() {
assertFile(fsroot, "folder1/file1a.txt", "file1a");
- assertFile(fsroot, "folder1/file1b.txt", "file1b");
+ assertFile(fsroot, "folder1/sling:file1b.txt", "file1b");
assertFile(fsroot, "folder1/folder11/file11a.txt", "file11a");
assertNull(fsroot.getChild("folder2/content.json"));
assertFile(fsroot, "folder2/content/file2content.txt", "file2content");
@@ -102,7 +102,7 @@ public class JsonContentTest {
public void testListChildren() {
assertThat(root, ResourceMatchers.containsChildren("fs-test"));
assertThat(fsroot, ResourceMatchers.hasChildren("folder1", "folder2"));
- assertThat(fsroot.getChild("folder1"),
ResourceMatchers.hasChildren("folder11", "file1a.txt", "file1b.txt"));
+ assertThat(fsroot.getChild("folder1"),
ResourceMatchers.hasChildren("folder11", "file1a.txt", "sling:file1b.txt"));
assertThat(fsroot.getChild("folder2"),
ResourceMatchers.hasChildren("folder21", "content"));
}
@@ -285,4 +285,11 @@ public class JsonContentTest {
assertEquals("en", node.getProperty("jcr:language").getString());
}
+ @Test
+ public void testContent2() throws RepositoryException {
+ Resource content2 = fsroot.getChild("folder2/content/sling:content2");
+ assertNotNull(content2);
+ assertEquals("app:Page", content2.getResourceType());
+ }
+
}
Modified:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/TestUtils.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/TestUtils.java?rev=1801751&r1=1801750&r2=1801751&view=diff
==============================================================================
---
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/TestUtils.java
(original)
+++
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/TestUtils.java
Wed Jul 12 16:46:11 2017
@@ -39,6 +39,7 @@ import org.apache.commons.lang3.StringUt
import org.apache.sling.api.SlingConstants;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.fsprovider.internal.FileMonitor.ResourceChange;
+import org.apache.sling.fsprovider.internal.mapper.Escape;
import org.apache.sling.hamcrest.ResourceMatchers;
import org.apache.sling.testing.mock.osgi.MapUtil;
import org.apache.sling.testing.mock.osgi.context.AbstractContextPlugin;
@@ -85,8 +86,7 @@ class TestUtils {
assertEquals("nt:file", file.getResourceType());
assertNull(file.getResourceSuperType());
- assertEquals(file.getName(), file.adaptTo(File.class).getName());
- assertTrue(StringUtils.contains(file.adaptTo(URL.class).toString(),
file.getName()));
+ assertEquals(file.getName(),
Escape.fileToResourceName(file.adaptTo(File.class).getName()));
if (content != null) {
try {
Added:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/mapper/EscapeTest.java
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/mapper/EscapeTest.java?rev=1801751&view=auto
==============================================================================
---
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/mapper/EscapeTest.java
(added)
+++
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/mapper/EscapeTest.java
Wed Jul 12 16:46:11 2017
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.fsprovider.internal.mapper;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class EscapeTest {
+
+ @Test
+ public void testFileToResourceName() {
+ assertEquals("abc", Escape.fileToResourceName("abc"));
+ assertEquals("abc.txt", Escape.fileToResourceName("abc.txt"));
+ assertEquals("xyz:abc.txt",
Escape.fileToResourceName("xyz%3Aabc.txt"));
+ assertEquals("a<>:\"/\\|?*b",
Escape.fileToResourceName("a%3C%3E%3A%22/%5C%7C%3F%2Ab"));
+ assertEquals("", Escape.fileToResourceName(""));
+ }
+
+ @Test
+ public void testResourceToFileName() {
+ assertEquals("abc", Escape.resourceToFileName("abc"));
+ assertEquals("abc.txt", Escape.resourceToFileName("abc.txt"));
+ assertEquals("xyz%3Aabc.txt",
Escape.resourceToFileName("xyz:abc.txt"));
+ // URLEncoder does not encode '*'
+ assertEquals("a%3C%3E%3A%22/%5C%7C%3F*b",
Escape.resourceToFileName("a<>:\"/\\|?*b"));
+ assertEquals("", Escape.resourceToFileName(""));
+ }
+
+}
Propchange:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/mapper/EscapeTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/mapper/EscapeTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed Jul 12 16:46:11 2017
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/mapper/EscapeTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/sling%3Afile1b.txt
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/sling%253Afile1b.txt?rev=1801751&view=auto
==============================================================================
---
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/sling%3Afile1b.txt
(added)
+++
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/sling%3Afile1b.txt
Wed Jul 12 16:46:11 2017
@@ -0,0 +1 @@
+file1b
\ No newline at end of file
Propchange:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/sling%3Afile1b.txt
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/sling%3Afile1b.txt
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed Jul 12 16:46:11 2017
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder1/sling%3Afile1b.txt
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/sling%3Acontent2.json
URL:
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/sling%253Acontent2.json?rev=1801751&view=auto
==============================================================================
---
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/sling%3Acontent2.json
(added)
+++
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/sling%3Acontent2.json
Wed Jul 12 16:46:11 2017
@@ -0,0 +1,4 @@
+{
+ "jcr:primaryType": "app:Page",
+ "jcr:createdBy": "admin"
+}
Propchange:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/sling%3Acontent2.json
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/sling%3Acontent2.json
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed Jul 12 16:46:11 2017
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/content/sling%3Acontent2.json
------------------------------------------------------------------------------
svn:mime-type = text/plain