Author: tmaret
Date: Tue Aug 23 09:00:17 2016
New Revision: 1757330
URL: http://svn.apache.org/viewvc?rev=1757330&view=rev
Log:
SLING-5988 - [SCD] support deep property filters
Added:
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
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=1757330&r1=1757329&r2=1757330&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
Tue Aug 23 09:00:17 2016
@@ -73,17 +73,19 @@ public class VltUtils {
for (String path : distributionRequest.getPaths()) {
// Set node path filters
- Set<String> patterns = new HashSet<String>();
+ List<String> patterns = new ArrayList<String>();
patterns.addAll(Arrays.asList(distributionRequest.getFilters(path)));
- PathFilterSet nodeFilterSet = createFilterSet(path, nodeFilters,
patterns);
boolean deep = distributionRequest.isDeep(path);
+ PathFilterSet nodeFilterSet = new PathFilterSet(path);
if (!deep) {
nodeFilterSet.addInclude(new DefaultPathFilter(path));
}
+ initFilterSet(nodeFilterSet, nodeFilters, patterns);
filter.add(nodeFilterSet);
// Set property path filters
- PathFilterSet propertyFilterSet = createFilterSet(path,
propertyFilters, new HashSet<String>());
+ PathFilterSet propertyFilterSet = new PathFilterSet("/");
+ initFilterSet(propertyFilterSet, propertyFilters, new
ArrayList<String>());
filter.addPropertyFilterSet(propertyFilterSet);
}
@@ -108,13 +110,12 @@ public class VltUtils {
return paths;
}
- private static PathFilterSet createFilterSet(String path,
NavigableMap<String, List<String>> globalFilters, Set<String> patterns) {
-
- PathFilterSet filterSet = new PathFilterSet(path);
+ private static void initFilterSet(PathFilterSet filterSet,
NavigableMap<String, List<String>> globalFilters, List<String> patterns) {
// add the most specific filter rules
+ String root = filterSet.getRoot();
for (String key : globalFilters.descendingKeySet()) {
- if (path.startsWith(key)) {
+ if (root.startsWith(key)) {
patterns.addAll(globalFilters.get(key));
break;
}
@@ -129,8 +130,6 @@ public class VltUtils {
filterSet.addExclude(entry.getFilter());
}
}
-
- return filterSet;
}
Added:
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java?rev=1757330&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
(added)
+++
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtilsTest.java
Tue Aug 23 09:00:17 2016
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.serialization.impl.vlt;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.NavigableMap;
+import java.util.TreeMap;
+
+import org.apache.jackrabbit.vault.fs.api.PathFilter;
+import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
+import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
+import org.apache.sling.distribution.DistributionRequest;
+import org.apache.sling.distribution.SimpleDistributionRequest;
+import org.junit.Test;
+
+import static org.apache.sling.distribution.DistributionRequestType.*;
+import static org.junit.Assert.*;
+
+public class VltUtilsTest {
+
+ @Test
+ public void testEmptyFilter() throws Exception {
+ DistributionRequest request = new SimpleDistributionRequest(ADD, true,
"/foo");
+ NavigableMap<String, List<String>> nodeFilters =
+ new TreeMap<String, List<String>>();
+ NavigableMap<String, List<String>> propFilters =
+ new TreeMap<String, List<String>>();
+ WorkspaceFilter filter = VltUtils.createFilter(request, nodeFilters,
propFilters);
+
+ assertNotNull(filter);
+
+ assertNotNull(filter.getPropertyFilterSets());
+ List<PathFilterSet> propFilterSet = filter.getPropertyFilterSets();
+ assertEquals(1, propFilterSet.size());
+ PathFilterSet propFilter = propFilterSet.get(0);
+ assertTrue(propFilter.getEntries().isEmpty());
+ assertEquals("/", propFilter.getRoot());
+
+ assertNotNull(filter.getFilterSets());
+ List<PathFilterSet> nodeFilterSet = filter.getFilterSets();
+ assertEquals(1, nodeFilterSet.size());
+ PathFilterSet nodeFilter = nodeFilterSet.get(0);
+ assertTrue(nodeFilter.getEntries().isEmpty());
+ assertEquals("/foo", nodeFilter.getRoot());
+
+ }
+
+ @Test
+ public void testDeepFilter() throws Exception {
+ DistributionRequest request = new SimpleDistributionRequest(ADD, true,
"/foo");
+ NavigableMap<String, List<String>> nodeFilters =
+ new TreeMap<String, List<String>>();
+ nodeFilters.put("/foo", Arrays.asList("/foo/bar", "/foo/bar1"));
+ NavigableMap<String, List<String>> propFilters =
+ new TreeMap<String, List<String>>();
+ propFilters.put("/", Arrays.asList("^.*/prop1", "^.*/prop2"));
+ WorkspaceFilter wsFilter = VltUtils.createFilter(request, nodeFilters,
propFilters);
+
+ assertNotNull(wsFilter);
+
+ assertNotNull(wsFilter.getPropertyFilterSets());
+ List<PathFilterSet> propFilterSet = wsFilter.getPropertyFilterSets();
+ assertEquals(1, propFilterSet.size());
+ PathFilterSet propFilter = propFilterSet.get(0);
+ assertEquals(2, propFilter.getEntries().size());
+ PathFilter filter = propFilter.getEntries().get(0).getFilter();
+ assertTrue(filter.matches("/foo/bar/prop1"));
+ assertTrue(filter.matches("/foo/prop1"));
+ }
+}
\ No newline at end of file