You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2016/11/04 15:46:52 UTC
svn commit: r1768056 - in
/sling/trunk/contrib/extensions/contextaware-config/impl: pom.xml
src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
Author: cziegeler
Date: Fri Nov 4 15:46:52 2016
New Revision: 1768056
URL: http://svn.apache.org/viewvc?rev=1768056&view=rev
Log:
SLING-6244 : Provide an SPI for influencing the collection inheritance
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml?rev=1768056&r1=1768055&r2=1768056&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/pom.xml Fri Nov 4 15:46:52 2016
@@ -85,7 +85,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.caconfig.spi</artifactId>
- <version>1.0.0</version>
+ <version>1.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java?rev=1768056&r1=1768055&r2=1768056&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java Fri Nov 4 15:46:52 2016
@@ -25,11 +25,13 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
+import java.util.Set;
import org.apache.commons.collections.iterators.ArrayIterator;
import org.apache.commons.collections.iterators.IteratorChain;
@@ -42,12 +44,17 @@ import org.apache.sling.api.wrappers.Val
import org.apache.sling.caconfig.resource.impl.ContextPathStrategyMultiplexer;
import org.apache.sling.caconfig.resource.impl.util.PathEliminateDuplicatesIterator;
import org.apache.sling.caconfig.resource.impl.util.PathParentExpandIterator;
+import org.apache.sling.caconfig.resource.spi.CollectionInheritanceDecider;
import org.apache.sling.caconfig.resource.spi.ConfigurationResourceResolvingStrategy;
import org.apache.sling.caconfig.resource.spi.ContextResource;
+import org.apache.sling.caconfig.resource.spi.InheritanceDecision;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.osgi.service.component.annotations.ReferencePolicyOption;
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.Designate;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@@ -92,6 +99,11 @@ public class DefaultConfigurationResourc
@Reference
private ContextPathStrategyMultiplexer contextPathStrategy;
+ @Reference(cardinality=ReferenceCardinality.OPTIONAL,
+ policy=ReferencePolicy.DYNAMIC,
+ policyOption=ReferencePolicyOption.GREEDY)
+ private volatile CollectionInheritanceDecider collectionInheritanceDecider;
+
Config getConfiguration() {
return this.config;
}
@@ -320,6 +332,23 @@ public class DefaultConfigurationResourc
}
}
+ private boolean include(final CollectionInheritanceDecider decider,
+ final String bucketName,
+ final Resource resource,
+ final Set<String> blockedItems) {
+ boolean result = !blockedItems.contains(resource.getName());
+ if ( result && decider != null ) {
+ final InheritanceDecision decision = decider.decide(bucketName, resource);
+ if ( decision == InheritanceDecision.EXCLUDE ) {
+ result = false;
+ } else if ( decision == InheritanceDecision.BLOCK ) {
+ result = false;
+ blockedItems.add(resource.getName());
+ }
+ }
+ return result;
+ }
+
@Override
public Collection<Resource> getResourceCollection(final Resource contentResource, final String bucketName, final String configName) {
if (!isEnabledAndParamsValid(contentResource, bucketName, configName)) {
@@ -333,6 +362,9 @@ public class DefaultConfigurationResourc
final Map<String,Resource> result = new LinkedHashMap<>();
final Map<String,Map<String,Object>> configValueMaps = new HashMap<>();
+ final CollectionInheritanceDecider decider = this.collectionInheritanceDecider;
+ final Set<String> blockedItems = new HashSet<>();
+
int idx = 1;
Iterator<String> paths = getResolvePaths(contentResource, bucketName);
boolean inheritCollection = false;
@@ -349,7 +381,7 @@ public class DefaultConfigurationResourc
}
for (Resource child : item.getChildren()) {
- if (isValidResourceCollectionItem(child)) {
+ if (isValidResourceCollectionItem(child) && include(decider, bucketName, child, blockedItems)) {
if ((!inherit || inheritCollection) && !result.containsKey(child.getName())) {
result.put(child.getName(), child);
configValueMaps.put(child.getName(), child.getValueMap());