You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2018/04/27 21:47:58 UTC

[sling-org-apache-sling-caconfig-impl] branch master updated: SLING-7627 CAConfig Impl: Wrong config name when adapting ConfigurationBuilder multiple times from same resource

This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-impl.git


The following commit(s) were added to refs/heads/master by this push:
     new d4bb850  SLING-7627 CAConfig Impl: Wrong config name when adapting ConfigurationBuilder multiple times from same resource
d4bb850 is described below

commit d4bb850a3adb91369c2bf8c9b1552ec099733225
Author: sseifert <ss...@pro-vision.de>
AuthorDate: Fri Apr 27 23:47:50 2018 +0200

    SLING-7627 CAConfig Impl: Wrong config name when adapting ConfigurationBuilder multiple times from same resource
---
 .../caconfig/impl/ConfigurationBuilderImpl.java    | 30 ++++++++++++++++++----
 .../ConfigurationResolverAnnotationClassTest.java  | 17 ++++++++++++
 2 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
index 8acb8ee..5534e6c 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
@@ -62,8 +62,7 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
     private final ConfigurationOverrideMultiplexer configurationOverrideMultiplexer;
     private final ConfigurationMetadataProvider configurationMetadataProvider;
     private final Collection<String> configBucketNames;
-
-    private String configName;
+    private final String configName;
 
     private static final Logger log = LoggerFactory.getLogger(ConfigurationBuilderImpl.class);
     
@@ -75,6 +74,19 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
             final ConfigurationOverrideMultiplexer configurationOverrideMultiplexer,
             final ConfigurationMetadataProvider configurationMetadataProvider,
             final Collection<String> configBucketNames) {
+        this(resource, configurationResolver, configurationResourceResolvingStrategy, configurationPersistenceStrategy,
+                configurationInheritanceStrategy, configurationOverrideMultiplexer, configurationMetadataProvider, configBucketNames, null);
+    }
+
+    private ConfigurationBuilderImpl(final Resource resource,
+            final ConfigurationResolver configurationResolver,
+            final ConfigurationResourceResolvingStrategy configurationResourceResolvingStrategy,
+            final ConfigurationPersistenceStrategyMultiplexer configurationPersistenceStrategy,
+            final ConfigurationInheritanceStrategy configurationInheritanceStrategy,
+            final ConfigurationOverrideMultiplexer configurationOverrideMultiplexer,
+            final ConfigurationMetadataProvider configurationMetadataProvider,
+            final Collection<String> configBucketNames,
+            final String configName) {
         this.contentResource = resource;
         this.configurationResolver = configurationResolver;
         this.configurationResourceResolvingStrategy = configurationResourceResolvingStrategy;
@@ -83,13 +95,21 @@ class ConfigurationBuilderImpl implements ConfigurationBuilder {
         this.configurationOverrideMultiplexer = configurationOverrideMultiplexer;
         this.configurationMetadataProvider = configurationMetadataProvider;
         this.configBucketNames = configBucketNames;
+        this.configName = configName;
     }
 
     @Override
-    public ConfigurationBuilder name(String configName) {
+    public ConfigurationBuilder name(final String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
-        this.configName = configName;
-        return this;
+        return new ConfigurationBuilderImpl(contentResource,
+                configurationResolver,
+                configurationResourceResolvingStrategy,
+                configurationPersistenceStrategy,
+                configurationInheritanceStrategy,
+                configurationOverrideMultiplexer,
+                configurationMetadataProvider,
+                configBucketNames,
+                configName);
     }
 
     /**
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
index 690d396..15221a0 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
@@ -32,6 +32,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.caconfig.ConfigurationBuilder;
 import org.apache.sling.caconfig.ConfigurationResolveException;
 import org.apache.sling.caconfig.ConfigurationResolver;
 import org.apache.sling.caconfig.example.ListConfig;
@@ -61,6 +62,7 @@ public class ConfigurationResolverAnnotationClassTest {
     @Before
     public void setUp() {
         underTest = ConfigurationTestUtils.registerConfigurationResolver(context);
+        context.registerInjectActivateService(new ConfigurationBuilderAdapterFactory());
 
         // content resources
         context.build().resource("/content/site1", PROPERTY_CONFIG_REF, "/conf/content/site1");
@@ -332,4 +334,19 @@ public class ConfigurationResolverAnnotationClassTest {
         assertTrue(cfgList.isEmpty());
     }
 
+    @Test
+    public void testConfigAdaptMultipleTimes() {
+        context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.SimpleConfig",
+                "stringParam", "configValue1");
+        context.build().resource("/conf/content/site1/sling:configs/config2",
+                "stringParam", "configValue2");
+
+        SimpleConfig cfg2 = site1Page1.adaptTo(ConfigurationBuilder.class).name("config2").as(SimpleConfig.class);
+        assertEquals("configValue2", cfg2.stringParam());
+
+        // make sure the config name from first call is not cached in the ConfigurationBuilder instance
+        SimpleConfig cfg = site1Page1.adaptTo(ConfigurationBuilder.class).as(SimpleConfig.class);
+        assertEquals("configValue1", cfg.stringParam());
+    }
+
 }

-- 
To stop receiving notification emails like this one, please contact
sseifert@apache.org.