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/07 10:00:43 UTC
svn commit: r1768473 -
/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
Author: cziegeler
Date: Mon Nov 7 10:00:43 2016
New Revision: 1768473
URL: http://svn.apache.org/viewvc?rev=1768473&view=rev
Log:
SLING-6244 : Provide an SPI for influencing the collection inheritance
Modified:
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/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=1768473&r1=1768472&r2=1768473&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 Mon Nov 7 10:00:43 2016
@@ -51,10 +51,10 @@ import org.apache.sling.caconfig.resourc
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.FieldOption;
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;
@@ -99,10 +99,10 @@ public class DefaultConfigurationResourc
@Reference
private ContextPathStrategyMultiplexer contextPathStrategy;
- @Reference(cardinality=ReferenceCardinality.OPTIONAL,
- policy=ReferencePolicy.DYNAMIC,
- policyOption=ReferencePolicyOption.GREEDY)
- private volatile CollectionInheritanceDecider collectionInheritanceDecider;
+ @Reference(cardinality=ReferenceCardinality.MULTIPLE,
+ policy=ReferencePolicy.DYNAMIC,
+ fieldOption=FieldOption.REPLACE)
+ private volatile List<CollectionInheritanceDecider> collectionInheritanceDeciders;
Config getConfiguration() {
return this.config;
@@ -328,18 +328,22 @@ public class DefaultConfigurationResourc
}
}
- private boolean include(final CollectionInheritanceDecider decider,
+ private boolean include(final List<CollectionInheritanceDecider> deciders,
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(resource, bucketName);
- if ( decision == InheritanceDecision.EXCLUDE ) {
- result = false;
- } else if ( decision == InheritanceDecision.BLOCK ) {
- result = false;
- blockedItems.add(resource.getName());
+ if ( result && deciders != null && !deciders.isEmpty() ) {
+ for(int i=deciders.size()-1;i>=0;i--) {
+ final InheritanceDecision decision = deciders.get(i).decide(resource, bucketName);
+ if ( decision == InheritanceDecision.EXCLUDE ) {
+ result = false;
+ break;
+ } else if ( decision == InheritanceDecision.BLOCK ) {
+ result = false;
+ blockedItems.add(resource.getName());
+ break;
+ }
}
}
return result;
@@ -358,7 +362,7 @@ 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 List<CollectionInheritanceDecider> deciders = this.collectionInheritanceDeciders;
final Set<String> blockedItems = new HashSet<>();
int idx = 1;
@@ -377,7 +381,7 @@ public class DefaultConfigurationResourc
}
for (Resource child : item.getChildren()) {
- if (isValidResourceCollectionItem(child) && include(decider, bucketName, child, blockedItems)) {
+ if (isValidResourceCollectionItem(child) && include(deciders, bucketName, child, blockedItems)) {
if ((!inherit || inheritCollection) && !result.containsKey(child.getName())) {
result.put(child.getName(), child);
configValueMaps.put(child.getName(), child.getValueMap());