Author: sseifert Date: Thu May 4 16:10:35 2017 New Revision: 1793827 URL: http://svn.apache.org/viewvc?rev=1793827&view=rev Log: SLING-6829 FSResource: Support node descriptor files for folders and binary files
Added: sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21.xml (with props) sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml (with props) Modified: sling/branches/fsresource-1.x/pom.xml sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java 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/FileResource.java sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResourceMapper.java sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.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/parser/ContentFileParserUtilTest.java Modified: sling/branches/fsresource-1.x/pom.xml URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/pom.xml?rev=1793827&r1=1793826&r2=1793827&view=diff ============================================================================== --- sling/branches/fsresource-1.x/pom.xml (original) +++ sling/branches/fsresource-1.x/pom.xml Thu May 4 16:10:35 2017 @@ -148,7 +148,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/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java?rev=1793827&r1=1793826&r2=1793827&view=diff ============================================================================== --- sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java (original) +++ sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/ContentFileExtensions.java Thu May 4 16:10:35 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/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java?rev=1793827&r1=1793826&r2=1793827&view=diff ============================================================================== --- sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java (original) +++ sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java Thu May 4 16:10:35 2017 @@ -40,6 +40,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.osgi.framework.BundleContext; import org.osgi.framework.Constants; import org.osgi.service.component.annotations.Activate; @@ -184,9 +185,9 @@ public final class FsResourceProvider im } else { // Sling-Initial-Content: mount folder/files an content files - rsrc = contentFileMapper.getResource(resolver, path); + rsrc = fileMapper.getResource(resolver, path); if (rsrc == null) { - rsrc = fileMapper.getResource(resolver, path); + rsrc = contentFileMapper.getResource(resolver, path); } } @@ -211,7 +212,7 @@ public final class FsResourceProvider im } } else { - // Sling-Initial-Content: get all matchind folders/files and content files + // Sling-Initial-Content: get all matching folders/files and content files children = contentFileMapper.getChildren(resolver, parent); if (children != null) { allChildren.add(children); @@ -270,12 +271,15 @@ public final class FsResourceProvider im } } else if (fsMode == FsMode.INITIAL_CONTENT) { - 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); @@ -284,7 +288,7 @@ public final class FsResourceProvider im 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/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=1793827&r1=1793826&r2=1793827&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 Thu May 4 16:10:35 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/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java?rev=1793827&r1=1793826&r2=1793827&view=diff ============================================================================== --- sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java (original) +++ sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileResource.java Thu May 4 16:10:35 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,7 +38,11 @@ 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.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; @@ -72,11 +77,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); @@ -88,9 +100,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; } /** @@ -126,21 +145,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; } @@ -176,20 +195,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); } @@ -203,4 +211,49 @@ public final class FileResource extends .build(); } + 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/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=1793827&r1=1793826&r2=1793827&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 Thu May 4 16:10:35 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/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java?rev=1793827&r1=1793826&r2=1793827&view=diff ============================================================================== --- sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java (original) +++ sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtil.java Thu May 4 16:10:35 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/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java?rev=1793827&r1=1793826&r2=1793827&view=diff ============================================================================== --- sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java (original) +++ sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/parser/ContentFileTypes.java Thu May 4 16:10:35 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/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=1793827&r1=1793826&r2=1793827&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 Thu May 4 16:10:35 2017 @@ -260,7 +260,22 @@ public class JsonContentTest { Resource child2 = children.get(1); assertEquals("folder21", child2.getName()); - assertEquals("nt:folder", ResourceUtil.getValueMap(child2).get("jcr:primaryType", String.class)); + assertEquals("sling:OrderedFolder", ResourceUtil.getValueMap(child2).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 = ResourceUtil.getValueMap(file21a); + 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/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java?rev=1793827&r1=1793826&r2=1793827&view=diff ============================================================================== --- sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java (original) +++ sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/parser/ContentFileParserUtilTest.java Thu May 4 16:10:35 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/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21.xml URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21.xml?rev=1793827&view=auto ============================================================================== --- sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21.xml (added) +++ sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21.xml Thu May 4 16:10:35 2017 @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> +<node> + <primaryNodeType>sling:OrderedFolder</primaryNodeType> +</node> Propchange: sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21.xml ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Thu May 4 16:10:35 2017 @@ -0,0 +1 @@ +LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author Propchange: sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21.xml ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml URL: http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml?rev=1793827&view=auto ============================================================================== --- sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml (added) +++ sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml Thu May 4 16:10:35 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/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml ------------------------------------------------------------------------------ --- svn:keywords (added) +++ svn:keywords Thu May 4 16:10:35 2017 @@ -0,0 +1 @@ +LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author Propchange: sling/branches/fsresource-1.x/src/test/resources/fs-test/folder2/folder21/file21a.txt.xml ------------------------------------------------------------------------------ svn:mime-type = text/plain