This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.distribution.api-0.3.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-api.git
commit d0b3cec8f85be6f565579ab76070abb744bc0836 Author: Marius Petria <[email protected]> AuthorDate: Wed Dec 9 15:47:02 2015 +0000 SLING-5367: allow distribution request filters git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/distribution/api@1718890 13f79535-47bb-0310-9956-ffa450edef68 --- .../sling/distribution/DistributionRequest.java | 20 +++++++++++++---- .../distribution/SimpleDistributionRequest.java | 25 ++++++++++++++++++++-- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/apache/sling/distribution/DistributionRequest.java b/src/main/java/org/apache/sling/distribution/DistributionRequest.java index 72edf92..1da5fd1 100644 --- a/src/main/java/org/apache/sling/distribution/DistributionRequest.java +++ b/src/main/java/org/apache/sling/distribution/DistributionRequest.java @@ -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); } diff --git a/src/main/java/org/apache/sling/distribution/SimpleDistributionRequest.java b/src/main/java/org/apache/sling/distribution/SimpleDistributionRequest.java index e2a98d2..c5cce14 100644 --- a/src/main/java/org/apache/sling/distribution/SimpleDistributionRequest.java +++ b/src/main/java/org/apache/sling/distribution/SimpleDistributionRequest.java @@ -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])) + '}'; } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
