Author: sseifert
Date: Thu Mar  9 17:25:34 2017
New Revision: 1786205

URL: http://svn.apache.org/viewvc?rev=1786205&view=rev
Log:
SLING-6537 FileVault XML support

Modified:
    
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.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/FileVaultResourceMapper.java
    
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java
    
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java

Modified: 
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java
URL: 
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java?rev=1786205&r1=1786204&r2=1786205&view=diff
==============================================================================
--- 
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java
 (original)
+++ 
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/FileMonitor.java
 Thu Mar  9 17:25:34 2017
@@ -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 T
         
         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);
         

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=1786205&r1=1786204&r2=1786205&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 Mar  9 17:25:34 2017
@@ -129,6 +129,10 @@ public final class FsResourceProvider im
                 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 im
         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 im
         
         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);

Modified: 
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java
URL: 
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java?rev=1786205&r1=1786204&r2=1786205&view=diff
==============================================================================
--- 
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java
 (original)
+++ 
sling/branches/fsresource-1.x/src/main/java/org/apache/sling/fsprovider/internal/mapper/FileVaultResourceMapper.java
 Thu Mar  9 17:25:34 2017
@@ -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 FileVaultResourceMapp
     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 FileVaultResourceMapp
      * @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 FileVaultResourceMapp
             return false;
         }
         if (workspaceFilter == null) {
-            return false;
+            return true;
         }
         else {
             return workspaceFilter.contains(path);
@@ -172,7 +170,7 @@ public final class FileVaultResourceMapp
         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 FileVaultResourceMapp
     }
     
     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()) {

Modified: 
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java
URL: 
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java?rev=1786205&r1=1786204&r2=1786205&view=diff
==============================================================================
--- 
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java
 (original)
+++ 
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultContentTest.java
 Thu Mar  9 17:25:34 2017
@@ -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();

Modified: 
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java
URL: 
http://svn.apache.org/viewvc/sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java?rev=1786205&r1=1786204&r2=1786205&view=diff
==============================================================================
--- 
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java
 (original)
+++ 
sling/branches/fsresource-1.x/src/test/java/org/apache/sling/fsprovider/internal/FileVaultFileMonitorTest.java
 Thu Mar  9 17:25:34 2017
@@ -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());


Reply via email to