Author: sseifert
Date: Sat Sep 30 11:26:03 2017
New Revision: 1810196
URL: http://svn.apache.org/viewvc?rev=1810196&view=rev
Log:
SLING-7165 fix problem with resolving config collection item name for nested
configuration lists
Added:
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
(with props)
Modified:
sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
Modified:
sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java?rev=1810196&r1=1810195&r2=1810196&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
(original)
+++
sling/trunk/bundles/extensions/caconfig/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
Sat Sep 30 11:26:03 2017
@@ -27,7 +27,9 @@ import java.util.List;
import java.util.Map;
import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections.ResettableListIterator;
import org.apache.commons.collections.Transformer;
+import org.apache.commons.collections.iterators.ListIteratorWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
@@ -144,8 +146,8 @@ class ConfigurationBuilderImpl implement
.getResourceCollectionInheritanceChain(this.contentResource, configBucketNames,
collectionParentConfigName);
if (result != null) {
resourceInheritanceChains.addAll(result);
+ }
}
- }
final Collection<T> result = new ArrayList<>();
if (resourceInheritanceChains != null) {
@@ -169,8 +171,9 @@ class ConfigurationBuilderImpl implement
Resource configResource = null;
String conversionName = name;
if (resourceInhertianceChain != null) {
+ ResettableListIterator resettableResourceInhertianceChain = new
ListIteratorWrapper(resourceInhertianceChain);
// apply persistence transformation
- Iterator<Resource> transformedResources =
IteratorUtils.transformedIterator(resourceInhertianceChain,
+ Iterator<Resource> transformedResources =
IteratorUtils.transformedIterator(resettableResourceInhertianceChain,
new Transformer() {
@Override
public Object transform(Object input) {
@@ -187,8 +190,14 @@ class ConfigurationBuilderImpl implement
// apply overrides
configResource =
configurationOverrideMultiplexer.overrideProperties(contentResource.getPath(),
name, configResource, configResource.getResourceResolver());
// build name
- if (configResource != null && isCollection) {
- conversionName = conversionName + "/" +
configResource.getName();
+ if (isCollection) {
+ // get untransformed resource for getting collection item name
+ resettableResourceInhertianceChain.reset();
+ Resource untransformedConfigResource =
configurationInheritanceStrategy.getResource(resettableResourceInhertianceChain);
+ if (untransformedConfigResource != null && configResource !=
null) {
+ conversionName =
configurationPersistenceStrategy.getCollectionParentConfigName(conversionName,
configResource.getPath())
+ + "/" + untransformedConfigResource.getName();
+ }
}
}
if (log.isTraceEnabled() && configResource != null) {
Added:
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java?rev=1810196&view=auto
==============================================================================
---
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
(added)
+++
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
Sat Sep 30 11:26:03 2017
@@ -0,0 +1,32 @@
+/*
+ * 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.example;
+
+import org.apache.sling.caconfig.annotation.Configuration;
+
+@Configuration(collection = true)
+public @interface ListDoubleNestedConfig {
+
+ String stringParam();
+
+ int intParam();
+
+ ListNestedConfig[] subListNestedConfig();
+
+}
Propchange:
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Sat Sep 30 11:26:03 2017
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java?rev=1810196&r1=1810195&r2=1810196&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
(original)
+++
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
Sat Sep 30 11:26:03 2017
@@ -35,6 +35,7 @@ import org.apache.sling.api.resource.Res
import org.apache.sling.caconfig.ConfigurationResolveException;
import org.apache.sling.caconfig.ConfigurationResolver;
import org.apache.sling.caconfig.example.ListConfig;
+import org.apache.sling.caconfig.example.ListDoubleNestedConfig;
import org.apache.sling.caconfig.example.ListNestedConfig;
import org.apache.sling.caconfig.example.NestedConfig;
import org.apache.sling.caconfig.example.SimpleConfig;
@@ -191,6 +192,54 @@ public class ConfigurationResolverAnnota
}
@Test
+ public void testConfig_List_DoubleNested() {
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value1")
+ .resource("2", "stringParam", "value2")
+ .resource("3", "stringParam", "value3");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/1/subListNestedConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value11")
+ .resource("2", "stringParam", "value12");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/1/subListNestedConfig/1/subListConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value111")
+ .resource("2", "stringParam", "value112");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/1/subListNestedConfig/2/subListConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value121");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/2/subListNestedConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value21");
+
+ List<ListDoubleNestedConfig> cfgList =
ImmutableList.copyOf(underTest.get(site1Page1).asCollection(ListDoubleNestedConfig.class));
+
+ assertEquals(3, cfgList.size());
+
+ ListDoubleNestedConfig config1 = cfgList.get(0);
+ assertEquals("value1", config1.stringParam());
+ assertEquals(2, config1.subListNestedConfig().length);
+ assertEquals("value11",
config1.subListNestedConfig()[0].stringParam());
+ assertEquals(2,
config1.subListNestedConfig()[0].subListConfig().length);
+ assertEquals("value111",
config1.subListNestedConfig()[0].subListConfig()[0].stringParam());
+ assertEquals("value112",
config1.subListNestedConfig()[0].subListConfig()[1].stringParam());
+ assertEquals("value12",
config1.subListNestedConfig()[1].stringParam());
+ assertEquals(1,
config1.subListNestedConfig()[1].subListConfig().length);
+ assertEquals("value121",
config1.subListNestedConfig()[1].subListConfig()[0].stringParam());
+
+ ListDoubleNestedConfig config2 = cfgList.get(1);
+ assertEquals("value2", config2.stringParam());
+ assertEquals(1, config2.subListNestedConfig().length);
+ assertEquals("value21",
config2.subListNestedConfig()[0].stringParam());
+ assertEquals(0,
config2.subListNestedConfig()[0].subListConfig().length);
+
+ ListDoubleNestedConfig config3 = cfgList.get(2);
+ assertEquals("value3", config3.stringParam());
+ assertEquals(0, config3.subListNestedConfig().length);
+ }
+
+ @Test
public void testConfig_List_CollectionPropertyInheritance() {
context.build()
.resource("/conf/global/sling:configs/org.apache.sling.caconfig.example.ListConfig")
Modified:
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java?rev=1810196&r1=1810195&r2=1810196&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
(original)
+++
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
Sat Sep 30 11:26:03 2017
@@ -27,11 +27,14 @@ import static org.junit.Assert.assertTru
import java.awt.geom.Rectangle2D;
import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.caconfig.ConfigurationResolveException;
import org.apache.sling.caconfig.ConfigurationResolver;
import org.apache.sling.caconfig.example.ListConfig;
+import org.apache.sling.caconfig.example.ListDoubleNestedConfig;
+import org.apache.sling.caconfig.example.ListNestedConfig;
import org.apache.sling.caconfig.example.NestedConfig;
import org.apache.sling.caconfig.example.SimpleConfig;
import
org.apache.sling.caconfig.management.impl.CustomConfigurationPersistenceStrategy2;
@@ -42,6 +45,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.osgi.framework.Constants;
+import com.google.common.collect.ImmutableList;
+
/**
* Test {@link ConfigurationResolver} with annotation classes for reading the
config.
*/
@@ -126,17 +131,100 @@ public class ConfigurationResolverCustom
public void testConfig_List() {
context.build().resource("/conf/content/site1/settings/org.apache.sling.caconfig.example.ListConfig/jcr:content")
.siblingsMode()
- .resource("1", "stringParam", "configValue1.1")
- .resource("2", "stringParam", "configValue1.2")
- .resource("3", "stringParam", "configValue1.3");
+ .resource("1", "stringParam", "value1")
+ .resource("2", "stringParam", "value2")
+ .resource("3", "stringParam", "value3");
Collection<ListConfig> cfgList =
underTest.get(site1Page1).asCollection(ListConfig.class);
assertEquals(3, cfgList.size());
Iterator<ListConfig> cfgIterator = cfgList.iterator();
- assertEquals("configValue1.1", cfgIterator.next().stringParam());
- assertEquals("configValue1.2", cfgIterator.next().stringParam());
- assertEquals("configValue1.3", cfgIterator.next().stringParam());
+ assertEquals("value1", cfgIterator.next().stringParam());
+ assertEquals("value2", cfgIterator.next().stringParam());
+ assertEquals("value3", cfgIterator.next().stringParam());
+ }
+
+ @Test
+ public void testConfig_List_Nested() {
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListNestedConfig/jcr:content")
+ .siblingsMode()
+ .resource("1", "stringParam", "value1")
+ .resource("2", "stringParam", "value2")
+ .resource("3", "stringParam", "value3");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListNestedConfig/jcr:content/1/subListConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value11")
+ .resource("2", "stringParam", "value12");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListNestedConfig/jcr:content/2/subListConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value21");
+
+ List<ListNestedConfig> cfgList =
ImmutableList.copyOf(underTest.get(site1Page1).asCollection(ListNestedConfig.class));
+
+ assertEquals(3, cfgList.size());
+
+ ListNestedConfig config1 = cfgList.get(0);
+ assertEquals("value1", config1.stringParam());
+ assertEquals(2, config1.subListConfig().length);
+ assertEquals("value11", config1.subListConfig()[0].stringParam());
+ assertEquals("value12", config1.subListConfig()[1].stringParam());
+
+ ListNestedConfig config2 = cfgList.get(1);
+ assertEquals("value2", config2.stringParam());
+ assertEquals(1, config2.subListConfig().length);
+ assertEquals("value21", config2.subListConfig()[0].stringParam());
+
+ ListNestedConfig config3 = cfgList.get(2);
+ assertEquals("value3", config3.stringParam());
+ assertEquals(0, config3.subListConfig().length);
+ }
+
+ @Test
+ public void testConfig_List_DoubleNested() {
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/jcr:content")
+ .siblingsMode()
+ .resource("1", "stringParam", "value1")
+ .resource("2", "stringParam", "value2")
+ .resource("3", "stringParam", "value3");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/jcr:content/1/subListNestedConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value11")
+ .resource("2", "stringParam", "value12");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/jcr:content/1/subListNestedConfig/1/subListConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value111")
+ .resource("2", "stringParam", "value112");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/jcr:content/1/subListNestedConfig/2/subListConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value121");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/jcr:content/2/subListNestedConfig")
+ .siblingsMode()
+ .resource("1", "stringParam", "value21");
+
+ List<ListDoubleNestedConfig> cfgList =
ImmutableList.copyOf(underTest.get(site1Page1).asCollection(ListDoubleNestedConfig.class));
+
+ assertEquals(3, cfgList.size());
+
+ ListDoubleNestedConfig config1 = cfgList.get(0);
+ assertEquals("value1", config1.stringParam());
+ assertEquals(2, config1.subListNestedConfig().length);
+ assertEquals("value11",
config1.subListNestedConfig()[0].stringParam());
+ assertEquals(2,
config1.subListNestedConfig()[0].subListConfig().length);
+ assertEquals("value111",
config1.subListNestedConfig()[0].subListConfig()[0].stringParam());
+ assertEquals("value112",
config1.subListNestedConfig()[0].subListConfig()[1].stringParam());
+ assertEquals("value12",
config1.subListNestedConfig()[1].stringParam());
+ assertEquals(1,
config1.subListNestedConfig()[1].subListConfig().length);
+ assertEquals("value121",
config1.subListNestedConfig()[1].subListConfig()[0].stringParam());
+
+ ListDoubleNestedConfig config2 = cfgList.get(1);
+ assertEquals("value2", config2.stringParam());
+ assertEquals(1, config2.subListNestedConfig().length);
+ assertEquals("value21",
config2.subListNestedConfig()[0].stringParam());
+ assertEquals(0,
config2.subListNestedConfig()[0].subListConfig().length);
+
+ ListDoubleNestedConfig config3 = cfgList.get(2);
+ assertEquals("value3", config3.stringParam());
+ assertEquals(0, config3.subListNestedConfig().length);
}
@Test
Modified:
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java?rev=1810196&r1=1810195&r2=1810196&view=diff
==============================================================================
---
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
(original)
+++
sling/trunk/bundles/extensions/caconfig/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
Sat Sep 30 11:26:03 2017
@@ -27,11 +27,14 @@ import static org.junit.Assert.assertTru
import java.awt.geom.Rectangle2D;
import java.util.Collection;
import java.util.Iterator;
+import java.util.List;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.caconfig.ConfigurationResolveException;
import org.apache.sling.caconfig.ConfigurationResolver;
import org.apache.sling.caconfig.example.ListConfig;
+import org.apache.sling.caconfig.example.ListDoubleNestedConfig;
+import org.apache.sling.caconfig.example.ListNestedConfig;
import org.apache.sling.caconfig.example.NestedConfig;
import org.apache.sling.caconfig.example.SimpleConfig;
import
org.apache.sling.caconfig.management.impl.CustomConfigurationPersistenceStrategy;
@@ -42,6 +45,8 @@ import org.junit.Rule;
import org.junit.Test;
import org.osgi.framework.Constants;
+import com.google.common.collect.ImmutableList;
+
/**
* Test {@link ConfigurationResolver} with annotation classes for reading the
config.
*/
@@ -126,17 +131,100 @@ public class ConfigurationResolverCustom
public void testConfig_List() {
context.build().resource("/conf/content/site1/settings/org.apache.sling.caconfig.example.ListConfig")
.siblingsMode()
- .resource("1/jcr:content", "stringParam", "configValue1.1")
- .resource("2/jcr:content", "stringParam", "configValue1.2")
- .resource("3/jcr:content", "stringParam", "configValue1.3");
+ .resource("1/jcr:content", "stringParam", "value1")
+ .resource("2/jcr:content", "stringParam", "value2")
+ .resource("3/jcr:content", "stringParam", "value3");
Collection<ListConfig> cfgList =
underTest.get(site1Page1).asCollection(ListConfig.class);
assertEquals(3, cfgList.size());
Iterator<ListConfig> cfgIterator = cfgList.iterator();
- assertEquals("configValue1.1", cfgIterator.next().stringParam());
- assertEquals("configValue1.2", cfgIterator.next().stringParam());
- assertEquals("configValue1.3", cfgIterator.next().stringParam());
+ assertEquals("value1", cfgIterator.next().stringParam());
+ assertEquals("value2", cfgIterator.next().stringParam());
+ assertEquals("value3", cfgIterator.next().stringParam());
+ }
+
+ @Test
+ public void testConfig_List_Nested() {
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListNestedConfig")
+ .siblingsMode()
+ .resource("1/jcr:content", "stringParam", "value1")
+ .resource("2/jcr:content", "stringParam", "value2")
+ .resource("3/jcr:content", "stringParam", "value3");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListNestedConfig/1/jcr:content/subListConfig")
+ .siblingsMode()
+ .resource("1/jcr:content", "stringParam", "value11")
+ .resource("2/jcr:content", "stringParam", "value12");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListNestedConfig/2/jcr:content/subListConfig")
+ .siblingsMode()
+ .resource("1/jcr:content", "stringParam", "value21");
+
+ List<ListNestedConfig> cfgList =
ImmutableList.copyOf(underTest.get(site1Page1).asCollection(ListNestedConfig.class));
+
+ assertEquals(3, cfgList.size());
+
+ ListNestedConfig config1 = cfgList.get(0);
+ assertEquals("value1", config1.stringParam());
+ assertEquals(2, config1.subListConfig().length);
+ assertEquals("value11", config1.subListConfig()[0].stringParam());
+ assertEquals("value12", config1.subListConfig()[1].stringParam());
+
+ ListNestedConfig config2 = cfgList.get(1);
+ assertEquals("value2", config2.stringParam());
+ assertEquals(1, config2.subListConfig().length);
+ assertEquals("value21", config2.subListConfig()[0].stringParam());
+
+ ListNestedConfig config3 = cfgList.get(2);
+ assertEquals("value3", config3.stringParam());
+ assertEquals(0, config3.subListConfig().length);
+ }
+
+ @Test
+ public void testConfig_List_DoubleNested() {
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig")
+ .siblingsMode()
+ .resource("1/jcr:content", "stringParam", "value1")
+ .resource("2/jcr:content", "stringParam", "value2")
+ .resource("3/jcr:content", "stringParam", "value3");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/1/jcr:content/subListNestedConfig")
+ .siblingsMode()
+ .resource("1/jcr:content", "stringParam", "value11")
+ .resource("2/jcr:content", "stringParam", "value12");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/1/jcr:content/subListNestedConfig/1/jcr:content/subListConfig")
+ .siblingsMode()
+ .resource("1/jcr:content", "stringParam", "value111")
+ .resource("2/jcr:content", "stringParam", "value112");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/1/jcr:content/subListNestedConfig/2/jcr:content/subListConfig")
+ .siblingsMode()
+ .resource("1/jcr:content", "stringParam", "value121");
+
context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/2/jcr:content/subListNestedConfig")
+ .siblingsMode()
+ .resource("1/jcr:content", "stringParam", "value21");
+
+ List<ListDoubleNestedConfig> cfgList =
ImmutableList.copyOf(underTest.get(site1Page1).asCollection(ListDoubleNestedConfig.class));
+
+ assertEquals(3, cfgList.size());
+
+ ListDoubleNestedConfig config1 = cfgList.get(0);
+ assertEquals("value1", config1.stringParam());
+ assertEquals(2, config1.subListNestedConfig().length);
+ assertEquals("value11",
config1.subListNestedConfig()[0].stringParam());
+ assertEquals(2,
config1.subListNestedConfig()[0].subListConfig().length);
+ assertEquals("value111",
config1.subListNestedConfig()[0].subListConfig()[0].stringParam());
+ assertEquals("value112",
config1.subListNestedConfig()[0].subListConfig()[1].stringParam());
+ assertEquals("value12",
config1.subListNestedConfig()[1].stringParam());
+ assertEquals(1,
config1.subListNestedConfig()[1].subListConfig().length);
+ assertEquals("value121",
config1.subListNestedConfig()[1].subListConfig()[0].stringParam());
+
+ ListDoubleNestedConfig config2 = cfgList.get(1);
+ assertEquals("value2", config2.stringParam());
+ assertEquals(1, config2.subListNestedConfig().length);
+ assertEquals("value21",
config2.subListNestedConfig()[0].stringParam());
+ assertEquals(0,
config2.subListNestedConfig()[0].subListConfig().length);
+
+ ListDoubleNestedConfig config3 = cfgList.get(2);
+ assertEquals("value3", config3.stringParam());
+ assertEquals(0, config3.subListNestedConfig().length);
}
@Test