This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.fsresource-1.3.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-fsresource.git
commit 56b09e5df9ca8e1372c91ac40f1622e855d8153d Author: Stefan Seifert <[email protected]> AuthorDate: Thu Mar 9 17:25:34 2017 +0000 SLING-6537 FileVault XML support git-svn-id: https://svn.apache.org/repos/asf/sling/branches/fsresource-1.x@1786205 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/fsprovider/internal/FileMonitor.java | 3 +-- .../fsprovider/internal/FsResourceProvider.java | 10 +++++++++- .../internal/mapper/FileVaultResourceMapper.java | 22 ++++++++++------------ .../fsprovider/internal/FileVaultContentTest.java | 6 ++++-- .../internal/FileVaultFileMonitorTest.java | 6 ++++-- 5 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java b/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java index d77a2f6..f4db089 100644 --- a/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java +++ b/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java @@ -18,7 +18,6 @@ */ package org.apache.sling.fsprovider.internal; -import static org.apache.jackrabbit.vault.util.Constants.ROOT_DIR; import static org.apache.sling.api.SlingConstants.PROPERTY_PATH; import static org.apache.sling.api.SlingConstants.PROPERTY_RESOURCE_TYPE; import static org.apache.sling.api.SlingConstants.TOPIC_RESOURCE_ADDED; @@ -77,7 +76,7 @@ public final class FileMonitor extends TimerTask { File rootFile = this.provider.getRootFile(); if (fsMode == FsMode.FILEVAULT_XML) { - rootFile = new File(this.provider.getRootFile(), ROOT_DIR + PlatformNameFormat.getPlatformPath(this.provider.getProviderRoot())); + rootFile = new File(this.provider.getRootFile(), "." + PlatformNameFormat.getPlatformPath(this.provider.getProviderRoot())); } this.root = new Monitorable(this.provider.getProviderRoot(), rootFile, null); diff --git a/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java b/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java index 4ec8a07..5e42a90 100644 --- a/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java +++ b/src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java @@ -129,6 +129,10 @@ public final class FsResourceProvider implements ResourceProvider { description = "Import options for Sling-Initial-Content filesystem layout. Supported options: overwrite, ignoreImportProviders.") String provider_initial_content_import_options(); + @AttributeDefinition(name = "FileVault Filter", + description = "Path to META-INF/vault/filter.xml when using FileVault XML filesystem layout.") + String provider_filevault_filterxml_path(); + @AttributeDefinition(name = "Cache Size", description = "Max. number of content files cached in memory.") int provider_cache_size() default 10000; @@ -264,10 +268,14 @@ public final class FsResourceProvider implements ResourceProvider { this.providerFile = getProviderFile(providerFileName, bundleContext); InitialContentImportOptions options = new InitialContentImportOptions(config.provider_initial_content_import_options()); + File filterXmlFile = null; List<String> contentFileSuffixes = new ArrayList<>(); if (fsMode == FsMode.FILEVAULT_XML) { contentFileSuffixes.add("/" + DOT_CONTENT_XML); + if (StringUtils.isNotBlank(config.provider_filevault_filterxml_path())) { + filterXmlFile = new File(config.provider_filevault_filterxml_path()); + } } else if (fsMode == FsMode.INITIAL_CONTENT) { if (!options.getIgnoreImportProviders().contains("json")) { @@ -281,7 +289,7 @@ public final class FsResourceProvider implements ResourceProvider { this.contentFileCache = new ContentFileCache(config.provider_cache_size()); if (fsMode == FsMode.FILEVAULT_XML) { - this.fileVaultMapper = new FileVaultResourceMapper(this.providerFile, this.contentFileCache); + this.fileVaultMapper = new FileVaultResourceMapper(this.providerFile, filterXmlFile, this.contentFileCache); } else { this.fileMapper = new FileResourceMapper(this.providerRoot, this.providerFile, contentFileExtensions); diff --git a/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java b/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java index 88e001e..cb25230 100644 --- a/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java +++ b/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java @@ -19,9 +19,6 @@ package org.apache.sling.fsprovider.internal.mapper; import static org.apache.jackrabbit.vault.util.Constants.DOT_CONTENT_XML; -import static org.apache.jackrabbit.vault.util.Constants.FILTER_XML; -import static org.apache.jackrabbit.vault.util.Constants.META_DIR; -import static org.apache.jackrabbit.vault.util.Constants.ROOT_DIR; import java.io.File; import java.io.IOException; @@ -51,13 +48,15 @@ public final class FileVaultResourceMapper implements FsResourceMapper { private static final String DOT_DIR_SUFFIX = "/.dir"; private final File providerFile; + private final File filterXmlFile; private final ContentFileCache contentFileCache; private final WorkspaceFilter workspaceFilter; private static final Logger log = LoggerFactory.getLogger(FileVaultResourceMapper.class); - public FileVaultResourceMapper(File providerFile, ContentFileCache contentFileCache) { + public FileVaultResourceMapper(File providerFile, File filterXmlFile, ContentFileCache contentFileCache) { this.providerFile = providerFile; + this.filterXmlFile = filterXmlFile; this.contentFileCache = contentFileCache; this.workspaceFilter = getWorkspaceFilter(); } @@ -134,18 +133,17 @@ public final class FileVaultResourceMapper implements FsResourceMapper { * @return Workspace filter or null if none found. */ private WorkspaceFilter getWorkspaceFilter() { - File filter = new File(providerFile, META_DIR + "/" + FILTER_XML); - if (filter.exists()) { + if (filterXmlFile != null && filterXmlFile.exists()) { try { DefaultWorkspaceFilter workspaceFilter = new DefaultWorkspaceFilter(); - workspaceFilter.load(filter); + workspaceFilter.load(filterXmlFile); return workspaceFilter; } catch (IOException | ConfigurationException ex) { - log.error("Unable to parse workspace filter: " + filter.getPath(), ex); + log.error("Unable to parse workspace filter: " + filterXmlFile.getPath(), ex); } } else { - log.warn("Workspace filter not found: " + filter.getPath()); + log.debug("Workspace filter not found: " + filterXmlFile.getPath()); } return null; } @@ -161,7 +159,7 @@ public final class FileVaultResourceMapper implements FsResourceMapper { return false; } if (workspaceFilter == null) { - return false; + return true; } else { return workspaceFilter.contains(path); @@ -172,7 +170,7 @@ public final class FileVaultResourceMapper implements FsResourceMapper { if (StringUtils.endsWith(path, DOT_CONTENT_XML_SUFFIX)) { return null; } - File file = new File(providerFile, ROOT_DIR + PlatformNameFormat.getPlatformPath(path)); + File file = new File(providerFile, "." + PlatformNameFormat.getPlatformPath(path)); if (file.exists()) { return file; } @@ -180,7 +178,7 @@ public final class FileVaultResourceMapper implements FsResourceMapper { } private ContentFile getContentFile(String path, String subPath) { - File file = new File(providerFile, ROOT_DIR + PlatformNameFormat.getPlatformPath(path) + DOT_CONTENT_XML_SUFFIX); + File file = new File(providerFile, "." + PlatformNameFormat.getPlatformPath(path) + DOT_CONTENT_XML_SUFFIX); if (file.exists()) { ContentFile contentFile = new ContentFile(file, path, subPath, contentFileCache); if (contentFile.hasContent()) { diff --git a/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java b/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java index b6dda6a..13a0bcf 100644 --- a/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java +++ b/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java @@ -57,12 +57,14 @@ public class FileVaultContentTest { public SlingContext context = new SlingContextBuilder(ResourceResolverType.JCR_MOCK) .plugin(new RegisterFsResourcePlugin( "provider.fs.mode", FsMode.FILEVAULT_XML.name(), - "provider.file", "src/test/resources/vaultfs-test", + "provider.file", "src/test/resources/vaultfs-test/jcr_root", + "provider.filevault.filterxml.path", "src/test/resources/vaultfs-test/META-INF/vault/filter.xml", "provider.roots", "/content/dam/talk.png" )) .plugin(new RegisterFsResourcePlugin( "provider.fs.mode", FsMode.FILEVAULT_XML.name(), - "provider.file", "src/test/resources/vaultfs-test", + "provider.file", "src/test/resources/vaultfs-test/jcr_root", + "provider.filevault.filterxml.path", "src/test/resources/vaultfs-test/META-INF/vault/filter.xml", "provider.roots", "/content/samples" )) .build(); diff --git a/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java b/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java index 7219033..ff7beea 100644 --- a/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java +++ b/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java @@ -68,12 +68,14 @@ public class FileVaultFileMonitorTest { // mount temp. directory context.registerInjectActivateService(new FsResourceProvider(), - "provider.file", tempDir.getPath(), + "provider.file", tempDir.getPath() + "/jcr_root", + "provider.filevault.filterxml.path", tempDir.getPath() + "/META-INF/vault/filter.xml", "provider.roots", "/content/dam/talk.png", "provider.checkinterval", CHECK_INTERVAL, "provider.fs.mode", FsMode.FILEVAULT_XML.name()); context.registerInjectActivateService(new FsResourceProvider(), - "provider.file", tempDir.getPath(), + "provider.file", tempDir.getPath() + "/jcr_root", + "provider.filevault.filterxml.path", tempDir.getPath() + "/META-INF/vault/filter.xml", "provider.roots", "/content/samples", "provider.checkinterval", CHECK_INTERVAL, "provider.fs.mode", FsMode.FILEVAULT_XML.name()); -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
