Author: sseifert
Date: Fri Dec  9 17:52:44 2016
New Revision: 1773446

URL: http://svn.apache.org/viewvc?rev=1773446&view=rev
Log:
SLING-6385 Context-Aware Config: Support default values in 
ConfigurationResolver for ValueMaps

Added:
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
   (with props)
Modified:
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerTest.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
    
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/console/CAConfigInventoryPrinterTest.java
    
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
 Fri Dec  9 17:52:44 2016
@@ -21,13 +21,17 @@ package org.apache.sling.caconfig.impl;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Map;
 
 import org.apache.commons.collections.IteratorUtils;
 import org.apache.commons.collections.Transformer;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.ValueMapDecorator;
 import org.apache.sling.caconfig.ConfigurationBuilder;
 import org.apache.sling.caconfig.ConfigurationResolveException;
 import org.apache.sling.caconfig.ConfigurationResolver;
@@ -38,7 +42,10 @@ import org.apache.sling.caconfig.resourc
 import org.apache.sling.caconfig.resource.impl.util.MapUtil;
 import 
org.apache.sling.caconfig.resource.spi.ConfigurationResourceResolvingStrategy;
 import org.apache.sling.caconfig.spi.ConfigurationInheritanceStrategy;
+import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
+import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
+import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,6 +57,7 @@ class ConfigurationBuilderImpl implement
     private final ConfigurationPersistenceStrategy 
configurationPersistenceStrategy;
     private final ConfigurationInheritanceStrategy 
configurationInheritanceStrategy;
     private final ConfigurationOverrideManager configurationOverrideManager;
+    private final ConfigurationMetadataProvider configurationMetadataProvider;
     private final Collection<String> configBucketNames;
 
     private String configName;
@@ -62,6 +70,7 @@ class ConfigurationBuilderImpl implement
             final ConfigurationPersistenceStrategy 
configurationPersistenceStrategy,
             final ConfigurationInheritanceStrategy 
configurationInheritanceStrategy,
             final ConfigurationOverrideManager configurationOverrideManager,
+            final ConfigurationMetadataProvider configurationMetadataProvider,
             final Collection<String> configBucketNames) {
         this.contentResource = resource;
         this.configurationResolver = configurationResolver;
@@ -69,6 +78,7 @@ class ConfigurationBuilderImpl implement
         this.configurationPersistenceStrategy = 
configurationPersistenceStrategy;
         this.configurationInheritanceStrategy = 
configurationInheritanceStrategy;
         this.configurationOverrideManager = configurationOverrideManager;
+        this.configurationMetadataProvider = configurationMetadataProvider;
         this.configBucketNames = configBucketNames;
     }
 
@@ -94,42 +104,42 @@ class ConfigurationBuilderImpl implement
      * @param <T> Target class
      */
     private interface Converter<T> {
-        T convert(Resource resource, Class<T> clazz, String name);
+        T convert(Resource resource, Class<T> clazz, String configName);
     }
 
     /**
      * Get singleton configuration resource and convert it to the desired 
target class.
-     * @param name Configuration name
+     * @param configName Configuration name
      * @param clazz Target class
      * @param converter Conversion method
      * @return Converted singleton configuration
      */
-    private <T> T getConfigResource(String name, Class<T> clazz, Converter<T> 
converter) {
+    private <T> T getConfigResource(String configName, Class<T> clazz, 
Converter<T> converter) {
         Iterator<Resource> resourceInheritanceChain = null;
         if (this.contentResource != null) {
-            validateConfigurationName(name);
+            validateConfigurationName(configName);
             resourceInheritanceChain = 
this.configurationResourceResolvingStrategy
-                    .getResourceInheritanceChain(this.contentResource, 
configBucketNames, name);
+                    .getResourceInheritanceChain(this.contentResource, 
configBucketNames, configName);
         }
-        return convert(resourceInheritanceChain, clazz, converter, name, 
false);
+        return convert(resourceInheritanceChain, clazz, converter, configName, 
false);
     }
 
     /**
      * Get configuration resource collection and convert it to the desired 
target class.
-     * @param name Configuration name
+     * @param configName Configuration name
      * @param clazz Target class
      * @param converter Conversion method
      * @return Converted configuration collection
      */
-    private <T> Collection<T> getConfigResourceCollection(String name, 
Class<T> clazz, Converter<T> converter) {
+    private <T> Collection<T> getConfigResourceCollection(String configName, 
Class<T> clazz, Converter<T> converter) {
         if (this.contentResource != null) {
-           validateConfigurationName(name);
+           validateConfigurationName(configName);
            final Collection<T> result = new ArrayList<>();
            Collection<Iterator<Resource>> resourceInheritanceChains = 
this.configurationResourceResolvingStrategy
-                   
.getResourceCollectionInheritanceChain(this.contentResource, configBucketNames, 
name);;
+                   
.getResourceCollectionInheritanceChain(this.contentResource, configBucketNames, 
configName);;
            if (resourceInheritanceChains != null) {
                for (final Iterator<Resource> resourceInheritanceChain : 
resourceInheritanceChains) {
-                   final T obj = convert(resourceInheritanceChain, clazz, 
converter, name, true);
+                   final T obj = convert(resourceInheritanceChain, clazz, 
converter, configName, true);
                    if (obj != null) {
                        result.add(obj);
                    }
@@ -171,6 +181,37 @@ class ConfigurationBuilderImpl implement
         }
         return converter.convert(configResource, clazz, conversionName);
     }
+    
+    /**
+     * Apply default values from configuration metadata (where no real data is 
present).
+     * @param props Properties
+     * @param configName Configuration name
+     * @return null if default values found, or a new map with added default 
properties.
+     */
+    private Map<String,Object> applyDefaultValues(Map<String,Object> props, 
String configName) {
+        ConfigurationMetadata metadata = 
configurationMetadataProvider.getConfigurationMetadata(configName);
+        if (metadata == null) {
+            // probably a configuration list - remove item name from end
+            if (StringUtils.contains(configName, "/")) {
+                String partialConfigName = 
StringUtils.substringBeforeLast(configName, "/");
+                metadata = 
configurationMetadataProvider.getConfigurationMetadata(partialConfigName);
+            }
+            if (metadata == null) {
+                return null;
+            }
+        }
+        Map<String,Object> updatedMap = new HashMap<>();
+        for (PropertyMetadata<?> propertyMetadata : 
metadata.getPropertyMetadata().values()) {
+            if (propertyMetadata.getDefaultValue() != null) {
+                updatedMap.put(propertyMetadata.getName(), 
propertyMetadata.getDefaultValue());
+            }
+        }
+        if (updatedMap.isEmpty()) {
+            return null;
+        }
+        updatedMap.putAll(props);
+        return updatedMap;
+    }
 
     // --- Annotation class support ---
 
@@ -204,10 +245,10 @@ class ConfigurationBuilderImpl implement
 
     private class AnnotationConverter<T> implements Converter<T> {
         @Override
-        public T convert(final Resource resource, final Class<T> clazz, final 
String name) {
+        public T convert(final Resource resource, final Class<T> clazz, final 
String configName) {
             return ConfigurationProxy.get(resource, clazz, new ChildResolver() 
{
-                private ConfigurationBuilder getConfiguration(String 
configName) {
-                    String childName = 
configurationPersistenceStrategy.getResourcePath(name) + "/" + configName;
+                private ConfigurationBuilder getConfiguration(String 
nestedConfigName) {
+                    String childName = 
configurationPersistenceStrategy.getResourcePath(configName) + "/" + 
nestedConfigName;
                     return 
configurationResolver.get(contentResource).name(childName);
                 }
                 @Override
@@ -240,10 +281,17 @@ class ConfigurationBuilderImpl implement
         return getConfigResourceCollection(this.configName, ValueMap.class, 
new ValueMapConverter());
     }
 
-    private static class ValueMapConverter implements Converter<ValueMap> {
+    private class ValueMapConverter implements Converter<ValueMap> {
         @Override
-        public ValueMap convert(Resource resource, Class<ValueMap> clazz, 
String name) {
-            return ResourceUtil.getValueMap(resource);
+        public ValueMap convert(Resource resource, Class<ValueMap> clazz, 
String configName) {
+            ValueMap props = ResourceUtil.getValueMap(resource);
+            Map<String,Object> updatedMap = applyDefaultValues(props, 
configName);
+            if (updatedMap != null) {
+                return new ValueMapDecorator(updatedMap);
+            }
+            else {
+                return props;
+            }
         }
     }
     
@@ -265,9 +313,9 @@ class ConfigurationBuilderImpl implement
         return getConfigResourceCollection(this.configName, clazz, new 
AdaptableConverter<T>());
     }
 
-    private static class AdaptableConverter<T> implements Converter<T> {
+    private class AdaptableConverter<T> implements Converter<T> {
         @Override
-        public T convert(Resource resource, Class<T> clazz, String name) {
+        public T convert(Resource resource, Class<T> clazz, String configName) 
{
             if (resource == null || clazz == ConfigurationBuilder.class) {
                 return null;
             }

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
 Fri Dec  9 17:52:44 2016
@@ -28,6 +28,7 @@ import org.apache.commons.lang3.ArrayUti
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.caconfig.ConfigurationBuilder;
 import org.apache.sling.caconfig.ConfigurationResolver;
+import 
org.apache.sling.caconfig.impl.metadata.ConfigurationMetadataProviderMultiplexer;
 import org.apache.sling.caconfig.impl.override.ConfigurationOverrideManager;
 import 
org.apache.sling.caconfig.management.impl.ConfigurationPersistenceStrategyMultiplexer;
 import 
org.apache.sling.caconfig.resource.impl.ConfigurationResourceResolvingStrategyMultiplexer;
@@ -50,6 +51,8 @@ public class ConfigurationResolverImpl i
     private ConfigurationInheritanceStrategyMultiplexer 
configurationInheritanceStrategy;
     @Reference
     private ConfigurationOverrideManager configurationOverrideManager;
+    @Reference
+    private ConfigurationMetadataProviderMultiplexer 
configurationMetadataProvider;
     
     @ObjectClassDefinition(name="Apache Sling Context-Aware Configuration 
Resolver",
             description="Getting context-aware configurations for a given 
resource context.")
@@ -79,7 +82,7 @@ public class ConfigurationResolverImpl i
     public ConfigurationBuilder get(Resource resource) {
         return new ConfigurationBuilderImpl(resource, this,
                 configurationResourceResolvingStrategy, 
configurationPersistenceStrategy,
-                configurationInheritanceStrategy, configurationOverrideManager,
+                configurationInheritanceStrategy, 
configurationOverrideManager, configurationMetadataProvider,
                 configBucketNames);
     }
 

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
 Fri Dec  9 17:52:44 2016
@@ -136,7 +136,7 @@ final class ConfigurationDataImpl implem
         if (valuesCache == null) {
             Map<String,Object> props = new HashMap<>();
             if (writebackConfigurationResource != null) {
-                props.putAll( 
ResourceUtil.getValueMap(writebackConfigurationResource));
+                
props.putAll(ResourceUtil.getValueMap(writebackConfigurationResource));
             }
             PropertiesFilterUtil.removeIgnoredProperties(props);
             resolveNestedConfigs(props);

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java
 Fri Dec  9 17:52:44 2016
@@ -28,4 +28,10 @@ public interface SimpleSlingModel {
     @ValueMapValue(name="stringParam")
     String getStringParam();
     
+    @ValueMapValue(name="intParam", optional = true)
+    int getIntParam();
+    
+    @ValueMapValue(name="boolParam", optional = true)
+    boolean getBoolParam();
+    
 }

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
 Fri Dec  9 17:52:44 2016
@@ -80,10 +80,12 @@ public class ConfigurationResolverAdapta
 
         SimpleSlingModel model = 
underTest.get(site1Page1).name("sampleName").asAdaptable(SimpleSlingModel.class);
         assertEquals("configValue1", model.getStringParam());
+        assertEquals(111, model.getIntParam());
+        assertEquals(true, model.getBoolParam());
     }
 
     @Test
-    public void testConfig_ValueMapCollection() {
+    public void testConfigCollection() {
         
context.build().resource("/conf/content/site1/sling:configs/sampleList")
             .siblingsMode()
             .resource("1", "stringParam", "configValue1.1")
@@ -98,6 +100,45 @@ public class ConfigurationResolverAdapta
         assertEquals("configValue1.3", propsIterator.next().getStringParam());
     }
 
+    /*
+     -- this is currently not supported --
+    @Test
+    public void testConfigWithDefaultValues() {
+        context.registerService(ConfigurationMetadataProvider.class, new 
DummyConfigurationMetadataProvider("sampleName", 
+                ImmutableMap.<String, Object>of("stringParam", "defValue1", 
"intParam", 999), false));
+
+        
context.build().resource("/conf/content/site1/sling:configs/sampleName",
+                "boolParam", true);
+
+        SimpleSlingModel model = 
underTest.get(site1Page1).name("sampleName").asAdaptable(SimpleSlingModel.class);
+        assertEquals("defValue1", model.getStringParam());
+        assertEquals(999, model.getIntParam());
+        assertEquals(true, model.getBoolParam());
+    }
+
+    @Test
+    public void testConfigCollectionWithDefaultValues() {
+        context.registerService(ConfigurationMetadataProvider.class, new 
DummyConfigurationMetadataProvider("sampleList", 
+                ImmutableMap.<String, Object>of("intParam", 999), true));
+
+        
context.build().resource("/conf/content/site1/sling:configs/sampleList")
+            .siblingsMode()
+            .resource("1", "stringParam", "configValue1.1")
+            .resource("2", "stringParam", "configValue1.2")
+            .resource("3", "stringParam", "configValue1.3");
+
+        List<SimpleSlingModel> propsList = 
ImmutableList.copyOf(underTest.get(site1Page1).name("sampleList").asAdaptableCollection(SimpleSlingModel.class));
+
+        assertEquals("configValue1.1", propsList.get(0).getStringParam());
+        assertEquals(999, propsList.get(0).getIntParam());
+        assertEquals("configValue1.2", propsList.get(1).getStringParam());
+        assertEquals(999, propsList.get(1).getIntParam());
+        assertEquals("configValue1.3", propsList.get(2).getStringParam());
+        assertEquals(999, propsList.get(2).getIntParam());
+    }
+    -- end --
+    */
+
     @Test
     public void testNonExistingContentResource() {
         SimpleSlingModel model = 
underTest.get(null).name("sampleName").asAdaptable(SimpleSlingModel.class);

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
 Fri Dec  9 17:52:44 2016
@@ -25,18 +25,23 @@ import static org.junit.Assert.assertTru
 
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.caconfig.ConfigurationResolveException;
 import org.apache.sling.caconfig.ConfigurationResolver;
 import 
org.apache.sling.caconfig.impl.override.DummyConfigurationOverrideProvider;
+import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.ConfigurationOverrideProvider;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
 /**
  * Test {@link ConfigurationResolver} with ValueMap for reading the config.
  */
@@ -104,6 +109,42 @@ public class ConfigurationResolverValueM
     }
 
     @Test
+    public void testConfigWithDefaultValues() {
+        context.registerService(ConfigurationMetadataProvider.class, new 
DummyConfigurationMetadataProvider("sampleName", 
+                ImmutableMap.<String, Object>of("stringParam", "defValue1", 
"intParam", 999), false));
+        
+        
context.build().resource("/conf/content/site1/sling:configs/sampleName", 
+                "boolParam", true);
+
+        ValueMap props = 
underTest.get(site1Page1).name("sampleName").asValueMap();
+
+        assertEquals("defValue1", props.get("stringParam", String.class));
+        assertEquals(999, (int)props.get("intParam", 0));
+        assertEquals(true, props.get("boolParam", false));
+    }
+
+    @Test
+    public void testConfigCollectionWithDefaultValues() {
+        context.registerService(ConfigurationMetadataProvider.class, new 
DummyConfigurationMetadataProvider("sampleList", 
+                ImmutableMap.<String, Object>of("intParam", 999), true));
+
+        
context.build().resource("/conf/content/site1/sling:configs/sampleList")
+            .siblingsMode()
+            .resource("1", "stringParam", "configValue1.1")
+            .resource("2", "stringParam", "configValue1.2")
+            .resource("3", "stringParam", "configValue1.3");
+
+        List<ValueMap> propsList = 
ImmutableList.copyOf(underTest.get(site1Page1).name("sampleList").asValueMapCollection());
+
+        assertEquals("configValue1.1", propsList.get(0).get("stringParam", 
String.class));
+        assertEquals(999, (int)propsList.get(0).get("intParam", 0));
+        assertEquals("configValue1.2", propsList.get(1).get("stringParam", 
String.class));
+        assertEquals(999, (int)propsList.get(1).get("intParam", 0));
+        assertEquals("configValue1.3", propsList.get(2).get("stringParam", 
String.class));
+        assertEquals(999, (int)propsList.get(2).get("intParam", 0));
+    }
+
+    @Test
     public void testConfigWithOverride() {
         context.registerService(ConfigurationOverrideProvider.class, new 
DummyConfigurationOverrideProvider(
                 
"[/content]sampleName={stringParam='override1',intParam=222}"));

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
 Fri Dec  9 17:52:44 2016
@@ -21,6 +21,7 @@ package org.apache.sling.caconfig.impl;
 import org.apache.sling.caconfig.ConfigurationResolver;
 import 
org.apache.sling.caconfig.impl.def.DefaultConfigurationInheritanceStrategy;
 import 
org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy;
+import 
org.apache.sling.caconfig.impl.metadata.ConfigurationMetadataProviderMultiplexer;
 import org.apache.sling.caconfig.impl.override.ConfigurationOverrideManager;
 import 
org.apache.sling.caconfig.management.impl.ConfigurationPersistenceStrategyMultiplexer;
 import org.apache.sling.caconfig.resource.impl.ConfigurationResourceTestUtils;
@@ -43,6 +44,7 @@ public final class ConfigurationTestUtil
         context.registerInjectActivateService(new 
DefaultConfigurationInheritanceStrategy());
         context.registerInjectActivateService(new 
ConfigurationInheritanceStrategyMultiplexer());
         context.registerInjectActivateService(new 
ConfigurationOverrideManager());
+        context.registerInjectActivateService(new 
ConfigurationMetadataProviderMultiplexer());
         return context.registerInjectActivateService(new 
ConfigurationResolverImpl(), properties);
     }
     
@@ -56,6 +58,7 @@ public final class ConfigurationTestUtil
         context.registerInjectActivateService(new 
ConfigurationPersistenceStrategyMultiplexer());
         context.registerInjectActivateService(new 
ConfigurationInheritanceStrategyMultiplexer());
         context.registerInjectActivateService(new 
ConfigurationOverrideManager());
+        context.registerInjectActivateService(new 
ConfigurationMetadataProviderMultiplexer());
         return context.registerInjectActivateService(new 
ConfigurationResolverImpl(), properties);
     }
     

Added: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java?rev=1773446&view=auto
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
 (added)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
 Fri Dec  9 17:52:44 2016
@@ -0,0 +1,62 @@
+/*
+ * 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.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.SortedSet;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
+import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
+import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
+
+import com.google.common.collect.ImmutableSortedSet;
+
+class DummyConfigurationMetadataProvider implements 
ConfigurationMetadataProvider {
+
+    private final String configName;
+    private final Map<String,Object> defaultValues;
+    private final boolean collection;
+    
+    public DummyConfigurationMetadataProvider(String configName, Map<String, 
Object> defaultValues, boolean collection) {
+        this.configName = configName;
+        this.defaultValues = defaultValues;
+        this.collection = collection;
+    }
+    
+    @Override
+    public SortedSet<String> getConfigurationNames() {
+        return ImmutableSortedSet.of(configName);
+    }
+    
+    @Override
+    public ConfigurationMetadata getConfigurationMetadata(String configName) {
+        if (!StringUtils.equals(this.configName, configName)) {
+            return null;
+        }
+        List<PropertyMetadata<?>> properties = new ArrayList<>();
+        for (Map.Entry<String, Object> entry : defaultValues.entrySet()) {
+            properties.add(new PropertyMetadata<>(entry.getKey(), 
entry.getValue()));
+        }
+        return new ConfigurationMetadata(configName, properties, collection);
+    }
+
+}

Propchange: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Fri Dec  9 17:52:44 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author

Propchange: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerTest.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerTest.java
 Fri Dec  9 17:52:44 2016
@@ -27,6 +27,8 @@ import java.util.Map;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import 
org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy;
+import 
org.apache.sling.caconfig.management.impl.ConfigurationPersistenceStrategyMultiplexer;
 import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
 import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
@@ -47,6 +49,8 @@ public class ConfigurationMetadataProvid
 
     @Before
     public void setUp() {
+        context.registerInjectActivateService(new 
ConfigurationPersistenceStrategyMultiplexer());
+        context.registerInjectActivateService(new 
DefaultConfigurationPersistenceStrategy());
         underTest = context.registerInjectActivateService(new 
ConfigurationMetadataProviderMultiplexer());
     }
     

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplNoDefaultTest.java
 Fri Dec  9 17:52:44 2016
@@ -29,7 +29,6 @@ import java.util.List;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.caconfig.impl.ConfigurationTestUtils;
-import 
org.apache.sling.caconfig.impl.metadata.ConfigurationMetadataProviderMultiplexer;
 import org.apache.sling.caconfig.management.ConfigurationData;
 import org.apache.sling.caconfig.management.ConfigurationManager;
 import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
@@ -69,7 +68,6 @@ public class ConfigurationManagerImplNoD
     @Before
     public void setUp() {
         context.registerService(ConfigurationMetadataProvider.class, 
configurationMetadataProvider);
-        context.registerInjectActivateService(new 
ConfigurationMetadataProviderMultiplexer());
         
ConfigurationTestUtils.registerConfigurationResolverWithoutDefaultImpl(context);
         underTest = context.registerInjectActivateService(new 
ConfigurationManagerImpl());
         

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
 Fri Dec  9 17:52:44 2016
@@ -34,7 +34,6 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.caconfig.impl.ConfigurationTestUtils;
 import org.apache.sling.caconfig.impl.def.ConfigurationDefNameConstants;
-import 
org.apache.sling.caconfig.impl.metadata.ConfigurationMetadataProviderMultiplexer;
 import 
org.apache.sling.caconfig.impl.override.DummyConfigurationOverrideProvider;
 import org.apache.sling.caconfig.management.ConfigurationCollectionData;
 import org.apache.sling.caconfig.management.ConfigurationData;
@@ -82,7 +81,6 @@ public class ConfigurationManagerImplTes
     @Before
     public void setUp() {
         context.registerService(ConfigurationMetadataProvider.class, 
configurationMetadataProvider);
-        context.registerInjectActivateService(new 
ConfigurationMetadataProviderMultiplexer());
         ConfigurationTestUtils.registerConfigurationResolver(context,
                 "configBucketNames", getAlternativeBucketNames());
         underTest = context.registerInjectActivateService(new 
ConfigurationManagerImpl());

Modified: 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/console/CAConfigInventoryPrinterTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/console/CAConfigInventoryPrinterTest.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/console/CAConfigInventoryPrinterTest.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/console/CAConfigInventoryPrinterTest.java
 Fri Dec  9 17:52:44 2016
@@ -29,7 +29,6 @@ import org.apache.felix.inventory.Format
 import org.apache.sling.caconfig.impl.ConfigurationTestUtils;
 import 
org.apache.sling.caconfig.impl.def.DefaultConfigurationInheritanceStrategy;
 import 
org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy;
-import 
org.apache.sling.caconfig.impl.metadata.ConfigurationMetadataProviderMultiplexer;
 import org.apache.sling.caconfig.spi.ConfigurationMetadataProvider;
 import org.apache.sling.caconfig.spi.ConfigurationOverrideProvider;
 import org.apache.sling.caconfig.spi.metadata.ConfigurationMetadata;
@@ -64,7 +63,6 @@ public class CAConfigInventoryPrinterTes
     @Before
     public void setUp() {
         context.registerService(ConfigurationMetadataProvider.class, 
configurationMetadataProvider);
-        context.registerInjectActivateService(new 
ConfigurationMetadataProviderMultiplexer());
         context.registerService(ConfigurationOverrideProvider.class, 
configurationOverrideProvider);
         ConfigurationTestUtils.registerConfigurationResolver(context);
         underTest = context.registerInjectActivateService(new 
CAConfigInventoryPrinter());

Modified: 
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java?rev=1773446&r1=1773445&r2=1773446&view=diff
==============================================================================
--- 
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java
 (original)
+++ 
sling/trunk/contrib/extensions/contextaware-config/testing/mocks/caconfig-mock-plugin/src/main/java/org/apache/sling/testing/mock/caconfig/ContextPlugins.java
 Fri Dec  9 17:52:44 2016
@@ -104,6 +104,7 @@ public final class ContextPlugins {
      */
     private static void registerConfigurationResolver(SlingContextImpl 
context) {
         context.registerInjectActivateService(new 
ConfigurationPersistenceStrategyMultiplexer());
+        context.registerInjectActivateService(new 
ConfigurationMetadataProviderMultiplexer());
         
         // only required for impl 1.2+
         registerByClassName(context, 
"org.apache.sling.caconfig.impl.ConfigurationInheritanceStrategyMultiplexer");
@@ -127,7 +128,6 @@ public final class ContextPlugins {
     }
 
     private static void registerConfigurationManagement(SlingContextImpl 
context) {
-        context.registerInjectActivateService(new 
ConfigurationMetadataProviderMultiplexer());
         context.registerInjectActivateService(new ConfigurationManagerImpl());
         context.registerInjectActivateService(new 
AnnotationClassConfigurationMetadataProvider());
     }



Reply via email to