Author: tmaret
Date: Mon Aug 22 15:06:44 2016
New Revision: 1757192

URL: http://svn.apache.org/viewvc?rev=1757192&view=rev
Log:
SLING-5906 - Allow to filter resource by properties

* Update org.apache.jackrabbit.vault dependency in order to include JCRVLT-120
* Allow to configure a Package Property Filter, pass the configured filters to 
the vlt WorkspaceFilter

Modified:
    sling/trunk/contrib/extensions/distribution/core/pom.xml
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
    
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
    sling/trunk/contrib/extensions/distribution/it/pom.xml

Modified: sling/trunk/contrib/extensions/distribution/core/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/pom.xml?rev=1757192&r1=1757191&r2=1757192&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/pom.xml (original)
+++ sling/trunk/contrib/extensions/distribution/core/pom.xml Mon Aug 22 
15:06:44 2016
@@ -211,7 +211,7 @@
         <dependency>
             <groupId>org.apache.jackrabbit.vault</groupId>
             <artifactId>org.apache.jackrabbit.vault</artifactId>
-            <version>3.1.24</version>
+            <version>3.1.28</version>
         </dependency>
         <!-- HTTP -->
         <dependency>

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java?rev=1757192&r1=1757191&r2=1757192&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
 Mon Aug 22 15:06:44 2016
@@ -64,19 +64,21 @@ public class FileVaultContentSerializer
     private final AccessControlHandling aclHandling;
     private final String[] packageRoots;
     private final int autosaveThreshold;
-    private final TreeMap<String, List<String>> filters;
+    private final TreeMap<String, List<String>> nodeFilters;
+    private final TreeMap<String, List<String>> propertyFilters;
     private final boolean useBinaryReferences;
     private final String name;
 
     public FileVaultContentSerializer(String name, Packaging packaging, 
ImportMode importMode, AccessControlHandling aclHandling, String[] packageRoots,
-                                      String[] filters, boolean 
useBinaryReferences, int autosaveThreshold) {
+                                      String[] nodeFilters, String[] 
propertyFilters, boolean useBinaryReferences, int autosaveThreshold) {
         this.name = name;
         this.packaging = packaging;
         this.importMode = importMode;
         this.aclHandling = aclHandling;
         this.packageRoots = packageRoots;
         this.autosaveThreshold = autosaveThreshold;
-        this.filters = VltUtils.parseFilters(filters);
+        this.nodeFilters = VltUtils.parseFilters(nodeFilters);
+        this.propertyFilters = VltUtils.parseFilters(propertyFilters);
         this.useBinaryReferences = useBinaryReferences;
     }
 
@@ -88,7 +90,7 @@ public class FileVaultContentSerializer
             String packageGroup = PACKAGE_GROUP;
             String packageName = TYPE + "_" + System.currentTimeMillis() + "_" 
+ UUID.randomUUID();
 
-            WorkspaceFilter filter = VltUtils.createFilter(request, filters);
+            WorkspaceFilter filter = VltUtils.createFilter(request, 
nodeFilters, propertyFilters);
             ExportOptions opts = VltUtils.getExportOptions(filter, 
packageRoots, packageGroup, packageName, VERSION, useBinaryReferences);
 
             log.debug("assembling package {} user {}", packageGroup + '/' + 
packageName + "-" + VERSION, resourceResolver.getUserID());

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java?rev=1757192&r1=1757191&r2=1757192&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
 Mon Aug 22 15:06:44 2016
@@ -28,6 +28,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.PropertyOption;
+import org.apache.felix.scr.annotations.PropertyUnbounded;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
@@ -101,11 +102,17 @@ public class VaultDistributionPackageBui
     private static final String PACKAGE_ROOTS = "package.roots";
 
     /**
-     * Package filters
+     * Package node filters
      */
-    @Property(label = "Package Filters", description = "The package path 
filters. Filter format: path|+include|-exclude", cardinality = 100)
+    @Property(label = "Package Node Filters", description = "The package node 
path filters. Filter format: path|+include|-exclude", cardinality = 100)
     private static final String PACKAGE_FILTERS = "package.filters";
 
+    /**
+     * Package property filters
+     */
+    @Property(label = "Package Property Filters", description = "The package 
property path filters. Filter format: path|+include|-exclude",
+            unbounded = PropertyUnbounded.ARRAY, value = {})
+    private static final String PROPERTY_FILTERS = "property.filters";
 
     /**
      * Temp file folder
@@ -186,7 +193,8 @@ public class VaultDistributionPackageBui
         String aclHandlingString = 
SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(ACL_HANDLING),
 null));
 
         String[] packageRoots = 
SettingsUtils.removeEmptyEntries(PropertiesUtil.toStringArray(config.get(PACKAGE_ROOTS),
 null));
-        String[] packageFilters = 
SettingsUtils.removeEmptyEntries(PropertiesUtil.toStringArray(config.get(PACKAGE_FILTERS),
 null));
+        String[] packageNodeFilters = 
SettingsUtils.removeEmptyEntries(PropertiesUtil.toStringArray(config.get(PACKAGE_FILTERS),
 null));
+        String[] packagePropertyFilters = 
SettingsUtils.removeEmptyEntries(PropertiesUtil.toStringArray(config.get(PROPERTY_FILTERS),
 null));
 
         String tempFsFolder = 
SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(TEMP_FS_FOLDER),
 null));
         boolean useBinaryReferences = 
PropertiesUtil.toBoolean(config.get(USE_BINARY_REFERENCES), false);
@@ -208,7 +216,7 @@ public class VaultDistributionPackageBui
         }
 
         DistributionContentSerializer contentSerializer = new 
FileVaultContentSerializer(name, packaging, importMode, aclHandling,
-                packageRoots, packageFilters, useBinaryReferences, 
autosaveThreshold);
+                packageRoots, packageNodeFilters, packagePropertyFilters, 
useBinaryReferences, autosaveThreshold);
 
         if ("filevlt".equals(type)) {
             packageBuilder = new FileDistributionPackageBuilder(name, 
contentSerializer, tempFsFolder, digestAlgorithm);

Modified: 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java?rev=1757192&r1=1757191&r2=1757192&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
 (original)
+++ 
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
 Mon Aug 22 15:06:44 2016
@@ -66,13 +66,25 @@ public class VltUtils {
 
     private final static Logger log = LoggerFactory.getLogger(VltUtils.class);
 
-    public static WorkspaceFilter createFilter(DistributionRequest 
distributionRequest, NavigableMap<String, List<String>> filters) {
+    public static WorkspaceFilter createFilter(DistributionRequest 
distributionRequest, NavigableMap<String, List<String>> nodeFilters,
+                                               NavigableMap<String, 
List<String>> propertyFilters) {
         DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
 
         for (String path : distributionRequest.getPaths()) {
 
-            PathFilterSet filterSet = createFilterSet(path, filters, 
distributionRequest);
-            filter.add(filterSet);
+            // Set node path filters
+            Set<String> patterns = new HashSet<String>();
+            
patterns.addAll(Arrays.asList(distributionRequest.getFilters(path)));
+            PathFilterSet nodeFilterSet = createFilterSet(path, nodeFilters, 
patterns);
+            boolean deep = distributionRequest.isDeep(path);
+            if (!deep) {
+                nodeFilterSet.addInclude(new DefaultPathFilter(path));
+            }
+            filter.add(nodeFilterSet);
+
+            // Set property path filters
+            PathFilterSet propertyFilterSet = createFilterSet(path, 
propertyFilters, new HashSet<String>());
+            filter.addPropertyFilterSet(propertyFilterSet);
         }
 
         return filter;
@@ -96,15 +108,9 @@ public class VltUtils {
         return paths;
     }
 
-    private static PathFilterSet createFilterSet(String path, 
NavigableMap<String, List<String>> globalFilters, DistributionRequest 
distributionRequest) {
-        boolean deep = distributionRequest.isDeep(path);
-        PathFilterSet filterSet = new PathFilterSet(path);
+    private static PathFilterSet createFilterSet(String path, 
NavigableMap<String, List<String>> globalFilters, Set<String> patterns) {
 
-        if (!deep) {
-            filterSet.addInclude(new DefaultPathFilter(path));
-        }
-
-        List<String> patterns = new ArrayList<String>();
+        PathFilterSet filterSet = new PathFilterSet(path);
 
         // add the most specific filter rules
         for (String key : globalFilters.descendingKeySet()) {
@@ -114,8 +120,6 @@ public class VltUtils {
             }
         }
 
-        patterns.addAll(Arrays.asList(distributionRequest.getFilters(path)));
-
         for (String pattern : patterns) {
             PathFilterSet.Entry<DefaultPathFilter> entry = 
extractPathPattern(pattern);
 

Modified: sling/trunk/contrib/extensions/distribution/it/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/pom.xml?rev=1757192&r1=1757191&r2=1757192&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/pom.xml (original)
+++ sling/trunk/contrib/extensions/distribution/it/pom.xml Mon Aug 22 15:06:44 
2016
@@ -363,7 +363,7 @@
         <dependency>
             <groupId>org.apache.jackrabbit.vault</groupId>
             <artifactId>org.apache.jackrabbit.vault</artifactId>
-            <version>3.1.24</version>
+            <version>3.1.28</version>
             <scope>provided</scope>
         </dependency>
         <!-- HTTP -->


Reply via email to