Author: sseifert
Date: Wed Dec  7 20:12:27 2016
New Revision: 1773137

URL: http://svn.apache.org/viewvc?rev=1773137&view=rev
Log:
SLING-6347 respect service config

Added:
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
   (with props)
Modified:
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java?rev=1773137&r1=1773136&r2=1773137&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
 Wed Dec  7 20:12:27 2016
@@ -27,7 +27,9 @@ import java.util.Map;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 import org.apache.sling.caconfig.impl.ConfigurationResourceWrapper;
+import org.apache.sling.caconfig.resource.impl.util.PropertyUtil;
 import org.apache.sling.caconfig.spi.ConfigurationInheritanceStrategy;
+import org.osgi.service.component.annotations.Activate;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.Designate;
@@ -52,8 +54,18 @@ public class DefaultConfigurationInherit
     
     }
 
+    private Config config;
+
+    @Activate
+    private void activate(final Config config) {
+        this.config = config;
+    }
+    
     @Override
     public Resource getResource(Iterator<Resource> configResources) {
+        if (!config.enabled()) {
+            return null;
+        }
         if (!configResources.hasNext()) {
             return null;
         }
@@ -66,7 +78,8 @@ public class DefaultConfigurationInherit
     }
     
     private boolean isPropertyInheritance(Resource resource) {
-        return resource.getValueMap().get(PROPERTY_CONFIG_PROPERTY_INHERIT, 
false);
+        return 
PropertyUtil.getBooleanValueAdditionalKeys(resource.getValueMap(), 
PROPERTY_CONFIG_PROPERTY_INHERIT,
+                config.configPropertyInheritancePropertyNames());
     }
     
     private Map<String,Object> getInheritedProperties(Map<String,Object> 
parentProps, Iterator<Resource> inheritanceChain) {
@@ -85,4 +98,3 @@ public class DefaultConfigurationInherit
     }
 
 }
- 
\ No newline at end of file

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=1773137&r1=1773136&r2=1773137&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 Dec  7 20:12:27 2016
@@ -38,7 +38,6 @@ import org.apache.commons.collections.Tr
 import org.apache.commons.collections.iterators.ArrayIterator;
 import org.apache.commons.collections.iterators.FilterIterator;
 import org.apache.commons.collections.iterators.IteratorChain;
-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.ResourceResolver;
@@ -48,6 +47,7 @@ import org.apache.sling.caconfig.managem
 import org.apache.sling.caconfig.resource.impl.util.ConfigNameUtil;
 import 
org.apache.sling.caconfig.resource.impl.util.PathEliminateDuplicatesIterator;
 import org.apache.sling.caconfig.resource.impl.util.PathParentExpandIterator;
+import org.apache.sling.caconfig.resource.impl.util.PropertyUtil;
 import org.apache.sling.caconfig.resource.spi.CollectionInheritanceDecider;
 import 
org.apache.sling.caconfig.resource.spi.ConfigurationResourceResolvingStrategy;
 import org.apache.sling.caconfig.resource.spi.ContextResource;
@@ -376,7 +376,8 @@ public class DefaultConfigurationResourc
 
                 // check collection inheritance mode on current level - should 
we check on next-highest level as well?
                 final ValueMap valueMap = item.getValueMap();
-                inherit = getBooleanValue(valueMap, 
PROPERTY_CONFIG_COLLECTION_INHERIT, 
config.configCollectionInheritancePropertyNames());
+                inherit = PropertyUtil.getBooleanValueAdditionalKeys(valueMap, 
PROPERTY_CONFIG_COLLECTION_INHERIT,
+                        config.configCollectionInheritancePropertyNames());
                 if (!inherit) {
                     break;
                 }
@@ -447,19 +448,6 @@ 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, 
Collections.singleton(bucketName), configName)) {

Added: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java?rev=1773137&view=auto
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
 (added)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
 Wed Dec  7 20:12:27 2016
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.caconfig.resource.impl.util;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.sling.api.resource.ValueMap;
+
+public final class PropertyUtil {
+    
+    private PropertyUtil() {
+        // static methods only
+    }
+
+    /**
+     * Get boolean value from value map with key, or with alternative keys if 
not set.
+     * @param valueMap Value map
+     * @param key Primary key
+     * @param additionalKeys Alternative keys
+     * @return Value
+     */
+    public static boolean getBooleanValueAdditionalKeys(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();
+    }
+
+}

Propchange: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed Dec  7 20:12:27 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java?rev=1773137&r1=1773136&r2=1773137&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
 Wed Dec  7 20:12:27 2016
@@ -28,7 +28,6 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.caconfig.spi.ConfigurationInheritanceStrategy;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
@@ -36,18 +35,17 @@ import com.google.common.collect.Immutab
 
 public class DefaultConfigurationInheritanceStrategyTest {
     
+    private static final String PROPERTY_CONFIG_PROPERTY_INHERIT_CUSTOM = 
"custom:configPropertyInherit";
+    
     @Rule
     public SlingContext context = new SlingContext();
     
     private ConfigurationInheritanceStrategy underTest;
     
-    @Before
-    public void setUp() {
-        underTest = context.registerInjectActivateService(new 
DefaultConfigurationInheritanceStrategy());
-    }
-
     @Test
     public void testWithoutPropertyMerging() {
+        underTest = context.registerInjectActivateService(new 
DefaultConfigurationInheritanceStrategy());
+
         Iterator<Resource> resources = ImmutableList.of(
                 context.create().resource("/conf/resource1", "prop1", 
"value1a", "prop2", "value2a"),
                 context.create().resource("/conf/resource2", "prop2", 
"value2b", "prop3", "value3b"),
@@ -65,9 +63,11 @@ public class DefaultConfigurationInherit
 
     @Test
     public void testWithPropertyMerging() {
+        underTest = context.registerInjectActivateService(new 
DefaultConfigurationInheritanceStrategy(),
+                "configPropertyInheritancePropertyNames", 
PROPERTY_CONFIG_PROPERTY_INHERIT_CUSTOM);
         Iterator<Resource> resources = ImmutableList.of(
                 context.create().resource("/conf/resource1", "prop1", 
"value1a", "prop2", "value2a", PROPERTY_CONFIG_PROPERTY_INHERIT, true),
-                context.create().resource("/conf/resource2", "prop2", 
"value2b", "prop3", "value3b", PROPERTY_CONFIG_PROPERTY_INHERIT, true),
+                context.create().resource("/conf/resource2", "prop2", 
"value2b", "prop3", "value3b", PROPERTY_CONFIG_PROPERTY_INHERIT_CUSTOM, true),
                 context.create().resource("/conf/resource3", "prop4", 
"value4b")
                 ).iterator();
         
@@ -82,6 +82,8 @@ public class DefaultConfigurationInherit
 
     @Test
     public void testWithPartialPropertyMerging() {
+        underTest = context.registerInjectActivateService(new 
DefaultConfigurationInheritanceStrategy());
+
         Iterator<Resource> resources = ImmutableList.of(
                 context.create().resource("/conf/resource1", "prop1", 
"value1a", "prop2", "value2a", PROPERTY_CONFIG_PROPERTY_INHERIT, true),
                 context.create().resource("/conf/resource2", "prop2", 
"value2b", "prop3", "value3b"),
@@ -97,4 +99,19 @@ public class DefaultConfigurationInherit
         assertNull(props.get("prop4", String.class));        
     }
 
+    @Test
+    public void testDisabled() {
+        underTest = context.registerInjectActivateService(new 
DefaultConfigurationInheritanceStrategy(),
+                "enabled", false);
+
+        Iterator<Resource> resources = ImmutableList.of(
+                context.create().resource("/conf/resource1", "prop1", 
"value1a", "prop2", "value2a", PROPERTY_CONFIG_PROPERTY_INHERIT, true),
+                context.create().resource("/conf/resource2", "prop2", 
"value2b", "prop3", "value3b", PROPERTY_CONFIG_PROPERTY_INHERIT, true),
+                context.create().resource("/conf/resource3", "prop4", 
"value4b")
+                ).iterator();
+        
+        Resource inherited = underTest.getResource(resources);
+        assertNull(inherited);
+    }
+
 }

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java?rev=1773137&r1=1773136&r2=1773137&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
 Wed Dec  7 20:12:27 2016
@@ -48,6 +48,7 @@ public class DefaultConfigurationResourc
     
     private static final String BUCKET = "sling:test";
     private static final Collection<String> BUCKETS = 
Collections.singleton(BUCKET);
+    private static final String PROPERTY_CONFIG_COLLECTION_INHERIT_CUSTOM = 
"custom:configCollectionInherit";
 
     @Rule
     public SlingContext context = new SlingContext();
@@ -61,7 +62,8 @@ public class DefaultConfigurationResourc
     public void setUp() {
         context.registerInjectActivateService(new 
DefaultContextPathStrategy());
         context.registerInjectActivateService(new 
ContextPathStrategyMultiplexerImpl());
-        underTest = context.registerInjectActivateService(new 
DefaultConfigurationResourceResolvingStrategy());
+        underTest = context.registerInjectActivateService(new 
DefaultConfigurationResourceResolvingStrategy(),
+                "configCollectionInheritancePropertyNames", 
PROPERTY_CONFIG_COLLECTION_INHERIT_CUSTOM);
 
         // content resources that form a deeper hierarchy
         context.build()
@@ -136,8 +138,8 @@ public class DefaultConfigurationResourc
             .resource("/conf/brand1/tenant1/region1/site1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("site1")
             .resource("/conf/brand1/tenant1/region1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("region1")
             .resource("/conf/brand1/tenant1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("tenant1")
-            .resource("/conf/brand1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("brand1")
-            .resource("/conf/global/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("confGlobal")
+            .resource("/conf/brand1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT_CUSTOM, true).resource("brand1")
+            .resource("/conf/global/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT_CUSTOM, true).resource("confGlobal")
             .resource("/apps/conf/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("appsGlobal")
             .resource("/libs/conf/sling:test/cfgCol/libsGlobal1")
             .resource("/libs/conf/sling:test/cfgCol/libsGlobal2");
@@ -169,7 +171,7 @@ public class DefaultConfigurationResourc
                 .siblingsMode()
                 .resource("item1")
                 .resource("item2")
-            .resource("/conf/brand1/tenant1/region1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true)
+            .resource("/conf/brand1/tenant1/region1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT_CUSTOM, true)
                 .siblingsMode()
                 .resource("item1")
                 .resource("item3")
@@ -207,9 +209,9 @@ public class DefaultConfigurationResourc
             .resource("/content/level1", PROPERTY_CONFIG_REF, "/conf/a1/a2")
             .resource("/content/level1/level2", PROPERTY_CONFIG_REF, 
"/conf/b1/b2")
             .resource("/conf/a1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("a1")
-            .resource("/conf/a1/a2/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("a1_a2")
+            .resource("/conf/a1/a2/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT_CUSTOM, true).resource("a1_a2")
             .resource("/conf/b1/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("b1")
-            .resource("/conf/b1/b2/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("b1_b2")
+            .resource("/conf/b1/b2/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT_CUSTOM, true).resource("b1_b2")
             .resource("/conf/global/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("confGlobal")
             .resource("/apps/conf/sling:test/cfgCol", 
PROPERTY_CONFIG_COLLECTION_INHERIT, true).resource("appsGlobal")
             .resource("/libs/conf/sling:test/cfgCol/libsGlobal");


Reply via email to