SLING-5367: allow distribution request filters
authorasf-sync-process <asf-sync-process@unknown>
Wed, 9 Dec 2015 15:47:06 +0000 (15:47 +0000)
committerasf-sync-process <asf-sync-process@unknown>
Wed, 9 Dec 2015 15:47:06 +0000 (15:47 +0000)
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1718890 13f79535-47bb-0310-9956-ffa450edef68

src/main/java/org/apache/sling/distribution/DistributionRequest.java
src/main/java/org/apache/sling/distribution/SimpleDistributionRequest.java

index 72edf92..1da5fd1 100644 (file)
@@ -23,6 +23,7 @@ import aQute.bnd.annotation.ProviderType;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import java.util.Arrays;
+import java.util.Set;
 
 /**
  * A {@link org.apache.sling.distribution.DistributionRequest} represents the need from the caller to have
@@ -33,7 +34,7 @@ public interface DistributionRequest {
 
 
     /**
-     * get the {@link DistributionRequestType} associated with this request
+     * Get the {@link DistributionRequestType} associated with this request
      *
      * @return the type of the request as a {@link DistributionRequestType}
      */
@@ -41,14 +42,13 @@ public interface DistributionRequest {
     public DistributionRequestType getRequestType();
 
     /**
-     * get the paths for this distribution request
+     * Get the root paths for this distribution request
      *
      * @return an array of paths
      */
-    @CheckForNull
+    @Nonnull
     public String[] getPaths();
 
-
     /**
      * Returns whether the paths are covering the entire subtree (deep) or just the specified nodes (shallow)
      *
@@ -58,4 +58,16 @@ public interface DistributionRequest {
     public boolean isDeep(@Nonnull String path);
 
 
+
+    /**
+     * Get the filters applicable for a specific path
+     * +/foo/.* - include all content under /foo
+     * -/foo - exclude /foo node
+     *
+     * filters are checked in order and the last matched filter determines inclusion/exclusion
+     *
+     * @return an array of filters
+     */
+    @Nonnull
+    public String[] getFilters(String path);
 }
index e2a98d2..c5cce14 100644 (file)
@@ -22,7 +22,9 @@ import aQute.bnd.annotation.ProviderType;
 
 import javax.annotation.Nonnull;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -34,6 +36,7 @@ public final class SimpleDistributionRequest implements DistributionRequest {
 
     private final DistributionRequestType requestType;
     private final Set<String> deepPaths;
+    private final Map<String, String[]> pathFilters;
     private final String[] paths;
 
     /**
@@ -57,15 +60,28 @@ public final class SimpleDistributionRequest implements DistributionRequest {
 
 
     /**
-     * Creates a distribution request with "shallow" paths.
+     * Creates a distribution request with additional "deep" paths.
      * @param requestType the request type
      * @param paths the array of paths to be distributed
      * @param deepPaths the set of paths that are to be distributed in depth (with all their children)
      */
     public SimpleDistributionRequest(@Nonnull DistributionRequestType requestType, @Nonnull String[] paths, @Nonnull Set<String> deepPaths) {
+        this(requestType, paths, deepPaths, new HashMap<String, String[]>());
+    }
+
+
+    /**
+     * Creates a distribution request with "deep" paths and filters.
+     * @param requestType the request type
+     * @param paths the array of paths to be distributed
+     * @param deepPaths the set of paths that are to be distributed in depth (with all their children)
+     * @param pathFilters the filters applicable for each path
+     */
+    public SimpleDistributionRequest(@Nonnull DistributionRequestType requestType, @Nonnull String[] paths, @Nonnull Set<String> deepPaths, @Nonnull Map<String, String[]> pathFilters) {
         this.requestType = requestType;
         this.paths = paths;
         this.deepPaths = deepPaths;
+        this.pathFilters = pathFilters;
     }
 
     /**
@@ -96,12 +112,17 @@ public final class SimpleDistributionRequest implements DistributionRequest {
         return deepPaths.contains(path);
     }
 
+    @Nonnull
+    public String[] getFilters(String path) {
+        String[] filters = pathFilters.get(path);
+        return filters != null ? filters : new String[0];
+    }
+
     @Override
     public String toString() {
         return "SimpleDistributionRequest{" +
                 "requestType=" + requestType +
                 ", paths=" + Arrays.toString(paths) +
-                ", deep=" + Arrays.toString(deepPaths.toArray(new String[0])) +
                 '}';
     }