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/02 15:14:55 UTC
svn commit: r1767703 -
/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
Author: cziegeler
Date: Wed Nov 2 15:14:54 2016
New Revision: 1767703
URL: http://svn.apache.org/viewvc?rev=1767703&view=rev
Log:
SLING-6233 : Allow configuration of fallback properties for 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=1767703&r1=1767702&r2=1767703&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 Wed Nov 2 15:14:54 2016
@@ -36,6 +36,7 @@ import org.apache.commons.collections.it
import org.apache.commons.collections.iterators.FilterIterator;
import org.apache.commons.collections.iterators.IteratorChain;
import org.apache.commons.collections.iterators.TransformIterator;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
@@ -75,6 +76,16 @@ public class DefaultConfigurationResourc
@AttributeDefinition(name="Fallback paths",
description = "Global fallback configurations, ordered from most specific (checked first) to least specific.")
String[] fallbackPaths() default {"/conf/global", "/apps/conf", "/libs/conf"};
+
+ @AttributeDefinition(name="Config collection inheritance property names",
+ description = "Additional property names to " + PROPERTY_CONFIG_COLLECTION_INHERIT + " to handle configuration inheritance. The names are used in the order defined, "
+ + "always starting with " + PROPERTY_CONFIG_COLLECTION_INHERIT + ". Once a property with a value is found, that value is used and the following property names are skipped.")
+ String[] configCollectionInheritancePropertyNames();
+
+ @AttributeDefinition(name="Config property inheritance property names",
+ description = "Additional property names to " + PROPERTY_CONFIG_PROPERTY_INHERIT + " to handle property inheritance. The names are used in the order defined, "
+ + "always starting with " + PROPERTY_CONFIG_PROPERTY_INHERIT + ". Once a property with a value is found, that value is used and the following property names are skipped.")
+ String[] configPropertyInheritancePropertyNames();
}
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -218,7 +229,7 @@ public class DefaultConfigurationResourc
final Resource item = contentResource.getResourceResolver().getResource(buildResourcePath(path, name));
if (item != null) {
logger.debug("Resolved config item at [{}]: {}", idx, item.getPath());
-
+
if (propertyInheritance) {
// merge property map with values from inheritance parent
Map<String,Object> mergedValueMap = new HashMap<>(item.getValueMap());
@@ -298,8 +309,9 @@ public class DefaultConfigurationResourc
}
// check collection and property inheritance mode on current level - should we check on next-highest level as well?
- inheritCollection = item.getValueMap().get(PROPERTY_CONFIG_COLLECTION_INHERIT, false);
- inheritProperties = item.getValueMap().get(PROPERTY_CONFIG_PROPERTY_INHERIT, false);
+ final ValueMap valueMap = item.getValueMap();
+ inheritCollection = getBooleanValue(valueMap, PROPERTY_CONFIG_COLLECTION_INHERIT, config.configCollectionInheritancePropertyNames());
+ inheritProperties = getBooleanValue(valueMap, PROPERTY_CONFIG_PROPERTY_INHERIT, config.configPropertyInheritancePropertyNames());
inherit = inheritCollection || inheritProperties;
if (!inherit) {
break;
@@ -316,7 +328,7 @@ public class DefaultConfigurationResourc
if (logger.isTraceEnabled()) {
logger.trace("- final list has {} items", result.size());
}
-
+
// replace config resources with wrappers with merged properties if property inheritance was applied
if (propertyInheritanceApplied) {
List<Resource> transformedResult = new ArrayList<>();
@@ -341,6 +353,19 @@ public class DefaultConfigurationResourc
return !StringUtils.equals(resource.getName(), "jcr:content");
}
+ private boolean getBooleanValue(final ValueMap valueMap, final String key, final String[] additionalKeys) {
+ Boolean result = valueMap.get(key, Boolean.class);
+ if ( result != null && !ArrayUtils.isEmpty(additionalKeys) ) {
+ for(final String name : additionalKeys) {
+ result = valueMap.get(name, Boolean.class);
+ if ( result != null ) {
+ break;
+ }
+ }
+ }
+ return result == null ? false : result.booleanValue();
+ }
+
@Override
public String getResourcePath(Resource contentResource, String bucketName, String configName) {
if (!isEnabledAndParamsValid(contentResource, bucketName, configName)) {