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/04 16:02:23 UTC
svn commit: r1793826 - in /sling/trunk/bundles/extensions/fsresource: ./
src/main/java/org/apache/sling/fsprovider/internal/
src/main/java/org/apache/sling/fsprovider/internal/mapper/
src/main/java/org/apache/sling/fsprovider/internal/parser/ src/test/...
Author: sseifert
Date: Thu May 4 16:02:22 2017
New Revision: 1793826
URL: http://svn.apache.org/viewvc?rev=1793826&view=rev
Log:
SLING-6829 FSResource: Support node descriptor files for folders and binary files
Added:
sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21.xml (with props)
sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml (with props)
Modified:
sling/trunk/bundles/extensions/fsresource/pom.xml
sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java
sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java
sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java
sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java
sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java
sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java
sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java
sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/JsonContentTest.java
sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java
Modified: sling/trunk/bundles/extensions/fsresource/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/pom.xml?rev=1793826&r1=1793825&r2=1793826&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/pom.xml (original)
+++ sling/trunk/bundles/extensions/fsresource/pom.xml Thu May 4 16:02:22 2017
@@ -146,7 +146,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.jcr.contentparser</artifactId>
- <version>1.0.0</version>
+ <version>1.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
Modified: sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java?rev=1793826&r1=1793825&r2=1793826&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java Thu May 4 16:02:22 2017
@@ -18,6 +18,9 @@
*/
package org.apache.sling.fsprovider.internal;
+import static org.apache.sling.fsprovider.internal.parser.ContentFileTypes.JCR_XML_SUFFIX;
+import static org.apache.sling.fsprovider.internal.parser.ContentFileTypes.XML_SUFFIX;
+
import java.io.File;
import java.util.Collection;
import java.util.List;
@@ -43,8 +46,15 @@ public final class ContentFileExtensions
public String getSuffix(File file) {
String fileName = "/" + file.getName();
for (String suffix : contentFileSuffixes) {
- if (StringUtils.endsWith(fileName, suffix)) {
- return suffix;
+ if (StringUtils.equals(suffix, XML_SUFFIX)) {
+ if (StringUtils.endsWith(fileName, XML_SUFFIX) && !StringUtils.endsWith(fileName, JCR_XML_SUFFIX)) {
+ return suffix;
+ }
+ }
+ else {
+ if (StringUtils.endsWith(fileName, suffix)) {
+ return suffix;
+ }
}
}
return null;
Modified: sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java?rev=1793826&r1=1793825&r2=1793826&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java Thu May 4 16:02:22 2017
@@ -37,6 +37,7 @@ import org.apache.sling.fsprovider.inter
import org.apache.sling.fsprovider.internal.mapper.FileVaultResourceMapper;
import org.apache.sling.fsprovider.internal.parser.ContentFileCache;
import org.apache.sling.fsprovider.internal.parser.ContentFileTypes;
+import org.apache.sling.jcr.contentparser.ContentType;
import org.apache.sling.spi.resource.provider.ObservationReporter;
import org.apache.sling.spi.resource.provider.ProviderContext;
import org.apache.sling.spi.resource.provider.ResolveContext;
@@ -188,9 +189,9 @@ public final class FsResourceProvider ex
else {
// Sling-Initial-Content: mount folder/files an content files
askParentResourceProvider = this.overlayParentResourceProvider;
- rsrc = contentFileMapper.getResource(resolver, path);
+ rsrc = fileMapper.getResource(resolver, path);
if (rsrc == null) {
- rsrc = fileMapper.getResource(resolver, path);
+ rsrc = contentFileMapper.getResource(resolver, path);
}
}
@@ -235,7 +236,7 @@ public final class FsResourceProvider ex
}
}
else {
- // Sling-Initial-Content: get all matchind folders/files and content files
+ // Sling-Initial-Content: get all matching folders/files and content files
askParentResourceProvider = this.overlayParentResourceProvider;
children = contentFileMapper.getChildren(resolver, parent);
if (children != null) {
@@ -322,12 +323,15 @@ public final class FsResourceProvider ex
}
else if (fsMode == FsMode.INITIAL_CONTENT) {
overlayParentResourceProvider = !options.isOverwrite();
- if (!options.getIgnoreImportProviders().contains("json")) {
+ if (!options.getIgnoreImportProviders().contains(ContentType.JSON.getExtension())) {
contentFileSuffixes.add(ContentFileTypes.JSON_SUFFIX);
}
- if (!options.getIgnoreImportProviders().contains("jcr.xml")) {
+ if (!options.getIgnoreImportProviders().contains(ContentType.JCR_XML.getExtension())) {
contentFileSuffixes.add(ContentFileTypes.JCR_XML_SUFFIX);
}
+ if (!options.getIgnoreImportProviders().contains(ContentType.XML.getExtension())) {
+ contentFileSuffixes.add(ContentFileTypes.XML_SUFFIX);
+ }
}
ContentFileExtensions contentFileExtensions = new ContentFileExtensions(contentFileSuffixes);
@@ -336,7 +340,7 @@ public final class FsResourceProvider ex
this.fileVaultMapper = new FileVaultResourceMapper(this.providerFile, filterXmlFile, this.contentFileCache);
}
else {
- this.fileMapper = new FileResourceMapper(this.providerRoot, this.providerFile, contentFileExtensions);
+ this.fileMapper = new FileResourceMapper(this.providerRoot, this.providerFile, contentFileExtensions, this.contentFileCache);
this.contentFileMapper = new ContentFileResourceMapper(this.providerRoot, this.providerFile,
contentFileExtensions, this.contentFileCache);
}
Modified: sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java?rev=1793826&r1=1793825&r2=1793826&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java Thu May 4 16:02:22 2017
@@ -88,7 +88,7 @@ public final class ContentFileResourceMa
List<Resource> childResources = new ArrayList<>();
for (File file : parentFile.listFiles()) {
String filenameSuffix = contentFileExtensions.getSuffix(file);
- if (filenameSuffix != null) {
+ if (filenameSuffix != null && !isNodeDescriptor(file)) {
String path = parentPath + "/" + StringUtils.substringBeforeLast(file.getName(), filenameSuffix);
ContentFile contentFile = new ContentFile(file, path, null, contentFileCache);
childResources.add(new ContentFileResource(resolver, contentFile));
@@ -144,5 +144,15 @@ public final class ContentFileResourceMa
+ (subPath != null ? "/" + subPath : "");
return getFile(parentPath, nextSubPath);
}
-
+
+ private boolean isNodeDescriptor(File file) {
+ for (String filenameSuffix : contentFileExtensions.getSuffixes()) {
+ if (StringUtils.endsWith(file.getPath(), filenameSuffix)) {
+ File fileWithoutSuffix = new File(StringUtils.substringBeforeLast(file.getPath(), filenameSuffix));
+ return fileWithoutSuffix.exists();
+ }
+ }
+ return false;
+ }
+
}
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=1793826&r1=1793825&r2=1793826&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 Thu May 4 16:02:22 2017
@@ -28,6 +28,7 @@ import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.sling.adapter.annotations.Adaptable;
@@ -37,8 +38,12 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
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.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;
import org.slf4j.LoggerFactory;
@@ -73,11 +78,18 @@ public final class FileResource extends
// the file wrapped by this instance
private final File file;
+ // the resource metadata, assigned on demand
+ private ResourceMetadata metaData;
+
// the resource type, assigned on demand
private String resourceType;
+ private String resourceSuperType;
+
+ // valuemap is build on demand
+ private ValueMap valueMap;
- // the resource metadata, assigned on demand
- private ResourceMetadata metaData;
+ private final ContentFileExtensions contentFileExtensions;
+ private final ContentFileCache contentFileCache;
private static final Logger log = LoggerFactory.getLogger(FileResource.class);
@@ -89,9 +101,16 @@ public final class FileResource extends
* @param file The wrapped file
*/
FileResource(ResourceResolver resolver, String resourcePath, File file) {
+ this(resolver, resourcePath, file, null, null);
+ }
+
+ FileResource(ResourceResolver resolver, String resourcePath, File file,
+ ContentFileExtensions contentFileExtensions, ContentFileCache contentFileCache) {
this.resolver = resolver;
this.resourcePath = resourcePath;
this.file = file;
+ this.contentFileExtensions = contentFileExtensions;
+ this.contentFileCache = contentFileCache;
}
/**
@@ -127,21 +146,21 @@ public final class FileResource extends
return resolver;
}
- /**
- * Returns <code>null</code>}
- */
public String getResourceSuperType() {
- return null;
+ if (resourceSuperType == null) {
+ resourceSuperType = getValueMap().get("sling:resourceSuperType", String.class);
+ }
+ return resourceSuperType;
}
- /**
- * Returns {@link #RESOURCE_TYPE_FILE} if this resource
- * wraps a file. Otherwise {@link #RESOURCE_TYPE_FOLDER}
- * is returned.
- */
public String getResourceType() {
if (resourceType == null) {
- resourceType = file.isFile() ? RESOURCE_TYPE_FILE : RESOURCE_TYPE_FOLDER;
+ ValueMap props = getValueMap();
+ resourceType = props.get("sling:resourceType", String.class);
+ if (resourceType == null) {
+ // fallback to jcr:primaryType when resource type not set
+ resourceType = props.get("jcr:primaryType", String.class);
+ }
}
return resourceType;
}
@@ -177,20 +196,9 @@ public final class FileResource extends
catch (MalformedURLException mue) {
log.info("adaptTo: Cannot convert the file path " + file + " to an URL", mue);
}
-
}
else if (type == ValueMap.class) {
- // this resource simulates nt:file/nt:folder behavior by returning it as resource type
- // we should simulate the corresponding JCR properties in a value map as well
- if (file.exists() && file.canRead()) {
- Map<String,Object> props = new HashMap<String, Object>();
- props.put("jcr:primaryType", getResourceType());
- props.put("jcr:createdBy", "system");
- Calendar lastModifed = Calendar.getInstance();
- lastModifed.setTimeInMillis(file.lastModified());
- props.put("jcr:created", lastModifed);
- return (AdapterType) new ValueMapDecorator(props);
- }
+ return (AdapterType) getValueMap();
}
return super.adaptTo(type);
}
@@ -204,4 +212,50 @@ public final class FileResource extends
.build();
}
+ @Override
+ public ValueMap getValueMap() {
+ if (valueMap == null) {
+ // this resource simulates nt:file/nt:folder behavior by returning it as resource type
+ // we should simulate the corresponding JCR properties in a value map as well
+ if (file.exists() && file.canRead()) {
+ Map<String,Object> props = new HashMap<String, Object>();
+ props.put("jcr:primaryType", file.isFile() ? RESOURCE_TYPE_FILE : RESOURCE_TYPE_FOLDER);
+ props.put("jcr:createdBy", "system");
+
+ Calendar lastModifed = Calendar.getInstance();
+ lastModifed.setTimeInMillis(file.lastModified());
+ 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()) {
+ // 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)) {
+ continue;
+ }
+ props.put(entry.getKey(), entry.getValue());
+ }
+ }
+
+ valueMap = new ValueMapDecorator(props);
+ }
+ }
+ return valueMap;
+ }
+
+ private ContentElement getNodeDescriptorContent() {
+ 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 null;
+ }
+
}
Modified: sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java?rev=1793826&r1=1793825&r2=1793826&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java Thu May 4 16:02:22 2017
@@ -29,6 +29,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.fsprovider.internal.ContentFileExtensions;
import org.apache.sling.fsprovider.internal.FsResourceMapper;
+import org.apache.sling.fsprovider.internal.parser.ContentFileCache;
public final class FileResourceMapper implements FsResourceMapper {
@@ -42,19 +43,22 @@ public final class FileResourceMapper im
private final File providerFile;
private final ContentFileExtensions contentFileExtensions;
+ private final ContentFileCache contentFileCache;
- public FileResourceMapper(String providerRoot, File providerFile, ContentFileExtensions contentFileExtensions) {
+ public FileResourceMapper(String providerRoot, File providerFile,
+ ContentFileExtensions contentFileExtensions, ContentFileCache contentFileCache) {
this.providerRoot = providerRoot;
this.providerRootPrefix = providerRoot.concat("/");
this.providerFile = providerFile;
this.contentFileExtensions = contentFileExtensions;
+ this.contentFileCache = contentFileCache;
}
@Override
public Resource getResource(final ResourceResolver resolver, final String resourcePath) {
File file = getFile(resourcePath);
if (file != null) {
- return new FileResource(resolver, resourcePath, file);
+ return new FileResource(resolver, resourcePath, file, contentFileExtensions, contentFileCache);
}
else {
return null;
@@ -84,7 +88,7 @@ public final class FileResourceMapper im
if (providerRoot.startsWith(parentPathPrefix)) {
String relPath = providerRoot.substring(parentPathPrefix.length());
if (relPath.indexOf('/') < 0) {
- Resource res = new FileResource(resolver, providerRoot, providerFile);
+ Resource res = new FileResource(resolver, providerRoot, providerFile, contentFileExtensions, contentFileCache);
return IteratorUtils.singletonIterator(res);
}
}
@@ -115,7 +119,7 @@ public final class FileResourceMapper im
public Object transform(Object input) {
File file = (File)input;
String path = parentPath + "/" + file.getName();
- return new FileResource(resolver, path, file);
+ return new FileResource(resolver, path, file, contentFileExtensions, contentFileCache);
}
});
}
Modified: sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java?rev=1793826&r1=1793825&r2=1793826&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java Thu May 4 16:02:22 2017
@@ -20,6 +20,7 @@ package org.apache.sling.fsprovider.inte
import static org.apache.jackrabbit.vault.util.Constants.DOT_CONTENT_XML;
import static org.apache.sling.fsprovider.internal.parser.ContentFileTypes.JCR_XML_SUFFIX;
+import static org.apache.sling.fsprovider.internal.parser.ContentFileTypes.XML_SUFFIX;
import static org.apache.sling.fsprovider.internal.parser.ContentFileTypes.JSON_SUFFIX;
import java.io.BufferedInputStream;
@@ -54,6 +55,7 @@ class ContentFileParserUtil {
}
}
private static final ContentParser JCR_XML_PARSER = ContentParserFactory.create(ContentType.JCR_XML);
+ private static final ContentParser XML_PARSER = ContentParserFactory.create(ContentType.XML);
private ContentFileParserUtil() {
// static methods only
@@ -75,6 +77,9 @@ class ContentFileParserUtil {
else if (StringUtils.equals(file.getName(), DOT_CONTENT_XML) || StringUtils.endsWith(file.getName(), JCR_XML_SUFFIX)) {
return parse(JCR_XML_PARSER, file);
}
+ else if (StringUtils.endsWith(file.getName(), XML_SUFFIX) && !StringUtils.endsWith(file.getName(), JCR_XML_SUFFIX)) {
+ return parse(XML_PARSER, file);
+ }
}
catch (Throwable ex) {
log.warn("Error parsing content from " + file.getPath(), ex);
Modified: sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java?rev=1793826&r1=1793825&r2=1793826&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java Thu May 4 16:02:22 2017
@@ -31,6 +31,11 @@ public final class ContentFileTypes {
public static final String JSON_SUFFIX = "." + ContentType.JSON.getExtension();
/**
+ * XML content files.
+ */
+ public static final String XML_SUFFIX = "." + ContentType.XML.getExtension();
+
+ /**
* JCR XML content files.
*/
public static final String JCR_XML_SUFFIX = "." + ContentType.JCR_XML.getExtension();
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=1793826&r1=1793825&r2=1793826&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 Thu May 4 16:02:22 2017
@@ -257,7 +257,22 @@ public class JsonContentTest {
Resource child2 = children.get(1);
assertEquals("folder21", child2.getName());
- assertEquals("nt:folder", child2.getValueMap().get("jcr:primaryType", String.class));
+ assertEquals("sling:OrderedFolder", child2.getValueMap().get("jcr:primaryType", String.class));
+ }
+
+ @Test
+ public void testFile21aNodeDescriptor() throws RepositoryException {
+ Resource file21a = fsroot.getChild("folder2/folder21/file21a.txt");
+ assertEquals("nt:file", file21a.getResourceType());
+ assertEquals("/my/super/type", file21a.getResourceSuperType());
+
+ ValueMap props = file21a.getValueMap();
+ assertEquals("nt:file", props.get("jcr:primaryType", String.class));
+ assertEquals("/my/super/type", props.get("sling:resourceSuperType", String.class));
+ assertEquals("en", props.get("jcr:language", String.class));
+ assertArrayEquals(new String[] { "mix:language" }, props.get("jcr:mixinTypes", String[].class));
+
+ assertNull(fsroot.getChild("folder2/folder21/file21a.txt.xml"));
}
}
Modified: sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java?rev=1793826&r1=1793825&r2=1793826&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java (original)
+++ sling/trunk/bundles/extensions/fsresource/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java Thu May 4 16:02:22 2017
@@ -60,4 +60,12 @@ public class ContentFileParserUtilTest {
assertNull(content);
}
+ @Test
+ public void testParseXml() {
+ File file = new File("src/test/resources/fs-test/folder2/folder21.xml");
+ ContentElement content = ContentFileParserUtil.parse(file);
+ assertNotNull(content);
+ assertEquals("sling:OrderedFolder", content.getProperties().get("jcr:primaryType"));
+ }
+
}
Added: sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21.xml?rev=1793826&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21.xml (added)
+++ sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21.xml Thu May 4 16:02:22 2017
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node>
+ <primaryNodeType>sling:OrderedFolder</primaryNodeType>
+</node>
Propchange: sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21.xml
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Thu May 4 16:02:22 2017
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml?rev=1793826&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml (added)
+++ sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml Thu May 4 16:02:22 2017
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<node>
+ <name>file21a.txt</name>
+ <mixinNodeType>mix:language</mixinNodeType>
+ <property>
+ <name>jcr:language</name>
+ <value>en</value>
+ <type>String</type>
+ </property>
+ <property>
+ <name>sling:resourceSuperType</name>
+ <value>/my/super/type</value>
+ <type>String</type>
+ </property>
+</node>
Propchange: sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Thu May 4 16:02:22 2017
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/bundles/extensions/fsresource/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain