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 2021/12/16 16:54:45 UTC

[sling-org-apache-sling-caconfig-impl] branch master updated (cf04416 -> 99fd942)

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

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


    from cf04416  SLING-11010 do not shade org.apache.sling.commons.osgi - we can depend on it directly
     new d226d5b  cosmetic: cleanup whitespaces
     new 99fd942  SLING-11019 Nested sub configurations in nested configuration collections: Config name not correctly applied from persistence strategy

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../impl/ConfigurationBindingsValueProvider.java   | 16 ++---
 ...gurationInheritanceStrategyMultiplexerImpl.java |  4 +-
 .../caconfig/impl/ConfigurationNameConstants.java  |  2 +-
 .../sling/caconfig/impl/ConfigurationProxy.java    |  6 +-
 .../caconfig/impl/ConfigurationResolverImpl.java   | 12 ++--
 .../impl/ConfigurationResourceWrapper.java         | 19 ++++--
 .../DefaultConfigurationInheritanceStrategy.java   | 14 ++---
 .../DefaultConfigurationPersistenceStrategy.java   | 38 ++++++------
 ...notationClassConfigurationMetadataProvider.java | 12 ++--
 .../impl/metadata/BundleConfigurationMapping.java  | 26 ++++-----
 .../ConfigClassBundleTackerCustomizer.java         |  4 +-
 .../impl/metadata/ConfigurationMapping.java        |  8 +--
 ...nfigurationMetadataProviderMultiplexerImpl.java |  6 +-
 .../ConfigurationOverrideMultiplexerImpl.java      | 16 ++---
 .../OsgiConfigurationOverrideProvider.java         |  4 +-
 .../sling/caconfig/impl/override/OverrideItem.java |  8 +--
 .../impl/override/OverrideStringParser.java        | 42 ++++++-------
 .../management/ConfigurationCollectionData.java    |  6 +-
 .../caconfig/management/ConfigurationData.java     |  6 +-
 .../ConfigurationManagementSettings.java           |  6 +-
 .../caconfig/management/ConfigurationManager.java  | 10 ++--
 .../ConfigurationResourceResolverConfig.java       |  2 +-
 .../management/ContextPathStrategyMultiplexer.java |  2 +-
 .../sling/caconfig/management/ValueInfo.java       | 16 ++---
 .../impl/ConfigurationCollectionDataImpl.java      |  4 +-
 .../management/impl/ConfigurationDataImpl.java     | 22 +++----
 .../impl/ConfigurationManagementSettingsImpl.java  | 20 +++----
 .../management/impl/ConfigurationManagerImpl.java  | 42 ++++++-------
 ...gurationPersistenceStrategyMultiplexerImpl.java | 16 ++---
 .../impl/ContextPathStrategyMultiplexerImpl.java   | 12 ++--
 .../management/impl/PropertiesFilterUtil.java      |  2 +-
 .../impl/console/ConfigurationMetadataPrinter.java | 14 ++---
 .../impl/console/ConfigurationOverridePrinter.java |  6 +-
 .../ConfigurationPersistenceStrategyPrinter.java   |  2 +-
 .../console/ConfigurationWebConsolePlugin.java     | 48 +++++++--------
 .../impl/console/ServiceConfigurationPrinter.java  |  6 +-
 ...onfigurationInheritanceStrategyMultiplexer.java |  2 +-
 .../ConfigurationOverrideMultiplexer.java          |  2 +-
 ...onfigurationPersistenceStrategyMultiplexer.java |  4 +-
 .../ContextPathStrategyMultiplexer.java            |  2 +-
 .../impl/ConfigurationResourceResolverImpl.java    |  2 +-
 ...onResourceResolvingStrategyMultiplexerImpl.java |  6 +-
 .../def/ConfigurationResourceNameConstants.java    |  2 +-
 ...aultConfigurationResourceResolvingStrategy.java | 10 ++--
 .../resource/impl/util/ConfigNameUtil.java         |  8 +--
 .../sling/caconfig/resource/impl/util/MapUtil.java |  6 +-
 .../impl/util/PathEliminateDuplicatesIterator.java |  4 +-
 .../impl/util/PathParentExpandIterator.java        |  6 +-
 .../caconfig/resource/impl/util/PropertyUtil.java  |  2 +-
 .../util/ResourceEliminateDuplicatesIterator.java  |  4 +-
 .../impl/util/ResourcePathCollatingIterator.java   |  4 +-
 .../sling/caconfig/example/AllTypesConfig.java     | 36 ++++++------
 .../sling/caconfig/example/AllTypesDefaults.java   |  8 +--
 .../sling/caconfig/example/IllegalTypesConfig.java | 18 +++---
 .../apache/sling/caconfig/example/ListConfig.java  |  4 +-
 .../caconfig/example/ListDoubleNestedConfig.java   |  4 +-
 .../sling/caconfig/example/ListNestedConfig.java   |  4 +-
 .../caconfig/example/MetadataSimpleConfig.java     |  6 +-
 .../sling/caconfig/example/NestedConfig.java       |  8 +--
 .../sling/caconfig/example/SimpleConfig.java       |  6 +-
 .../sling/caconfig/example/SimpleSlingModel.java   |  6 +-
 .../sling/caconfig/example/SpecialNamesConfig.java |  6 +-
 .../caconfig/example/WithoutAnnotationConfig.java  |  2 +-
 .../ConfigurationBuilderAdapterFactoryTest.java    |  8 +--
 .../caconfig/impl/ConfigurationProxyTest.java      | 36 ++++++------
 .../impl/ConfigurationResolverAdaptableTest.java   |  6 +-
 .../ConfigurationResolverAnnotationClassTest.java  | 18 +++---
 ...onfigurationResolverCustomPersistence2Test.java | 14 ++---
 ...nfigurationResolverCustomPersistence3Test.java} | 50 ++++++++--------
 ...ConfigurationResolverCustomPersistenceTest.java | 14 ++---
 .../impl/ConfigurationResolverValueMapTest.java    | 12 ++--
 .../caconfig/impl/ConfigurationTestUtils.java      |  6 +-
 .../impl/DummyConfigurationMetadataProvider.java   |  6 +-
 ...efaultConfigurationInheritanceStrategyTest.java | 28 ++++-----
 ...tionClassConfigurationMetadataProviderTest.java | 32 +++++-----
 .../impl/metadata/AnnotationClassParserTest.java   | 30 +++++-----
 ...urationMetadataProviderMultiplexerImplTest.java | 14 ++---
 .../ConfigurationOverrideMultiplexerImplTest.java  |  8 +--
 .../DummyConfigurationOverrideProvider.java        |  4 +-
 .../OsgiConfigurationOverrideProviderTest.java     |  2 +-
 .../caconfig/impl/override/OverrideItemTest.java   |  4 +-
 .../impl/override/OverrideStringParserTest.java    | 20 +++----
 ...mPropertyConfigurationOverrideProviderTest.java |  2 +-
 .../ConfigurationManagementSettingsImplTest.java   |  8 +--
 ...gurationManagerImplCustomPersistence3Test.java} | 28 ++++-----
 .../CustomConfigurationPersistenceStrategy.java    | 18 +++---
 .../CustomConfigurationPersistenceStrategy2.java   | 22 +++----
 ...> CustomConfigurationPersistenceStrategy3.java} | 68 +++++++---------------
 .../impl/ConfigurationResourceTestUtils.java       |  6 +-
 .../resource/impl/util/ConfigNameUtilTest.java     |  2 +-
 .../impl/util/ContextResourceTestUtil.java         |  4 +-
 .../caconfig/resource/impl/util/MapUtilTest.java   |  2 +-
 .../util/PathEliminateDuplicatesIteratorTest.java  |  4 +-
 .../impl/util/PathParentExpandIteratorTest.java    |  4 +-
 94 files changed, 558 insertions(+), 573 deletions(-)
 copy src/test/java/org/apache/sling/caconfig/impl/{ConfigurationResolverCustomPersistenceTest.java => ConfigurationResolverCustomPersistence3Test.java} (89%)
 copy src/test/java/org/apache/sling/caconfig/management/impl/{ConfigurationManagerImplCustomPersistence2Test.java => ConfigurationManagerImplCustomPersistence3Test.java} (94%)
 copy src/test/java/org/apache/sling/caconfig/management/impl/{CustomConfigurationPersistenceStrategy2.java => CustomConfigurationPersistenceStrategy3.java} (86%)

[sling-org-apache-sling-caconfig-impl] 02/02: SLING-11019 Nested sub configurations in nested configuration collections: Config name not correctly applied from persistence strategy

Posted by ss...@apache.org.
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

commit 99fd9421817f2943eba7e24d4156b78563af9756
Author: Stefan Seifert <st...@users.noreply.github.com>
AuthorDate: Thu Dec 16 17:53:40 2021 +0100

    SLING-11019 Nested sub configurations in nested configuration collections: Config name not correctly applied from persistence strategy
---
 .../management/impl/ConfigurationDataImpl.java     |   6 +-
 ...onfigurationResolverCustomPersistence3Test.java | 281 +++++++++++++++++++++
 ...igurationManagerImplCustomPersistence3Test.java | 117 +++++++++
 .../CustomConfigurationPersistenceStrategy2.java   |   2 +-
 ...> CustomConfigurationPersistenceStrategy3.java} |  48 +---
 5 files changed, 414 insertions(+), 40 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
index 79e9a56..3eb7cba 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
@@ -187,9 +187,9 @@ final class ConfigurationDataImpl implements ConfigurationData {
                 String relatedConfigPath = resolvedConfigurationResource != null ? resolvedConfigurationResource.getPath() : null;
                 String nestedConfigName;
                 if (configResourceCollection) {
-                    String collectionItemName = StringUtils.defaultString(getCollectionItemName(), "newItem");
-                    nestedConfigName = configurationPersistenceStrategy.getCollectionParentConfigName(configName, relatedConfigPath)
-                            + "/" + configurationPersistenceStrategy.getCollectionItemConfigName(collectionItemName, relatedConfigPath)
+                    String nestedCollectionItemName = StringUtils.defaultString(getCollectionItemName(), "newItem");
+                    nestedConfigName = configurationPersistenceStrategy.getCollectionItemConfigName(
+                            configurationPersistenceStrategy.getCollectionParentConfigName(configName, relatedConfigPath) + "/" + nestedCollectionItemName, relatedConfigPath)
                             + "/" + nestedConfigMetadata.getName();
                 }
                 else {
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence3Test.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence3Test.java
new file mode 100644
index 0000000..030e184
--- /dev/null
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence3Test.java
@@ -0,0 +1,281 @@
+/*
+ * 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 static org.apache.sling.caconfig.resource.impl.def.ConfigurationResourceNameConstants.PROPERTY_CONFIG_REF;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+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.CustomConfigurationPersistenceStrategy3;
+import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
+import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.junit.Before;
+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.
+ */
+@SuppressWarnings("null")
+public class ConfigurationResolverCustomPersistence3Test {
+
+    @Rule
+    public SlingContext context = new SlingContext();
+
+    private ConfigurationResolver underTest;
+
+    private Resource site1Page1;
+
+    @Before
+    public void setUp() {
+        // custom config with defines alternative bucket name "settings"
+        underTest = ConfigurationTestUtils.registerConfigurationResolver(context,
+                "configBucketNames", "settings");
+
+        // custom strategy which redirects all config resources to a jcr:content subnode
+        context.registerService(ConfigurationPersistenceStrategy2.class,
+                new CustomConfigurationPersistenceStrategy3(), Constants.SERVICE_RANKING, 2000);
+
+        // content resources
+        context.build().resource("/content/site1", PROPERTY_CONFIG_REF, "/conf/content/site1");
+        site1Page1 = context.create().resource("/content/site1/page1");
+    }
+
+    @Test
+    public void testNonExistingConfig_Simple() {
+        SimpleConfig cfg = underTest.get(site1Page1).as(SimpleConfig.class);
+
+        assertNull(cfg.stringParam());
+        assertEquals(5, cfg.intParam());
+        assertEquals(false, cfg.boolParam());
+    }
+
+    @Test
+    public void testNonExistingConfig_List() {
+        Collection<ListConfig> cfgList = underTest.get(site1Page1).asCollection(ListConfig.class);
+        assertTrue(cfgList.isEmpty());
+    }
+
+    @Test
+    public void testNonExistingConfig_Nested() {
+        NestedConfig cfg = underTest.get(site1Page1).as(NestedConfig.class);
+
+        assertNull(cfg.stringParam());
+        assertNotNull(cfg.subConfig());
+        assertNotNull(cfg.subListConfig());
+    }
+
+
+    @Test
+    public void testConfig_Simple() {
+        context.build().resource("/conf/content/site1/settings/org.apache.sling.caconfig.example.SimpleConfig/jcr:content",
+                "stringParam", "configValue1",
+                "intParam", 111,
+                "boolParam", true);
+
+        SimpleConfig cfg = underTest.get(site1Page1).as(SimpleConfig.class);
+
+        assertEquals("configValue1", cfg.stringParam());
+        assertEquals(111, cfg.intParam());
+        assertEquals(true, cfg.boolParam());
+    }
+
+    @Test
+    public void testConfig_SimpleWithName() {
+        context.build().resource("/conf/content/site1/settings/sampleName/jcr:content",
+                "stringParam", "configValue1.1",
+                "intParam", 1111,
+                "boolParam", true);
+
+        SimpleConfig cfg = underTest.get(site1Page1).name("sampleName").as(SimpleConfig.class);
+
+        assertEquals("configValue1.1", cfg.stringParam());
+        assertEquals(1111, cfg.intParam());
+        assertEquals(true, cfg.boolParam());
+    }
+
+    @Test
+    public void testConfig_List() {
+        context.build().resource("/conf/content/site1/settings/org.apache.sling.caconfig.example.ListConfig")
+            .siblingsMode()
+            .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("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", "stringParam", "value11")
+            .resource("2", "stringParam", "value12");
+        context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListNestedConfig/2/jcr:content/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")
+            .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", "stringParam", "value11")
+            .resource("2", "stringParam", "value12");
+        context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/1/jcr:content/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/jcr:content/subListNestedConfig/2/subListConfig")
+            .siblingsMode()
+            .resource("1", "stringParam", "value121");
+        context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListDoubleNestedConfig/2/jcr:content/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_Nested() {
+        context.build().resource("/conf/content/site1/settings/org.apache.sling.caconfig.example.NestedConfig")
+            .resource("jcr:content", "stringParam", "configValue3")
+                .siblingsMode()
+                .resource("subConfig", "stringParam", "configValue4", "intParam", 444, "boolParam", true)
+                .hierarchyMode()
+                .resource("subListConfig")
+                    .siblingsMode()
+                    .resource("1", "stringParam", "configValue2.1")
+                    .resource("2", "stringParam", "configValue2.2")
+                    .resource("3", "stringParam", "configValue2.3");
+
+        NestedConfig cfg = underTest.get(site1Page1).as(NestedConfig.class);
+
+        assertEquals("configValue3", cfg.stringParam());
+
+        SimpleConfig subConfig = cfg.subConfig();
+        assertEquals("configValue4", subConfig.stringParam());
+        assertEquals(444, subConfig.intParam());
+        assertEquals(true, subConfig.boolParam());
+
+        ListConfig[] listConfig = cfg.subListConfig();
+        assertEquals(3, listConfig.length);
+        assertEquals("configValue2.1", listConfig[0].stringParam());
+        assertEquals("configValue2.2", listConfig[1].stringParam());
+        assertEquals("configValue2.3", listConfig[2].stringParam());
+    }
+
+    @Test(expected=ConfigurationResolveException.class)
+    public void testInvalidClassConversion() {
+        // test with class not supported for configuration mapping
+        underTest.get(site1Page1).as(Rectangle2D.class);
+    }
+
+    @Test
+    public void testNonExistingContentResource_Simple() {
+        SimpleConfig cfg = underTest.get(null).as(SimpleConfig.class);
+
+        assertNull(cfg.stringParam());
+        assertEquals(5, cfg.intParam());
+        assertEquals(false, cfg.boolParam());
+    }
+
+    @Test
+    public void testNonExistingContentResource_List() {
+        Collection<ListConfig> cfgList = underTest.get(null).asCollection(ListConfig.class);
+        assertTrue(cfgList.isEmpty());
+    }
+
+}
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistence3Test.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistence3Test.java
new file mode 100644
index 0000000..524915a
--- /dev/null
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistence3Test.java
@@ -0,0 +1,117 @@
+/*
+ * 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.management.impl;
+
+import static org.apache.sling.caconfig.management.impl.CustomConfigurationPersistenceStrategy2.containsJcrContent;
+
+import java.util.Dictionary;
+import java.util.Hashtable;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy2;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.osgi.framework.Constants;
+import org.osgi.service.cm.ConfigurationAdmin;
+
+/**
+ * Test {@link ConfigurationManagerImpl} with custom persistence.
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class ConfigurationManagerImplCustomPersistence3Test extends ConfigurationManagerImplTest {
+
+    @Override
+    @SuppressWarnings("null")
+    protected void provideCustomOsgiConfig() throws Exception {
+        // provide custom lookup resource name for collection properties
+        ConfigurationAdmin configAdmin = context.getService(ConfigurationAdmin.class);
+        org.osgi.service.cm.Configuration mgmtSettingsConfig = configAdmin.getConfiguration(ConfigurationManagementSettingsImpl.class.getName());
+        Dictionary<String, Object> mgmtSettings = new Hashtable<>();
+        mgmtSettings.put("configCollectionPropertiesResourceNames", new String[] { "colPropsResource", "." });
+        mgmtSettingsConfig.update(mgmtSettings);
+    }
+
+    @Before
+    public void setUpCustomPersistence() {
+        // custom strategy which redirects all config resources to a jcr:content subnode
+        context.registerService(ConfigurationPersistenceStrategy2.class,
+                new CustomConfigurationPersistenceStrategy3(), Constants.SERVICE_RANKING, 2000);
+    }
+
+    @Override
+    protected String getConfigResolvePath(String path) {
+        if (containsJcrContent(path)) {
+            return replaceBucketName(path);
+        }
+        else {
+            return replaceBucketName(path) + "/jcr:content";
+        }
+    }
+
+    @Override
+    protected String getConfigPersistPath(String path) {
+        if (containsJcrContent(path)) {
+            return path;
+        }
+        else {
+            return path + "/jcr:content";
+        }
+    }
+
+    @Override
+    protected String getConfigCollectionParentResolvePath(String path) {
+        return path;
+    }
+
+    @Override
+    protected String getConfigCollectionParentPersistPath(String path) {
+        return path;
+    }
+
+    @Override
+    protected String getConfigCollectionItemResolvePath(String path) {
+        if (containsJcrContent(path)) {
+            return path;
+        }
+        else {
+            return path + "/jcr:content";
+        }
+    }
+
+    @Override
+    protected String getConfigCollectionItemPersistPath(String path) {
+        if (containsJcrContent(path)) {
+            return path;
+        }
+        else {
+            return path + "/jcr:content";
+        }
+    }
+
+    private String replaceBucketName(String path) {
+        return StringUtils.replace(path, "/sling:configs/", "/settings/");
+    }
+
+    @Override
+    protected String[] getAlternativeBucketNames() {
+        return new String[] { "settings" };
+    }
+
+}
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
index cab5452..b8d4e32 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
@@ -154,7 +154,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
         // delete existing children and create new ones
         deleteChildren(configResourceParent);
         for (ConfigurationPersistData item : data.getItems()) {
-            String path = configResourceParent.getPath() + "/" + item.getCollectionItemName();
+            String path = getCollectionItemResourcePath(configResourceParent.getPath() + "/" + item.getCollectionItemName());
             getOrCreateResource(resourceResolver, path, item.getProperties());
         }
 
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy3.java
similarity index 87%
copy from src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
copy to src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy3.java
index cab5452..b853dd7 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy3.java
@@ -44,10 +44,10 @@ import org.jetbrains.annotations.Nullable;
  * which reads and stores data from a sub-resources named "jcr:content".
  *
  * Difference to {@link CustomConfigurationPersistenceStrategy}:
- * - For configuration collections jcr:content is added only for the parent, not for each item
+ * - For configuration collections jcr:content is added for each item, not for the parent
  * - For nested configuration jcr:content is not duplicated in the path
  */
-public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPersistenceStrategy2 {
+public class CustomConfigurationPersistenceStrategy3 implements ConfigurationPersistenceStrategy2 {
 
     private static final String DEFAULT_RESOURCE_TYPE = JcrConstants.NT_UNSTRUCTURED;
     private static final String CHILD_NODE_NAME = JcrConstants.JCR_CONTENT;
@@ -59,26 +59,18 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
         if (containsJcrContent(resource.getPath())) {
             return resource;
         }
-        else {
-            return resource.getChild(CHILD_NODE_NAME);
-        }
+        return resource.getChild(CHILD_NODE_NAME);
     }
 
     @Override
     public Resource getCollectionParentResource(@NotNull Resource resource) {
         assertNotNull(resource);
-        if (containsJcrContent(resource.getPath())) {
-            return resource;
-        }
-        else {
-            return resource.getChild(CHILD_NODE_NAME);
-        }
+        return resource;
     }
 
     @Override
     public Resource getCollectionItemResource(@NotNull Resource resource) {
-        assertNotNull(resource);
-        return resource;
+        return getResource(resource);
     }
 
     @Override
@@ -87,26 +79,18 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
         if (containsJcrContent(resourcePath)) {
             return resourcePath;
         }
-        else {
-            return resourcePath + "/" + CHILD_NODE_NAME;
-        }
+        return resourcePath + "/" + CHILD_NODE_NAME;
     }
 
     @Override
     public String getCollectionParentResourcePath(@NotNull String resourcePath) {
         assertNotNull(resourcePath);
-        if (containsJcrContent(resourcePath)) {
-            return resourcePath;
-        }
-        else {
-            return resourcePath + "/" + CHILD_NODE_NAME;
-        }
+        return resourcePath;
     }
 
     @Override
     public String getCollectionItemResourcePath(@NotNull String resourcePath) {
-        assertNotNull(resourcePath);
-        return resourcePath;
+        return getResourcePath(resourcePath);
     }
 
     @Override
@@ -115,26 +99,18 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
         if (containsJcrContent(configName)) {
             return configName;
         }
-        else {
-            return configName + "/" + CHILD_NODE_NAME;
-        }
+        return configName + "/" + CHILD_NODE_NAME;
     }
 
     @Override
     public String getCollectionParentConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
         assertNotNull(configName);
-        if (containsJcrContent(configName)) {
-            return configName;
-        }
-        else {
-            return configName + "/" + CHILD_NODE_NAME;
-        }
+        return configName;
     }
 
     @Override
     public String getCollectionItemConfigName(@NotNull String configName, @Nullable String relatedConfigPath) {
-        assertNotNull(configName);
-        return configName;
+        return getConfigName(configName, relatedConfigPath);
     }
 
     @Override
@@ -154,7 +130,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
         // delete existing children and create new ones
         deleteChildren(configResourceParent);
         for (ConfigurationPersistData item : data.getItems()) {
-            String path = configResourceParent.getPath() + "/" + item.getCollectionItemName();
+            String path = getCollectionItemResourcePath(configResourceParent.getPath() + "/" + item.getCollectionItemName());
             getOrCreateResource(resourceResolver, path, item.getProperties());
         }
 

[sling-org-apache-sling-caconfig-impl] 01/02: cosmetic: cleanup whitespaces

Posted by ss...@apache.org.
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

commit d226d5b8ece50a546c8f29827ad6e4e516763e64
Author: Stefan Seifert <st...@users.noreply.github.com>
AuthorDate: Thu Dec 16 17:15:49 2021 +0100

    cosmetic: cleanup whitespaces
---
 .../impl/ConfigurationBindingsValueProvider.java   | 16 ++++----
 ...gurationInheritanceStrategyMultiplexerImpl.java |  4 +-
 .../caconfig/impl/ConfigurationNameConstants.java  |  2 +-
 .../sling/caconfig/impl/ConfigurationProxy.java    |  6 +--
 .../caconfig/impl/ConfigurationResolverImpl.java   | 12 +++---
 .../impl/ConfigurationResourceWrapper.java         | 19 ++++++---
 .../DefaultConfigurationInheritanceStrategy.java   | 14 +++----
 .../DefaultConfigurationPersistenceStrategy.java   | 38 ++++++++---------
 ...notationClassConfigurationMetadataProvider.java | 12 +++---
 .../impl/metadata/BundleConfigurationMapping.java  | 26 ++++++------
 .../ConfigClassBundleTackerCustomizer.java         |  4 +-
 .../impl/metadata/ConfigurationMapping.java        |  8 ++--
 ...nfigurationMetadataProviderMultiplexerImpl.java |  6 +--
 .../ConfigurationOverrideMultiplexerImpl.java      | 16 ++++----
 .../OsgiConfigurationOverrideProvider.java         |  4 +-
 .../sling/caconfig/impl/override/OverrideItem.java |  8 ++--
 .../impl/override/OverrideStringParser.java        | 42 +++++++++----------
 .../management/ConfigurationCollectionData.java    |  6 +--
 .../caconfig/management/ConfigurationData.java     |  6 +--
 .../ConfigurationManagementSettings.java           |  6 +--
 .../caconfig/management/ConfigurationManager.java  | 10 ++---
 .../ConfigurationResourceResolverConfig.java       |  2 +-
 .../management/ContextPathStrategyMultiplexer.java |  2 +-
 .../sling/caconfig/management/ValueInfo.java       | 16 ++++----
 .../impl/ConfigurationCollectionDataImpl.java      |  4 +-
 .../management/impl/ConfigurationDataImpl.java     | 16 ++++----
 .../impl/ConfigurationManagementSettingsImpl.java  | 20 ++++-----
 .../management/impl/ConfigurationManagerImpl.java  | 42 +++++++++----------
 ...gurationPersistenceStrategyMultiplexerImpl.java | 16 ++++----
 .../impl/ContextPathStrategyMultiplexerImpl.java   | 12 +++---
 .../management/impl/PropertiesFilterUtil.java      |  2 +-
 .../impl/console/ConfigurationMetadataPrinter.java | 14 +++----
 .../impl/console/ConfigurationOverridePrinter.java |  6 +--
 .../ConfigurationPersistenceStrategyPrinter.java   |  2 +-
 .../console/ConfigurationWebConsolePlugin.java     | 48 +++++++++++-----------
 .../impl/console/ServiceConfigurationPrinter.java  |  6 +--
 ...onfigurationInheritanceStrategyMultiplexer.java |  2 +-
 .../ConfigurationOverrideMultiplexer.java          |  2 +-
 ...onfigurationPersistenceStrategyMultiplexer.java |  4 +-
 .../ContextPathStrategyMultiplexer.java            |  2 +-
 .../impl/ConfigurationResourceResolverImpl.java    |  2 +-
 ...onResourceResolvingStrategyMultiplexerImpl.java |  6 +--
 .../def/ConfigurationResourceNameConstants.java    |  2 +-
 ...aultConfigurationResourceResolvingStrategy.java | 10 ++---
 .../resource/impl/util/ConfigNameUtil.java         |  8 ++--
 .../sling/caconfig/resource/impl/util/MapUtil.java |  6 +--
 .../impl/util/PathEliminateDuplicatesIterator.java |  4 +-
 .../impl/util/PathParentExpandIterator.java        |  6 +--
 .../caconfig/resource/impl/util/PropertyUtil.java  |  2 +-
 .../util/ResourceEliminateDuplicatesIterator.java  |  4 +-
 .../impl/util/ResourcePathCollatingIterator.java   |  4 +-
 .../sling/caconfig/example/AllTypesConfig.java     | 36 ++++++++--------
 .../sling/caconfig/example/AllTypesDefaults.java   |  8 ++--
 .../sling/caconfig/example/IllegalTypesConfig.java | 18 ++++----
 .../apache/sling/caconfig/example/ListConfig.java  |  4 +-
 .../caconfig/example/ListDoubleNestedConfig.java   |  4 +-
 .../sling/caconfig/example/ListNestedConfig.java   |  4 +-
 .../caconfig/example/MetadataSimpleConfig.java     |  6 +--
 .../sling/caconfig/example/NestedConfig.java       |  8 ++--
 .../sling/caconfig/example/SimpleConfig.java       |  6 +--
 .../sling/caconfig/example/SimpleSlingModel.java   |  6 +--
 .../sling/caconfig/example/SpecialNamesConfig.java |  6 +--
 .../caconfig/example/WithoutAnnotationConfig.java  |  2 +-
 .../ConfigurationBuilderAdapterFactoryTest.java    |  8 ++--
 .../caconfig/impl/ConfigurationProxyTest.java      | 36 ++++++++--------
 .../impl/ConfigurationResolverAdaptableTest.java   |  6 +--
 .../ConfigurationResolverAnnotationClassTest.java  | 18 ++++----
 ...onfigurationResolverCustomPersistence2Test.java | 14 +++----
 ...ConfigurationResolverCustomPersistenceTest.java | 14 +++----
 .../impl/ConfigurationResolverValueMapTest.java    | 12 +++---
 .../caconfig/impl/ConfigurationTestUtils.java      |  6 +--
 .../impl/DummyConfigurationMetadataProvider.java   |  6 +--
 ...efaultConfigurationInheritanceStrategyTest.java | 28 ++++++-------
 ...tionClassConfigurationMetadataProviderTest.java | 32 +++++++--------
 .../impl/metadata/AnnotationClassParserTest.java   | 30 +++++++-------
 ...urationMetadataProviderMultiplexerImplTest.java | 14 +++----
 .../ConfigurationOverrideMultiplexerImplTest.java  |  8 ++--
 .../DummyConfigurationOverrideProvider.java        |  4 +-
 .../OsgiConfigurationOverrideProviderTest.java     |  2 +-
 .../caconfig/impl/override/OverrideItemTest.java   |  4 +-
 .../impl/override/OverrideStringParserTest.java    | 20 ++++-----
 ...mPropertyConfigurationOverrideProviderTest.java |  2 +-
 .../ConfigurationManagementSettingsImplTest.java   |  8 ++--
 .../CustomConfigurationPersistenceStrategy.java    | 18 ++++----
 .../CustomConfigurationPersistenceStrategy2.java   | 20 ++++-----
 .../impl/ConfigurationResourceTestUtils.java       |  6 +--
 .../resource/impl/util/ConfigNameUtilTest.java     |  2 +-
 .../impl/util/ContextResourceTestUtil.java         |  4 +-
 .../caconfig/resource/impl/util/MapUtilTest.java   |  2 +-
 .../util/PathEliminateDuplicatesIteratorTest.java  |  4 +-
 .../impl/util/PathParentExpandIteratorTest.java    |  4 +-
 91 files changed, 493 insertions(+), 484 deletions(-)

diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
index 37e87be..7daca90 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
@@ -57,7 +57,7 @@ public class ConfigurationBindingsValueProvider implements BindingsValuesProvide
      */
     public static final String BINDING_VARIABLE = "caconfig";
 
-    @ObjectClassDefinition(name = "Apache Sling Context-Aware Configuration HTL Binding Values Provider", 
+    @ObjectClassDefinition(name = "Apache Sling Context-Aware Configuration HTL Binding Values Provider",
             description = "Binds a script variable '" + BINDING_VARIABLE + "' to the HTL/Sightly scripting context.")
     static @interface Config {
 
@@ -91,23 +91,23 @@ public class ConfigurationBindingsValueProvider implements BindingsValuesProvide
         this.enabled = config.enabled();
     }
 
-    
+
     /**
      * This is a "virtual" containing configuration names as keys, and the underlying value maps/value map collections as values.
      * The map accesses only the data that is really required in a lazy fashion.
      */
     private static class ConfigMap implements Map<String, Object> {
-        
+
         private final Resource resource;
         private final ConfigurationMetadataProvider configMetadataProvider;
         private Set<String> configNamesCache;
         private Map<String,Object> valuesCache = new HashMap<>();
-        
+
         ConfigMap(Resource resource, ConfigurationMetadataProvider configMetadataProvider) {
             this.resource = resource;
             this.configMetadataProvider = configMetadataProvider;
         }
-        
+
         private Set<String> getConfigNames() {
             if (configNamesCache == null) {
                 configNamesCache = configMetadataProvider.getConfigurationNames();
@@ -141,7 +141,7 @@ public class ConfigurationBindingsValueProvider implements BindingsValuesProvide
             }
             return value;
         }
-        
+
         private Object getConfigValue(String configName) {
             @SuppressWarnings("null")
             ConfigurationBuilder configBuilder = resource.adaptTo(ConfigurationBuilder.class).name(configName);
@@ -152,7 +152,7 @@ public class ConfigurationBindingsValueProvider implements BindingsValuesProvide
                 return configBuilder.asValueMap();
             }
         }
-        
+
         private boolean isCollection(String configName) {
             ConfigurationMetadata configMetadata = configMetadataProvider.getConfigurationMetadata(configName);
             if (configMetadata != null) {
@@ -172,7 +172,7 @@ public class ConfigurationBindingsValueProvider implements BindingsValuesProvide
         public boolean containsValue(Object value) {
             throw new UnsupportedOperationException();
         }
-        
+
         @Override
         public Object put(String key, Object value) {
             throw new UnsupportedOperationException();
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationInheritanceStrategyMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationInheritanceStrategyMultiplexerImpl.java
index 2822bea..32a6184 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationInheritanceStrategyMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationInheritanceStrategyMultiplexerImpl.java
@@ -50,11 +50,11 @@ reference={
 public class ConfigurationInheritanceStrategyMultiplexerImpl implements ConfigurationInheritanceStrategyMultiplexer {
 
     private RankedServices<ConfigurationInheritanceStrategy> items = new RankedServices<>(Order.DESCENDING);
-    
+
     protected void bindConfigurationInheritanceStrategy(ConfigurationInheritanceStrategy item, Map<String, Object> props) {
         items.bind(item, props);
     }
-    
+
     protected void unbindConfigurationInheritanceStrategy(ConfigurationInheritanceStrategy item, Map<String, Object> props) {
         items.unbind(item, props);
     }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationNameConstants.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationNameConstants.java
index d085310..0df2c7d 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationNameConstants.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationNameConstants.java
@@ -33,5 +33,5 @@ public final class ConfigurationNameConstants {
      * Bundle header defining list of class names with all configuration annotation classes in this bundle.
      */
     public static final String CONFIGURATION_CLASSES_HEADER = "Sling-ContextAware-Configuration-Classes";
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationProxy.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationProxy.java
index 7a9cf93..f74ddfa 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationProxy.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationProxy.java
@@ -67,13 +67,13 @@ final class ConfigurationProxy {
         return (T)Proxy.newProxyInstance(clazz.getClassLoader(), new Class[] { clazz },
                 new CachingInvocationHandler(new DynamicProxyInvocationHandler(resource, childResolver)));
     }
-    
+
     /**
      * Resolves nested configurations.
      */
     public static interface ChildResolver {
         <T> T getChild(String configName, Class<T> clazz);
-        <T> Collection<T> getChildren(String configName, Class<T> clazz);        
+        <T> Collection<T> getChildren(String configName, Class<T> clazz);
     }
 
     /**
@@ -149,7 +149,7 @@ final class ConfigurationProxy {
         private boolean isValidType(Class<?> type) {
             return PropertyMetadata.SUPPORTED_TYPES.contains(type);
         }
-        
+
     }
 
     /**
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
index 7a8212a..590dbc5 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
@@ -56,22 +56,22 @@ public class ConfigurationResolverImpl implements ConfigurationResolver, Configu
     private ConfigurationOverrideMultiplexer configurationOverrideMultiplexer;
     @Reference
     private ConfigurationMetadataProviderMultiplexer configurationMetadataProvider;
-    
+
     @ObjectClassDefinition(name="Apache Sling Context-Aware Configuration Resolver",
             description="Getting context-aware configurations for a given resource context.")
     static @interface Config {
-    
+
         @AttributeDefinition(name = "Config bucket names",
                 description = "Additional bucket resource names to '" + CONFIGS_BUCKET_NAME + "' to store configuration resources. "
                 + "The names are used in the order defined, always starting with " + CONFIGS_BUCKET_NAME + ". "
                 + "Once a bucket resource with a matching name is found, that bucket is used and the following names are skipped. "
                 + "For writeback via ConfigurationManager always " + CONFIGS_BUCKET_NAME + " is used.")
         String[] configBucketNames();
-    
+
     }
-    
+
     private Collection<String> configBucketNames;
-    
+
     @Activate
     private void activate(Config config) {
         configBucketNames = new ArrayList<>();
@@ -80,7 +80,7 @@ public class ConfigurationResolverImpl implements ConfigurationResolver, Configu
             configBucketNames.addAll(Arrays.asList(config.configBucketNames()));
         }
     }
-    
+
     @Override
     public @NotNull ConfigurationBuilder get(@NotNull Resource resource) {
         return new ConfigurationBuilderImpl(resource, this,
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceWrapper.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceWrapper.java
index 938886c..4edd347 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceWrapper.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceWrapper.java
@@ -31,10 +31,10 @@ import org.jetbrains.annotations.NotNull;
  * Wrapper that returns an enhanced value map for the resource
  * providing a merged map with all inherited property values.
  * Unfortunately it's not possible to use {@link org.apache.sling.api.resource.ResourceWrapper} because when adapting
- * to a Sling Model the replace valuemap would not take effect but the original value map. 
+ * to a Sling Model the replace valuemap would not take effect but the original value map.
  */
 public final class ConfigurationResourceWrapper extends AbstractResource {
-    
+
     private final Resource resource;
     private final ValueMap props;
 
@@ -42,7 +42,7 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
         this.resource = unwrap(resource);
         this.props = props;
     }
-    
+
     private static Resource unwrap(Resource resource) {
         if (resource instanceof ConfigurationResourceWrapper) {
             return ((ConfigurationResourceWrapper)resource).resource;
@@ -51,7 +51,8 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
             return resource;
         }
     }
-    
+
+    @Override
     @SuppressWarnings({ "unchecked", "null" })
     public <AdapterType> AdapterType adaptTo(@NotNull Class<AdapterType> type) {
         if (type == ValueMap.class) {
@@ -60,6 +61,7 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
         return super.adaptTo(type);
     }
 
+    @Override
     public ValueMap getValueMap() {
         return props;
     }
@@ -68,22 +70,27 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
         return resource.getPath();
     }
 
+    @Override
     public String getName() {
         return resource.getName();
     }
 
+    @Override
     public Resource getParent() {
         return resource.getParent();
     }
 
+    @Override
     public Iterator<Resource> listChildren() {
         return resource.listChildren();
     }
 
+    @Override
     public Iterable<Resource> getChildren() {
         return resource.getChildren();
     }
 
+    @Override
     public Resource getChild(String relPath) {
         return resource.getChild(relPath);
     }
@@ -96,10 +103,12 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
         return resource.getResourceSuperType();
     }
 
+    @Override
     public boolean hasChildren() {
         return resource.hasChildren();
     }
 
+    @Override
     public boolean isResourceType(String resourceType) {
         return resource.isResourceType(resourceType);
     }
@@ -111,7 +120,7 @@ public final class ConfigurationResourceWrapper extends AbstractResource {
     public @NotNull ResourceResolver getResourceResolver() {
         return resource.getResourceResolver();
     }
-    
+
     /**
      * @return Returns a string representation of this wrapper consisting of the class'
      * simple name, the {@link #getResourceType() resource type} and
diff --git a/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java b/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
index 1845075..20c1a3e 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategy.java
@@ -45,27 +45,27 @@ public class DefaultConfigurationInheritanceStrategy implements ConfigurationInh
     @ObjectClassDefinition(name="Apache Sling Context-Aware Configuration Default Inheritance Strategy",
             description="Standardized resource inheritance for configurations.")
     public static @interface Config {
-    
+
         @AttributeDefinition(name="Enabled",
                 description = "Enable this configuration inheritance strategy.")
         boolean enabled() default true;
-        
+
         @AttributeDefinition(name="Config property inheritance property names",
                 description = "Additional property names to " + PROPERTY_CONFIG_PROPERTY_INHERIT + " to handle property inheritance. The names are used in the order defined, "
                      + "always starting with " + PROPERTY_CONFIG_PROPERTY_INHERIT + ". Once a property with a value is found, that value is used and the following property names are skipped.")
         String[] configPropertyInheritancePropertyNames();
-    
+
     }
 
     private Config config;
 
     private static final Logger log = LoggerFactory.getLogger(DefaultConfigurationInheritanceStrategy.class);
-    
+
     @Activate
     private void activate(final Config config) {
         this.config = config;
     }
-    
+
     @Override
     public Resource getResource(@NotNull Iterator<Resource> configResources) {
         if (!config.enabled()) {
@@ -81,12 +81,12 @@ public class DefaultConfigurationInheritanceStrategy implements ConfigurationInh
         Map<String,Object> mergedProps = getInheritedProperties(primary.getValueMap(), configResources);
         return new ConfigurationResourceWrapper(primary, new ValueMapDecorator(mergedProps));
     }
-    
+
     private boolean isPropertyInheritance(Resource resource) {
         return PropertyUtil.getBooleanValueAdditionalKeys(resource.getValueMap(), PROPERTY_CONFIG_PROPERTY_INHERIT,
                 config.configPropertyInheritancePropertyNames());
     }
-    
+
     private Map<String,Object> getInheritedProperties(Map<String,Object> parentProps, Iterator<Resource> inheritanceChain) {
         if (!inheritanceChain.hasNext()) {
             return parentProps;
diff --git a/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java b/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
index cf5571a..a7790a9 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
@@ -51,7 +51,7 @@ import org.slf4j.LoggerFactory;
 /**
  * The default persistence strategy is quite simple: directly use the configuration resources.
  * All existing properties are removed when new properties are stored in a singleton config resource.
- * All existing child resources are removed when a new configs are stored for collection config resources. 
+ * All existing child resources are removed when a new configs are stored for collection config resources.
  */
 @Component(service = ConfigurationPersistenceStrategy2.class)
 @Designate(ocd=DefaultConfigurationPersistenceStrategy.Config.class)
@@ -60,25 +60,25 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     @ObjectClassDefinition(name="Apache Sling Context-Aware Configuration Default Resource Persistence Strategy",
             description="Directly uses configuration resources for storing configuration data.")
     static @interface Config {
-        
+
         @AttributeDefinition(name="Enabled",
                       description = "Enable this configuration resource persistence strategy.")
         boolean enabled() default true;
 
     }
-    
+
     @Reference
     private ConfigurationManagementSettings configurationManagementSettings;
 
     private volatile Config config;
-    
+
     private static final Logger log = LoggerFactory.getLogger(DefaultConfigurationPersistenceStrategy.class);
-    
+
     @Activate
     private void activate(ComponentContext componentContext, Config config) {
-        this.config = config; 
+        this.config = config;
     }
-        
+
     @Override
     public Resource getResource(@NotNull Resource resource) {
         if (!config.enabled()) {
@@ -86,7 +86,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
         }
         return resource;
     }
-    
+
     @Override
     public Resource getCollectionParentResource(@NotNull Resource resource) {
         if (!config.enabled()) {
@@ -150,7 +150,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
         }
         return configName;
     }
-    
+
     @Override
     public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
             @NotNull ConfigurationPersistData data) {
@@ -168,15 +168,15 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
         if (!config.enabled()) {
             return false;
         }
-        Resource configResourceParent = getOrCreateResource(resourceResolver, configResourceCollectionParentPath, data.getProperties()); 
-        
+        Resource configResourceParent = getOrCreateResource(resourceResolver, configResourceCollectionParentPath, data.getProperties());
+
         // delete existing children and create new ones
         deleteChildrenNotInCollection(configResourceParent, data);
         for (ConfigurationPersistData item : data.getItems()) {
             String path = configResourceParent.getPath() + "/" + item.getCollectionItemName();
             getOrCreateResource(resourceResolver, path, item.getProperties());
         }
-        
+
         commit(resourceResolver, configResourceCollectionParentPath);
         return true;
     }
@@ -199,7 +199,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
         commit(resourceResolver, configResourcePath);
         return true;
     }
-    
+
     private Resource getOrCreateResource(ResourceResolver resourceResolver, String path, Map<String,Object> properties) {
         try {
             Resource resource = ResourceUtil.getOrCreateResource(resourceResolver, path, (String)null, (String)null, false);
@@ -214,7 +214,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
     }
 
     /**
-     * Delete children that are no longer contained in list of collection items. 
+     * Delete children that are no longer contained in list of collection items.
      * @param resource Parent resource
      * @param data List of collection items
      */
@@ -225,7 +225,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
         for (ConfigurationPersistData item : data.getItems()) {
             collectionItemNames.add(item.getCollectionItemName());
         }
-        
+
         try {
             for (Resource child : resource.getChildren()) {
                 if (!collectionItemNames.contains(child.getName())) {
@@ -238,7 +238,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
             throw convertPersistenceException("Unable to remove children from " + resource.getPath(), ex);
         }
     }
-    
+
     private void replaceProperties(Resource resource, Map<String,Object> properties) {
         if (log.isTraceEnabled()) {
             log.trace("! Store properties for resource {}: {}", resource.getPath(), MapUtil.traceOutput(properties));
@@ -255,7 +255,7 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
         }
         modValueMap.putAll(properties);
     }
-    
+
     private void commit(ResourceResolver resourceResolver, String relatedResourcePath) {
         try {
             resourceResolver.commit();
@@ -264,10 +264,10 @@ public class DefaultConfigurationPersistenceStrategy implements ConfigurationPer
             throw convertPersistenceException("Unable to persist configuration changes to " + relatedResourcePath, ex);
         }
     }
-    
+
     private ConfigurationPersistenceException convertPersistenceException(String message, PersistenceException ex) {
         if (StringUtils.equals(ex.getCause().getClass().getName(), "javax.jcr.AccessDeniedException")) {
-            // detect if commit failed due to read-only access to repository 
+            // detect if commit failed due to read-only access to repository
             return new ConfigurationPersistenceAccessDeniedException("No write access: " + message, ex);
         }
         return new ConfigurationPersistenceException(message, ex);
diff --git a/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java b/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java
index 28ccc14..dc92cc1 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProvider.java
@@ -40,19 +40,19 @@ import org.slf4j.LoggerFactory;
  */
 @Component(immediate = true, service = ConfigurationMetadataProvider.class)
 public class AnnotationClassConfigurationMetadataProvider implements ConfigurationMetadataProvider {
-    
+
     private BundleTracker<BundleConfigurationMapping> bundleTracker;
     private ConcurrentSkipListMap<Bundle,BundleConfigurationMapping> bundleMappings = new ConcurrentSkipListMap<>();
-    
+
     private static final Logger log = LoggerFactory.getLogger(AnnotationClassConfigurationMetadataProvider.class);
-    
+
     @Activate
     private void activate(BundleContext bundleContext) {
         ConfigClassBundleTackerCustomizer bundlerTrackerCustomizer = new ConfigClassBundleTackerCustomizer(this);
         bundleTracker = new BundleTracker<BundleConfigurationMapping>(bundleContext, Bundle.ACTIVE, bundlerTrackerCustomizer);
         bundleTracker.open();
     }
-    
+
     @Deactivate
     private void deactivate() {
         bundleTracker.close();
@@ -78,7 +78,7 @@ public class AnnotationClassConfigurationMetadataProvider implements Configurati
             return null;
         }
     }
-    
+
     /**
      * Get configuration mapping for given config name.
      * On the way check for config name mapping conflicts accross bundles and log a warning if found.
@@ -122,5 +122,5 @@ public class AnnotationClassConfigurationMetadataProvider implements Configurati
         log.debug("Remove bundle mapping: {}", bundleMapping);
         bundleMappings.remove(bundleMapping.getBundle());
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java b/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java
index 2048029..daff78d 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/metadata/BundleConfigurationMapping.java
@@ -33,13 +33,13 @@ import org.slf4j.LoggerFactory;
  * The configuration class metadata is not parsed on initialization, but lazily on first access.
  */
 class BundleConfigurationMapping {
-    
+
     private final Bundle bundle;
     private final String classNamesList;
     private final AtomicReference<Map<String,ConfigurationMapping>> configMappingsRef = new AtomicReference<>(null);
-    
+
     private static final Logger log = LoggerFactory.getLogger(BundleConfigurationMapping.class);
-    
+
     public BundleConfigurationMapping(Bundle bundle, String classNamesList) {
         this.bundle = bundle;
         this.classNamesList = classNamesList;
@@ -48,7 +48,7 @@ class BundleConfigurationMapping {
     public Bundle getBundle() {
         return bundle;
     }
-    
+
     /**
      * Thread-safe lazy initialization of configuration mappings.
      * @return Configuration mappings
@@ -60,7 +60,7 @@ class BundleConfigurationMapping {
             if (configMappingsRef.compareAndSet(null, configMappings)) {
                 return configMappings;
             }
-            else { 
+            else {
                 return configMappingsRef.get();
             }
         }
@@ -68,21 +68,21 @@ class BundleConfigurationMapping {
             return configMappings;
         }
     }
-    
+
     /**
      * Parse all annotation classes
      * @return
      */
     private Map<String,ConfigurationMapping> initializeConfigMappings() {
         Map<String,ConfigurationMapping> configMappings = new HashMap<>();
-        
+
         String[] classNames = StringUtils.split(StringUtils.deleteWhitespace(classNamesList), ",");
         for (String className : classNames) {
             try {
                 Class<?> configClass = bundle.loadClass(className);
                 if (AnnotationClassParser.isContextAwareConfig(configClass)) {
                     log.debug("{}: Add configuration class {}", bundle.getSymbolicName(), className);
-                    
+
                     ConfigurationMapping configMapping = new ConfigurationMapping(configClass);
                     if (!hasMappingConflict(configMapping, configMappings)) {
                         configMappings.put(configMapping.getConfigName(), configMapping);
@@ -96,10 +96,10 @@ class BundleConfigurationMapping {
                 log.warn("Unable to load class: " + className, ex);
             }
         }
-        
+
         return configMappings;
     }
-    
+
     private boolean hasMappingConflict(ConfigurationMapping newConfigMapping,
             Map<String,ConfigurationMapping> configMappings) {
         ConfigurationMapping conflictingConfigMapping = configMappings.get(newConfigMapping.getConfigName());
@@ -115,11 +115,11 @@ class BundleConfigurationMapping {
             return false;
         }
     }
-    
+
     public Set<String> getConfigurationNames() {
         return getConfigMappings().keySet();
     }
-    
+
     public ConfigurationMapping getConfigurationMapping(String configName) {
         return getConfigMappings().get(configName);
     }
@@ -128,5 +128,5 @@ class BundleConfigurationMapping {
     public String toString() {
         return "Classes from bundle '" + bundle.getSymbolicName() + "': " + classNamesList;
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigClassBundleTackerCustomizer.java b/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigClassBundleTackerCustomizer.java
index fd10638..81c0ef9 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigClassBundleTackerCustomizer.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigClassBundleTackerCustomizer.java
@@ -32,7 +32,7 @@ import org.osgi.util.tracker.BundleTrackerCustomizer;
 class ConfigClassBundleTackerCustomizer implements BundleTrackerCustomizer<BundleConfigurationMapping> {
 
     private final AnnotationClassConfigurationMetadataProvider metadataProvider;
-    
+
     public ConfigClassBundleTackerCustomizer(AnnotationClassConfigurationMetadataProvider metadataProvider) {
         this.metadataProvider = metadataProvider;
     }
@@ -51,7 +51,7 @@ class ConfigClassBundleTackerCustomizer implements BundleTrackerCustomizer<Bundl
 
     @Override
     public void modifiedBundle(Bundle bundle, BundleEvent event, BundleConfigurationMapping bundleMapping) {
-        // nothing to do   
+        // nothing to do
     }
 
     @Override
diff --git a/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMapping.java b/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMapping.java
index 13e8566..2bbaf81 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMapping.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMapping.java
@@ -27,16 +27,16 @@ class ConfigurationMapping {
 
     private final Class<?> configClass;
     private final ConfigurationMetadata configMetadata;
-    
+
     public ConfigurationMapping(Class<?> configClass) {
         this.configClass = configClass;
         this.configMetadata = AnnotationClassParser.buildConfigurationMetadata(configClass);
     }
-    
+
     public Class<?> getConfigClass() {
         return configClass;
     }
-    
+
     public String getConfigName() {
         return configMetadata.getName();
     }
@@ -44,5 +44,5 @@ class ConfigurationMapping {
     public ConfigurationMetadata getConfigMetadata() {
         return configMetadata;
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImpl.java
index dd76471..d273657 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImpl.java
@@ -46,13 +46,13 @@ reference={
                 policy=ReferencePolicy.DYNAMIC, policyOption=ReferencePolicyOption.GREEDY)
 })
 public class ConfigurationMetadataProviderMultiplexerImpl implements ConfigurationMetadataProviderMultiplexer {
-    
+
     private RankedServices<ConfigurationMetadataProvider> items = new RankedServices<>(Order.DESCENDING);
-        
+
     protected void bindConfigurationMetadataProvider(ConfigurationMetadataProvider configurationMetadataProvider, Map<String, Object> props) {
         items.bind(configurationMetadataProvider, props);
     }
-    
+
     protected void unbindConfigurationMetadataProvider(ConfigurationMetadataProvider configurationMetadataProvider, Map<String, Object> props) {
         items.unbind(configurationMetadataProvider, props);
     }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImpl.java
index c788e58..a384090 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImpl.java
@@ -63,17 +63,17 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
 
     private RankedServices<ConfigurationOverrideProvider> items = new RankedServices<>(Order.DESCENDING, this);
     private volatile Collection<OverrideItem> allOverrides = Collections.emptyList();
-    
+
     private static final Logger log = LoggerFactory.getLogger(ConfigurationOverrideMultiplexerImpl.class);
-    
+
     protected void bindConfigurationOverrideProvider(ConfigurationOverrideProvider item, Map<String, Object> props) {
         items.bind(item, props);
     }
-    
+
     protected void unbindConfigurationOverrideProvider(ConfigurationOverrideProvider item, Map<String, Object> props) {
         items.unbind(item, props);
     }
-    
+
     @Override
     public boolean isAllOverridden(@NotNull String contextPath, @NotNull String configName) {
         for (OverrideItem override : allOverrides) {
@@ -93,7 +93,7 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
         }
         boolean anyMatch = false;
         Map<String,Object> overrideProperties = new HashMap<>(properties);
-        
+
         for (OverrideItem override : allOverrides) {
             if (StringUtils.equals(configName, override.getConfigName()) && override.matchesPath(contextPath)) {
                 if (override.isAllProperties()) {
@@ -103,7 +103,7 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
                 anyMatch = true;
             }
         }
-        
+
         if (anyMatch) {
             return overrideProperties;
         }
@@ -111,7 +111,7 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
             return null;
         }
     }
-    
+
     @Override
     public Resource overrideProperties(@NotNull String contextPath, @NotNull String configName, @Nullable Resource configResource) {
         if (configResource == null) {
@@ -119,7 +119,7 @@ public class ConfigurationOverrideMultiplexerImpl implements ConfigurationOverri
         }
         return overrideProperties(contextPath, configName, configResource, configResource.getResourceResolver());
     }
-    
+
     @Override
     public Resource overrideProperties(@NotNull String contextPath, @NotNull String configName, @Nullable Resource configResource, @NotNull ResourceResolver resourceResolver) {
         Map<String,Object> overrideProperties = overrideProperties(contextPath, configName, configResource != null ?  configResource.getValueMap() : ValueMap.EMPTY);
diff --git a/src/main/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProvider.java b/src/main/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProvider.java
index eb18d11..b34683c 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProvider.java
@@ -61,7 +61,7 @@ public final class OsgiConfigurationOverrideProvider implements ConfigurationOve
         @AttributeDefinition(name = "Service Ranking",
                 description = "Priority of configuration override providers (higher = higher priority).")
         int service_ranking() default 100;
-        
+
         String webconsole_configurationFactory_nameHint() default "{description}, enabled={enabled}";
 
     }
@@ -81,5 +81,5 @@ public final class OsgiConfigurationOverrideProvider implements ConfigurationOve
     public @NotNull Collection<String> getOverrideStrings() {
         return overrideStrings;
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java b/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java
index 6ff8c31..2e2d7f2 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/override/OverrideItem.java
@@ -35,7 +35,7 @@ class OverrideItem {
     private final String configName;
     private final Map<String,Object> properties;
     private final boolean allProperties;
-    
+
     public OverrideItem(String path, String configName,
             Map<String, Object> properties, boolean allProperties) {
         this.path = path;
@@ -44,7 +44,7 @@ class OverrideItem {
         this.properties = properties;
         this.allProperties = allProperties;
     }
-    
+
     private static Pattern toPathPattern(String path) {
         if (StringUtils.isBlank(path)) {
             return null;
@@ -58,7 +58,7 @@ class OverrideItem {
     public String getPath() {
         return path;
     }
-    
+
     /**
      * @param path Path to check
      * @return true if path matches
@@ -98,5 +98,5 @@ class OverrideItem {
     public String toString() {
         return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java b/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java
index 57dc0b9..bccf14a 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/override/OverrideStringParser.java
@@ -58,17 +58,17 @@ import org.slf4j.LoggerFactory;
  * </ul>
  */
 class OverrideStringParser {
-    
+
     private static final Logger log = LoggerFactory.getLogger(OverrideStringParser.class);
-    
+
     private static final Pattern OVERRIDE_PATTERN = Pattern.compile("^(\\[([^\\[\\]=]+)\\])?([^\\[\\]=]+)=(.*)$");
-    
+
     private static final JsonReaderFactory JSON_READER_FACTORY = Json.createReaderFactory(Collections.<String,Object>emptyMap());
-    
+
     private OverrideStringParser() {
         // static method sonly
     }
-    
+
     /**
      * Parses a list of override strings from a override provider.
      * @param overrideStrings Override strings
@@ -76,21 +76,21 @@ class OverrideStringParser {
      */
     public static Collection<OverrideItem> parse(Collection<String> overrideStrings) {
         List<OverrideItem> result = new ArrayList<>();
-        
+
         for (String overrideString : overrideStrings) {
-            
+
             // check if override generic pattern is matched
             Matcher matcher = OVERRIDE_PATTERN.matcher(StringUtils.defaultString(overrideString));
             if (!matcher.matches()) {
                 log.warn("Ignore config override string - invalid syntax: {}", overrideString);
                 continue;
             }
-            
+
             // get single parts
             String path = StringUtils.trim(matcher.group(2));
             String configName = StringUtils.trim(matcher.group(3));
             String value = StringUtils.trim(StringUtils.defaultString(matcher.group(4)));
-            
+
             OverrideItem item;
             try {
                 // check if value is JSON = defines whole parameter map for a config name
@@ -115,12 +115,12 @@ class OverrideStringParser {
                 log.warn("Ignore config override string - invalid JSON syntax ({}): {}", ex.getMessage(), overrideString);
                 continue;
             }
-            
+
             // validate item
             if (!isValid(item, overrideString)) {
                 continue;
             }
-            
+
             // if item does not contain a full property set try to merge with existing one
             if (!item.isAllProperties()) {
                 boolean foundMatchingItem = false;
@@ -137,14 +137,14 @@ class OverrideStringParser {
                     continue;
                 }
             }
-            
+
             // add item to result
             result.add(item);
         }
-        
+
         return result;
     }
-    
+
     /**
      * Try to convert value to JSON object
      * @param value Value string
@@ -163,7 +163,7 @@ class OverrideStringParser {
             return null;
         }
     }
-    
+
     /**
      * Convert JSON object to map.
      * @param json JSON object
@@ -178,7 +178,7 @@ class OverrideStringParser {
         }
         return props;
     }
-    
+
     /**
      * Convert single JSON-conformant value object
      * @param jsonValue JSON value
@@ -190,7 +190,7 @@ class OverrideStringParser {
         JsonObject json = toJson(jsonString);
         return convertJsonValue(json.get("value"));
     }
-    
+
     private static Object convertJsonValue(JsonValue jsonValue) {
         switch (jsonValue.getValueType()) {
         case STRING:
@@ -215,9 +215,9 @@ class OverrideStringParser {
             throw new RuntimeException("Unexpected JSON value type: " + jsonValue.getValueType() + ": " + jsonValue);
         }
     }
-    
+
     private static Object convertJsonArray(JsonArray jsonArray) {
-        if (jsonArray.size() > 0) {             
+        if (jsonArray.size() > 0) {
             Object firstValue = convertJsonValue(jsonArray.get(0));
             if (firstValue != null) {
                 Class firstType = firstValue.getClass();
@@ -230,7 +230,7 @@ class OverrideStringParser {
         }
         return new String[0];
     }
-    
+
     /**
      * Validate override item and it's properties map.
      * @param item Override item
@@ -260,7 +260,7 @@ class OverrideStringParser {
         }
         return true;
     }
-    
+
     /**
      * Validate if the given object is not null, and the type is supported for configuration values.
      * @param value Value
diff --git a/src/main/java/org/apache/sling/caconfig/management/ConfigurationCollectionData.java b/src/main/java/org/apache/sling/caconfig/management/ConfigurationCollectionData.java
index 331d00f..12a3037 100644
--- a/src/main/java/org/apache/sling/caconfig/management/ConfigurationCollectionData.java
+++ b/src/main/java/org/apache/sling/caconfig/management/ConfigurationCollectionData.java
@@ -41,15 +41,15 @@ public interface ConfigurationCollectionData {
      * @return Configuration collection items
      */
     @NotNull Collection<ConfigurationData> getItems();
-    
+
     /**
      * @return Path of the configuration collection resource parent path or null if it cannot be determined.
      */
     @Nullable String getResourcePath();
-    
+
     /**
      * @return Properties for the configuration collection itself. Does not contain configuration data, but control data e.g. for enabling collection inheritance.
      */
     @NotNull Map<String, Object> getProperties();
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java b/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java
index 75ff5c0..48c2dca 100644
--- a/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java
+++ b/src/main/java/org/apache/sling/caconfig/management/ConfigurationData.java
@@ -30,7 +30,7 @@ import org.osgi.annotation.versioning.ProviderType;
  */
 @ProviderType
 public interface ConfigurationData {
-    
+
     /**
      * Get configuration name.
      * @return Configuration name
@@ -79,10 +79,10 @@ public interface ConfigurationData {
      * @return true if the whole configuration is inherited.
      */
     boolean isInherited();
-    
+
     /**
      * @return true if the whole configuration is overridden by an configuration override provider.
      */
     boolean isOverridden();
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/ConfigurationManagementSettings.java b/src/main/java/org/apache/sling/caconfig/management/ConfigurationManagementSettings.java
index 0b865cf..64ac6fe 100644
--- a/src/main/java/org/apache/sling/caconfig/management/ConfigurationManagementSettings.java
+++ b/src/main/java/org/apache/sling/caconfig/management/ConfigurationManagementSettings.java
@@ -28,10 +28,10 @@ import org.osgi.annotation.versioning.ProviderType;
  */
 @ProviderType
 public interface ConfigurationManagementSettings {
-    
+
     /**
      * Detects property names that should be ignored/filtered out when reading or writing configuration data properties.
-     * @param propertyNames Existing property names to evaluate. 
+     * @param propertyNames Existing property names to evaluate.
      * @return Property names that should be ignored/filtered out from the given set of property names.
      */
     Set<String> getIgnoredPropertyNames(Set<String> propertyNames);
@@ -40,5 +40,5 @@ public interface ConfigurationManagementSettings {
      * @return Config collection parent properties resource names.
      */
     Collection<String> getConfigCollectionPropertiesResourceNames();
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java b/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java
index 518b2c5..3764b75 100644
--- a/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java
+++ b/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java
@@ -51,7 +51,7 @@ public interface ConfigurationManager {
      * @return Configuration data collection. Is empty when no configuration resources found.
      */
     @NotNull ConfigurationCollectionData getConfigurationCollection(@NotNull Resource resource, @NotNull String configName);
-    
+
     /**
      * Write configuration data to repository using the inner-most context path as reference.
      * @param resource Context resource
@@ -69,7 +69,7 @@ public interface ConfigurationManager {
      */
     void persistConfigurationCollection(@NotNull Resource resource, @NotNull String configName,
             @NotNull ConfigurationCollectionPersistData data);
-    
+
     /**
      * Creates a new empty configuration data item for a configuration data collection for the given configuration name.
      * @param resource Context resource
@@ -84,7 +84,7 @@ public interface ConfigurationManager {
      * @param configName Configuration name
      */
     void deleteConfiguration(@NotNull Resource resource, @NotNull String configName);
-    
+
     /**
      * Get all configuration names.
      * The results of all configuration metadata provider implementations are merged.
@@ -98,7 +98,7 @@ public interface ConfigurationManager {
      * @return Configuration metadata or null if none exists for the given name.
      */
     @Nullable ConfigurationMetadata getConfigurationMetadata(@NotNull String configName);
-    
+
     /**
      * Rewrite given resource path or configuration name according to current persistence strategies.
      * @param configResourcePath Resource path or config name
@@ -107,5 +107,5 @@ public interface ConfigurationManager {
      */
     @Deprecated
     @Nullable String getPersistenceResourcePath(@NotNull String configResourcePath);
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/ConfigurationResourceResolverConfig.java b/src/main/java/org/apache/sling/caconfig/management/ConfigurationResourceResolverConfig.java
index fea2124..2c80b28 100644
--- a/src/main/java/org/apache/sling/caconfig/management/ConfigurationResourceResolverConfig.java
+++ b/src/main/java/org/apache/sling/caconfig/management/ConfigurationResourceResolverConfig.java
@@ -34,5 +34,5 @@ public interface ConfigurationResourceResolverConfig {
      * @return Bucket names
      */
     @NotNull Collection<String> configBucketNames();
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/ContextPathStrategyMultiplexer.java b/src/main/java/org/apache/sling/caconfig/management/ContextPathStrategyMultiplexer.java
index c1fe8d0..f55872e 100644
--- a/src/main/java/org/apache/sling/caconfig/management/ContextPathStrategyMultiplexer.java
+++ b/src/main/java/org/apache/sling/caconfig/management/ContextPathStrategyMultiplexer.java
@@ -29,5 +29,5 @@ import org.apache.sling.caconfig.resource.spi.ContextPathStrategy;
 public interface ContextPathStrategyMultiplexer extends ContextPathStrategy {
 
     // inherits all methods from {@link ContextPathStrategy}
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/ValueInfo.java b/src/main/java/org/apache/sling/caconfig/management/ValueInfo.java
index 8bf6307..b01bed3 100644
--- a/src/main/java/org/apache/sling/caconfig/management/ValueInfo.java
+++ b/src/main/java/org/apache/sling/caconfig/management/ValueInfo.java
@@ -35,28 +35,28 @@ public interface ValueInfo<T> {
      * @return Property name.
      */
     @NotNull String getName();
-    
+
     /**
      * Property metadata.
      * @return Property metadata. Null if no metadata exists.
      */
     @Nullable PropertyMetadata<T> getPropertyMetadata();
-    
+
     /**
      * Get value stored for the current context path. No inherited value. No default value.
      * @return Value
      */
     @Nullable T getValue();
-    
+
     /**
      * Get value storedf or the current context path, or inherited from upper levels, or the default value.
      * @return Value
      */
     @Nullable T getEffectiveValue();
-    
+
     /**
      * Get the path of the configuration resource the value is stored in.
-     * @return Resource path or null if no resource associated. 
+     * @return Resource path or null if no resource associated.
      */
     @Nullable String getConfigSourcePath();
 
@@ -64,15 +64,15 @@ public interface ValueInfo<T> {
      * @return true if no value is defined but a default value is returned.
      */
     boolean isDefault();
-    
+
     /**
      * @return true if the value is not defined for the current context path but inherited from upper levels.
      */
     boolean isInherited();
-    
+
     /**
      * @return true if the value is overridden by an configuration override provider.
      */
     boolean isOverridden();
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationCollectionDataImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationCollectionDataImpl.java
index ce1f5f5..82ba459 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationCollectionDataImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationCollectionDataImpl.java
@@ -29,14 +29,14 @@ import org.apache.sling.caconfig.resource.impl.def.ConfigurationResourceNameCons
 import org.jetbrains.annotations.NotNull;
 
 final class ConfigurationCollectionDataImpl implements ConfigurationCollectionData {
-    
+
     private final String configName;
     private final Collection<ConfigurationData> items;
     private final String resourcePath;
     private final Map<String,Object> properties;
     private final ConfigurationManagementSettings configurationManagementSettings;
     private Map<String,Object> filteredPropertiesCache;
-    
+
     public ConfigurationCollectionDataImpl(String configName, Collection<ConfigurationData> items,
             String resourcePath, Map<String, Object> properties,
             ConfigurationManagementSettings configurationManagementSettings) {
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
index 6d43dcf..79e9a56 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationDataImpl.java
@@ -46,7 +46,7 @@ import org.apache.sling.caconfig.spi.metadata.PropertyMetadata;
 import org.jetbrains.annotations.NotNull;
 
 final class ConfigurationDataImpl implements ConfigurationData {
-    
+
     private final ConfigurationMetadata configMetadata;
     private final Resource resolvedConfigurationResource;
     private final Resource writebackConfigurationResource;
@@ -60,11 +60,11 @@ final class ConfigurationDataImpl implements ConfigurationData {
     private final boolean configResourceCollection;
     private final String collectionItemName;
     private final boolean isAllOverridden;
-    
+
     private Set<String> propertyNamesCache;
     private ValueMap valuesCache;
     private ValueMap effectiveValuesCache;
-    
+
     public ConfigurationDataImpl(ConfigurationMetadata configMetadata,
             Resource resolvedConfigurationResource, Resource writebackConfigurationResource,
             Iterator<Resource> configurationResourceInheritanceChain,
@@ -105,7 +105,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
                 configurationPersistenceStrategy,
                 configResourceCollection, null);
     }
-    
+
     @Override
     public @NotNull String getConfigName() {
         return configName;
@@ -176,7 +176,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
         }
         return effectiveValuesCache;
     }
-        
+
     private void resolveNestedConfigs(Map<String,Object> props) {
         if (configMetadata == null) {
             return;
@@ -240,7 +240,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
                 configurationOverrideMultiplexer,
                 isAllOverridden);
     }
-    
+
     private Class<?> primitiveToWrapper(Class<?> type) {
         if (type.isArray()) {
             return Array.newInstance(ClassUtils.primitiveToWrapper(type.getComponentType()), 0).getClass();
@@ -249,7 +249,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
             return ClassUtils.primitiveToWrapper(type);
         }
     }
-    
+
     private PropertyMetadata<?> getPropertyMetadata(String propertyName) {
         if (configMetadata == null) {
             return null;
@@ -272,7 +272,7 @@ final class ConfigurationDataImpl implements ConfigurationData {
         }
         return false;
     }
-    
+
     @Override
     public boolean isOverridden() {
         return isAllOverridden;
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImpl.java
index 3124d85..b73a73a 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImpl.java
@@ -42,11 +42,11 @@ import org.slf4j.LoggerFactory;
 @Component(service = ConfigurationManagementSettings.class)
 @Designate(ocd=ConfigurationManagementSettingsImpl.Config.class)
 public class ConfigurationManagementSettingsImpl implements ConfigurationManagementSettings {
-    
+
     @ObjectClassDefinition(name="Apache Sling Context-Aware Configuration Management Settings",
             description="Management settings for reading and writing configurations.")
     static @interface Config {
-        
+
         @AttributeDefinition(name="Ignore Property Regex",
                       description = "List of regular expressions with property names that should be ignored when reading or writing configuration data properties.")
         String[] ignorePropertyNameRegex() default {
@@ -58,15 +58,15 @@ public class ConfigurationManagementSettingsImpl implements ConfigurationManagem
                 description = "Names of resource to try to look up configuration collection properties in. If list is empty only the collection parent resource is checked." +
                               " If the list is not empty than only those listed resources are used for look up. If you want to include the collection parent resource you can use a dot for the value.")
         String[] configCollectionPropertiesResourceNames();
-        
+
     }
-    
+
     private static final Logger log = LoggerFactory.getLogger(ConfigurationManagementSettingsImpl.class);
-    
+
     private Pattern[] ignorePropertyNameRegex;
     private Collection<String> configCollectionPropertiesResourceNames;
-    
-    
+
+
     @Activate
     private void activate(Config config) {
         List<Pattern> patterns = new ArrayList<>();
@@ -78,7 +78,7 @@ public class ConfigurationManagementSettingsImpl implements ConfigurationManagem
                log.warn("Ignoring invalid regex pattern: " + patternString, ex);
            }
         }
-        
+
         this.ignorePropertyNameRegex = patterns.toArray(new Pattern[patterns.size()]);
 
         String[] configCollectionPropertiesResourceNames = config.configCollectionPropertiesResourceNames();
@@ -87,7 +87,7 @@ public class ConfigurationManagementSettingsImpl implements ConfigurationManagem
         }
         this.configCollectionPropertiesResourceNames = Collections.unmodifiableList(Arrays.asList(configCollectionPropertiesResourceNames));
     }
-    
+
     @Override
     public Set<String> getIgnoredPropertyNames(Set<String> propertyNames) {
         Set<String> ignoredPropertyNames = new HashSet<>();
@@ -106,5 +106,5 @@ public class ConfigurationManagementSettingsImpl implements ConfigurationManagem
     public Collection<String> getConfigCollectionPropertiesResourceNames() {
         return configCollectionPropertiesResourceNames;
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
index fc46b7c..2c46491 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
@@ -61,7 +61,7 @@ import org.slf4j.LoggerFactory;
 
 @Component(service = ConfigurationManager.class)
 public class ConfigurationManagerImpl implements ConfigurationManager {
-    
+
     @Reference
     private ConfigurationResourceResolvingStrategyMultiplexer configurationResourceResolvingStrategy;
     @Reference
@@ -78,7 +78,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     private ConfigurationManagementSettings configurationManagementSettings;
 
     private static final Logger log = LoggerFactory.getLogger(ConfigurationManagerImpl.class);
-    
+
     @SuppressWarnings("unchecked")
     @Override
     public ConfigurationData getConfiguration(@NotNull Resource resource, @NotNull String configName) {
@@ -88,17 +88,17 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
         }
         ConfigurationMetadata configMetadata = getConfigurationMetadata(configName);
         Resource configResource = null;
-        
+
         Iterator<Resource> configResourceInheritanceChain = configurationResourceResolvingStrategy
                 .getResourceInheritanceChain(resource, configurationResourceResolverConfig.configBucketNames(), configName);
-        
+
         if (configResourceInheritanceChain != null) {
             ResettableIterator resettableConfigResourceInheritanceChain = new ListIteratorWrapper(configResourceInheritanceChain);
             configResource = applyPersistenceAndInheritance(resource.getPath(), configName, resettableConfigResourceInheritanceChain, false, resource.getResourceResolver());
             if (configResource != null) {
                 // get writeback resource for "reverse inheritance detection"
                 Resource writebackConfigResource = null;
-                
+
                 String writebackConfigResourcePath = null;
                 for (String configBucketName : configurationResourceResolverConfig.configBucketNames()) {
                     writebackConfigResourcePath = configurationResourceResolvingStrategy.getResourcePath(resource, configBucketName, configName);
@@ -110,7 +110,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
                         }
                     }
                 }
-                
+
                 if (log.isTraceEnabled()) {
                     log.trace("+ Found config resource for context path " + resource.getPath() + ": " + configResource.getPath() + " "
                             + MapUtil.traceOutput(configResource.getValueMap()) + ", "
@@ -172,7 +172,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
             if (configResource != null) {
                 // get writeback resource for "reverse inheritance detection"
                 Resource writebackConfigResource = null;
-                
+
                 String writebackConfigResourcePath = null;
                 for (String configBucketName : configurationResourceResolverConfig.configBucketNames()) {
                     writebackConfigResourceCollectionParentPath = configurationResourceResolvingStrategy.getResourceCollectionParentPath(resource, configBucketName, configName);
@@ -186,7 +186,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
                         }
                     }
                 }
-                
+
                 if (log.isTraceEnabled()) {
                     log.trace("+ Found config resource for context path " + resource.getPath() + ": " + configResource.getPath() + " "
                             + MapUtil.traceOutput(configResource.getValueMap()) + ", "
@@ -209,7 +209,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
                 }
             }
         }
-        
+
         // get properties of parent resource of the current level
         Map<String,Object> resourceCollectionParentProps = null;
         if (writebackConfigResourceCollectionParentPath != null) {
@@ -224,7 +224,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
                 }
             }
         }
-        
+
         return new ConfigurationCollectionDataImpl(
                 configName,
                 configData,
@@ -233,7 +233,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
                 configurationManagementSettings
                 );
     }
-    
+
     @SuppressWarnings("unchecked")
     private Iterator<Resource> applyPersistence(final Iterator<Resource> configResourceInheritanceChain, final boolean isCollection) {
         if (configResourceInheritanceChain == null) {
@@ -258,13 +258,13 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
         if (configResourceInheritanceChain == null) {
             return null;
         }
-        
+
         // apply configuration persistence transformation
         Iterator<Resource> transformedConfigResources = applyPersistence(configResourceInheritanceChain, isCollection);
-        
+
         // apply resource inheritance
         Resource configResource = configurationInheritanceStrategy.getResource(transformedConfigResources);
-        
+
         // apply overrides
         return configurationOverrideMultiplexer.overrideProperties(contextPath, configName, configResource, resourceResolver);
     }
@@ -314,7 +314,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
     @Override
     public void deleteConfiguration(@NotNull Resource resource, @NotNull String configName) {
         ConfigNameUtil.ensureValidConfigName(configName);
-        
+
         // try to delete from all config bucket names
         boolean foundAnyPath = false;
         for (String configBucketName : configurationResourceResolverConfig.configBucketNames()) {
@@ -333,7 +333,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
             throw new ConfigurationPersistenceException("Unable to delete configuration: Configuration resolving strategy returned no path.");
         }
     }
-    
+
     @Override
     public @NotNull SortedSet<String> getConfigurationNames() {
         return configurationMetadataProvider.getConfigurationNames();
@@ -347,7 +347,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
             log.trace("+ Configuration metadata found for: {}", configName);
             return metadata;
         }
-        
+
         // if no metadata found with direct match try to resolve nested configuration metadata references
         for (String partialConfigName : ConfigNameUtil.getAllPartialConfigNameVariations(configName)) {
             ConfigurationMetadata partialConfigMetadata = getConfigurationMetadata(partialConfigName);
@@ -363,10 +363,10 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
         log.trace("- No configuration metadata found for: {}", configName);
         return null;
     }
-    
+
     private ConfigurationMetadata getNestedConfigurationMetadata(ConfigurationMetadata configMetadata, String configName, String partialConfigName) {
         if (StringUtils.startsWith(configName, partialConfigName + "/")) {
-            
+
             // depending on different persistence strategies config names can be transformed differently - try all combinations here
             Set<String> prefixesToRemove = new LinkedHashSet<>();
             if (configMetadata.isCollection()) {
@@ -382,7 +382,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
                     prefixesToRemove.add(configNameItem + "/");
                 }
             }
-            
+
             for (String prefixToRemove : prefixesToRemove) {
                 String remainingConfigName = StringUtils.substringAfter(configName, prefixToRemove);
                 // try direct match
@@ -404,7 +404,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
         }
         return null;
     }
-    
+
     private ConfigurationMetadata getNestedConfigurationMetadataFromProperty(ConfigurationMetadata partialConfigMetadata, String configName) {
         for (PropertyMetadata<?> propertyMetadata : partialConfigMetadata.getPropertyMetadata().values()) {
             if (propertyMetadata.isNestedConfiguration()) {
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImpl.java
index bdae9a8..a539bff 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerImpl.java
@@ -51,20 +51,20 @@ reference={
                 policy=ReferencePolicy.DYNAMIC, policyOption=ReferencePolicyOption.GREEDY)
 })
 public class ConfigurationPersistenceStrategyMultiplexerImpl implements ConfigurationPersistenceStrategyMultiplexer {
-    
+
     private RankedServices<ConfigurationPersistenceStrategy2> items = new RankedServices<>(Order.DESCENDING);
-        
+
     protected void bindConfigurationPersistenceStrategy(ConfigurationPersistenceStrategy2 configurationPersistenceStrategy, Map<String, Object> props) {
         items.bind(configurationPersistenceStrategy, props);
     }
-    
+
     protected void unbindConfigurationPersistenceStrategy(ConfigurationPersistenceStrategy2 configurationPersistenceStrategy, Map<String, Object> props) {
         items.unbind(configurationPersistenceStrategy, props);
     }
 
     /**
      * Transform the configuration resource by the first implementation that has an answer.
-     */    
+     */
     @Override
     public Resource getResource(@NotNull Resource resource) {
         for (ConfigurationPersistenceStrategy2 item : items) {
@@ -96,8 +96,8 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
             }
         }
         return null;
-    }    
-        
+    }
+
     @Override
     public String getResourcePath(@NotNull String resourcePath) {
         for (ConfigurationPersistenceStrategy2 item : items) {
@@ -163,7 +163,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
         }
         return null;
     }
-    
+
     @Override
     public @NotNull Collection<String> getAllConfigNames(@NotNull String configName) {
         Set<String> configNames = new LinkedHashSet<>();
@@ -199,7 +199,7 @@ public class ConfigurationPersistenceStrategyMultiplexerImpl implements Configur
         }
         return configNames;
     }
-        
+
     /**
      * Persist configuration data with the first implementation that accepts it.
      */
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImpl.java
index f75c7b2..bbec141 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/ContextPathStrategyMultiplexerImpl.java
@@ -52,13 +52,13 @@ reference={
                 policy=ReferencePolicy.DYNAMIC, policyOption=ReferencePolicyOption.GREEDY)
 })
 public class ContextPathStrategyMultiplexerImpl implements ContextPathStrategyMultiplexer, org.apache.sling.caconfig.management.ContextPathStrategyMultiplexer {
-    
+
     private RankedServices<ContextPathStrategy> items = new RankedServices<>(Order.DESCENDING);
-        
+
     protected void bindContextPathStrategy(ContextPathStrategy contextPathStrategy, Map<String, Object> props) {
         items.bind(contextPathStrategy, props);
     }
-    
+
     protected void unbindContextPathStrategy(ContextPathStrategy contextPathStrategy, Map<String, Object> props) {
         items.unbind(contextPathStrategy, props);
     }
@@ -77,7 +77,7 @@ public class ContextPathStrategyMultiplexerImpl implements ContextPathStrategyMu
         }
         return mergeResults(allResults);
     }
-    
+
     /**
      * Get all results from all registered context path strategies.
      * @param resource Start resource
@@ -93,7 +93,7 @@ public class ContextPathStrategyMultiplexerImpl implements ContextPathStrategyMu
         }
         return results;
     }
-    
+
     /**
      * Merges results from different context path strategy implementations.
      * Eliminating of duplicates and sorting is done solely based on path length.
@@ -107,5 +107,5 @@ public class ContextPathStrategyMultiplexerImpl implements ContextPathStrategyMu
                 new ResourcePathCollatingIterator(allResults)
         );
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/PropertiesFilterUtil.java b/src/main/java/org/apache/sling/caconfig/management/impl/PropertiesFilterUtil.java
index 268ee14..f488256 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/PropertiesFilterUtil.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/PropertiesFilterUtil.java
@@ -42,5 +42,5 @@ public final class PropertiesFilterUtil {
             props.remove(propertyName);
         }
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationMetadataPrinter.java b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationMetadataPrinter.java
index 04a7587..536dcde 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationMetadataPrinter.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationMetadataPrinter.java
@@ -35,7 +35,7 @@ class ConfigurationMetadataPrinter implements ServiceConfigurationPrinter<Config
     @Override
     public void printConfiguration(PrintWriter pw, ServiceReference<ConfigurationMetadataProvider> serviceReference, BundleContext bundleContext) {
         ConfigurationMetadataProvider service = bundleContext.getService(serviceReference);
-        
+
         for (String configName : service.getConfigurationNames()) {
             ConfigurationMetadata metadata = service.getConfigurationMetadata(configName);
             if (metadata == null) {
@@ -44,28 +44,28 @@ class ConfigurationMetadataPrinter implements ServiceConfigurationPrinter<Config
             pw.print(INDENT);
             pw.print(BULLET);
             pw.println(metadata.getName());
-            
+
             for (PropertyMetadata<?> property : metadata.getPropertyMetadata().values()) {
                 pw.print(INDENT_2);
                 pw.print(BULLET);
                 pw.print(property.getName());
-                
+
                 pw.print("(");
                 pw.print(property.getType().getSimpleName());
                 pw.print(")");
-                
+
                 if (property.getDefaultValue() != null) {
                     pw.print(" = ");
                     printValue(pw, property.getDefaultValue());
                 }
-                
+
                 pw.println();
             }
         }
-        
+
         bundleContext.ungetService(serviceReference);
     }
-    
+
     private void printValue(PrintWriter pw, Object value) {
         if (value.getClass().isArray()) {
             for (int i=0; i<Array.getLength(value); i++) {
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationOverridePrinter.java b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationOverridePrinter.java
index 1412edb..594ed4a 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationOverridePrinter.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationOverridePrinter.java
@@ -33,7 +33,7 @@ class ConfigurationOverridePrinter implements ServiceConfigurationPrinter<Config
     @Override
     public void printConfiguration(PrintWriter pw, ServiceReference<ConfigurationOverrideProvider> serviceReference, BundleContext bundleContext) {
         ConfigurationOverrideProvider service = bundleContext.getService(serviceReference);
-        
+
         for (String overrideString : service.getOverrideStrings()) {
             if (StringUtils.isBlank(overrideString)) {
                 continue;
@@ -42,8 +42,8 @@ class ConfigurationOverridePrinter implements ServiceConfigurationPrinter<Config
             pw.print(BULLET);
             pw.println(overrideString);
         }
-        
+
         bundleContext.ungetService(serviceReference);
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationPersistenceStrategyPrinter.java b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationPersistenceStrategyPrinter.java
index be18aad..9f26088 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationPersistenceStrategyPrinter.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationPersistenceStrategyPrinter.java
@@ -42,5 +42,5 @@ class ConfigurationPersistenceStrategyPrinter implements ServiceConfigurationPri
         }
         bundleContext.ungetService(serviceReference);
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationWebConsolePlugin.java b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationWebConsolePlugin.java
index 360b5f5..4d6738e 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationWebConsolePlugin.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/console/ConfigurationWebConsolePlugin.java
@@ -65,9 +65,9 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
 
     public static final String LABEL = "slingcaconfig";
     public static final String TITLE = "Context-Aware Configuration";
-    
+
     private static final Logger log = LoggerFactory.getLogger(ConfigurationWebConsolePlugin.class);
-    
+
     @Reference(policyOption = ReferencePolicyOption.GREEDY)
     private ResourceResolverFactory resolverFactory;
 
@@ -136,7 +136,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
             pw.println("<form method='get'>");
 
             tableStart(pw, "Test Configuration Resolution", 2);
-            
+
             String alertMessage = null;
             if (path != null) {
                 if (resolver == null) {
@@ -147,16 +147,16 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
                 }
             }
             textField(pw, "Content Path", "path", path, alertMessage);
-            
+
             tableRows(pw);
             selectField(pw, "Config Name", "configName", configName, configurationManager.getConfigurationNames());
-            
+
             tableRows(pw);
             textField(pw, "Other Config Name", "configNameOther", configNameOther);
-            
+
             tableRows(pw);
             checkboxField(pw, "Resource collection", "resourceCollection", resourceCollection);
-            
+
             tableRows(pw);
             pw.println("<td></td>");
             pw.println("<td><input type='submit' value='Resolve'/></td>");
@@ -167,7 +167,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
             pw.println("<br/>");
 
             if (contentResource != null && configName != null) {
-                
+
                 // context paths
                 Iterator<ContextResource> contextResources = contextPathStrategyMultiplexer.findContextResources(contentResource);
                 tableStart(pw, "Context paths", 3);
@@ -181,10 +181,10 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
                     pw.println("<td>" + xss.encodeForHTML(contextResource.getConfigRef()) + "</td>");
                     pw.println("<td>" + contextResource.getServiceRanking() + "</td>");
                 }
-                tableEnd(pw);                
+                tableEnd(pw);
 
                 pw.println("<br/>");
-                
+
                 // resolve configuration
                 Collection<ConfigurationData> configDatas;
                 if (resourceCollection) {
@@ -199,16 +199,16 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
                         configDatas = Collections.emptyList();
                     }
                 }
-                
+
                 tableStart(pw, "Result", 6);
-                
+
                 if (configDatas.size() == 0) {
                     pw.println("<td colspan='6'>");
                     alertDiv(pw, "No matching item found.");
                     pw.println("<br/>&nbsp;</td>");
                 }
                 else {
-                
+
                     pw.println("<th>Property</th>");
                     pw.println("<th>Effective Value</th>");
                     pw.println("<th>Value</th>");
@@ -221,7 +221,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
                         pw.println("<td colspan='6' style='background-color:#f3f3f3'>");
                         pw.print("Path: " + xss.encodeForHTML(data.getResourcePath()));
                         pw.println("</td>");
-                        
+
                         for (String propertyName : data.getPropertyNames()) {
                             ValueInfo<?> valueInfo = data.getValueInfo(propertyName);
                             if (valueInfo == null) {
@@ -232,7 +232,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
                             td(pw, valueInfo.getEffectiveValue());
                             td(pw, valueInfo.getValue());
                             td(pw, valueInfo.isDefault());
-                            
+
                             String title = null;
                             if (valueInfo.isInherited()) {
                                 title = "Source path: " + valueInfo.getConfigSourcePath();
@@ -241,11 +241,11 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
 
                             td(pw, valueInfo.isOverridden());
                         }
-                        
+
                    }
-                    
+
                 }
-                
+
                 tableEnd(pw);
             }
 
@@ -288,7 +288,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
         pw.println("</tr>");
         pw.println("<tr>");
     }
-    
+
     private void textField(PrintWriter pw, String label, String fieldName, String value, String... alertMessages) {
         pw.print("<td style='width:20%'>");
         pw.print(xss.encodeForHTMLAttr(label));
@@ -303,7 +303,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
         }
         pw.println("</td>");
     }
-    
+
     private void selectField(PrintWriter pw, String label, String fieldName, String value, Collection<String> options) {
         pw.print("<td style='width:20%'>");
         pw.print(xss.encodeForHTMLAttr(label));
@@ -324,7 +324,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
         pw.print("</select>");
         pw.println("</td>");
     }
-    
+
     private void checkboxField(PrintWriter pw, String label, String fieldName, boolean checked) {
         pw.print("<td style='width:20%'>");
         pw.print(xss.encodeForHTMLAttr(label));
@@ -337,7 +337,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
         }
         pw.print("/></td>");
     }
-    
+
     private void alertDiv(PrintWriter pw, String text) {
         if (StringUtils.isBlank(text)) {
             return;
@@ -349,7 +349,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
         pw.println("</span>");
         pw.println("</div>");
     }
-    
+
     private void td(PrintWriter pw, Object value, String... title) {
         pw.print("<td");
         if (title.length > 0 && !StringUtils.isBlank(title[0])) {
@@ -371,7 +371,7 @@ public class ConfigurationWebConsolePlugin extends AbstractWebConsolePlugin {
                 pw.print(xss.encodeForHTML(value.toString()));
             }
         }
-        
+
         if (title.length > 0 && !StringUtils.isBlank(title[0])) {
             pw.print("<span class='ui-icon ui-icon-info' style='float:left'></span>");
         }
diff --git a/src/main/java/org/apache/sling/caconfig/management/impl/console/ServiceConfigurationPrinter.java b/src/main/java/org/apache/sling/caconfig/management/impl/console/ServiceConfigurationPrinter.java
index 348aadf..9dc27a0 100644
--- a/src/main/java/org/apache/sling/caconfig/management/impl/console/ServiceConfigurationPrinter.java
+++ b/src/main/java/org/apache/sling/caconfig/management/impl/console/ServiceConfigurationPrinter.java
@@ -28,7 +28,7 @@ import org.osgi.framework.ServiceReference;
  * @param <T> Service type
  */
 interface ServiceConfigurationPrinter<T> {
-    
+
     /**
      * Bullet character
      */
@@ -48,7 +48,7 @@ interface ServiceConfigurationPrinter<T> {
      * Indentation 3 steps
      */
     String INDENT_3 = INDENT_2 + INDENT;
-    
+
     /**
      * Print configuration
      * @param printWriter Print writer
@@ -56,5 +56,5 @@ interface ServiceConfigurationPrinter<T> {
      * @param bundleContext Bundle context
      */
     void printConfiguration(PrintWriter printWriter, ServiceReference<T> serviceReference, BundleContext bundleContext);
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationInheritanceStrategyMultiplexer.java b/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationInheritanceStrategyMultiplexer.java
index 7f9b33d..f8a549b 100644
--- a/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationInheritanceStrategyMultiplexer.java
+++ b/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationInheritanceStrategyMultiplexer.java
@@ -29,5 +29,5 @@ import org.osgi.annotation.versioning.ProviderType;
 public interface ConfigurationInheritanceStrategyMultiplexer extends ConfigurationInheritanceStrategy {
 
     // inherits all methods from {@link ConfigurationInheritanceStrategy}
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationOverrideMultiplexer.java b/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationOverrideMultiplexer.java
index df040ca..582c3b7 100644
--- a/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationOverrideMultiplexer.java
+++ b/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationOverrideMultiplexer.java
@@ -49,7 +49,7 @@ public interface ConfigurationOverrideMultiplexer {
      * @return Overwritten or replaced properties - or null if no override took place
      */
     @Nullable Map<String,Object> overrideProperties(@NotNull String contextPath, @NotNull String configName, @NotNull Map<String,Object> properties);
-    
+
     /**
      * Override properties in given configuration resource (if any overrides are defined).
      * @param contextPath Context path
diff --git a/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationPersistenceStrategyMultiplexer.java b/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationPersistenceStrategyMultiplexer.java
index 26aaf55..4375278 100644
--- a/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationPersistenceStrategyMultiplexer.java
+++ b/src/main/java/org/apache/sling/caconfig/management/multiplexer/ConfigurationPersistenceStrategyMultiplexer.java
@@ -30,7 +30,7 @@ import org.osgi.annotation.versioning.ProviderType;
  */
 @ProviderType
 public interface ConfigurationPersistenceStrategyMultiplexer extends ConfigurationPersistenceStrategy2 {
-    
+
     /**
      * Get all configuration names from all configuration persistence strategies. This can be used when no nested parent resources is known.
      * @param configName Configuration name
@@ -51,5 +51,5 @@ public interface ConfigurationPersistenceStrategyMultiplexer extends Configurati
      * @return Possible configuration names in order of persistence strategy service ranking.
      */
     @NotNull Collection<String> getAllCollectionItemConfigNames(@NotNull String configName);
-        
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/management/multiplexer/ContextPathStrategyMultiplexer.java b/src/main/java/org/apache/sling/caconfig/management/multiplexer/ContextPathStrategyMultiplexer.java
index 3c55b00..4224874 100644
--- a/src/main/java/org/apache/sling/caconfig/management/multiplexer/ContextPathStrategyMultiplexer.java
+++ b/src/main/java/org/apache/sling/caconfig/management/multiplexer/ContextPathStrategyMultiplexer.java
@@ -29,5 +29,5 @@ import org.osgi.annotation.versioning.ProviderType;
 public interface ContextPathStrategyMultiplexer extends ContextPathStrategy {
 
     // inherits all methods from {@link ContextPathStrategy}
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java b/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java
index 56c3429..77d60f4 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java
@@ -78,5 +78,5 @@ public class ConfigurationResourceResolverImpl implements ConfigurationResourceR
         }
         return contextPaths;
     }
-    
+
 }
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImpl.java b/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImpl.java
index 1669124..327ffc2 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImpl.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerImpl.java
@@ -46,13 +46,13 @@ reference={
                 policy=ReferencePolicy.DYNAMIC, policyOption=ReferencePolicyOption.GREEDY)
 })
 public class ConfigurationResourceResolvingStrategyMultiplexerImpl implements ConfigurationResourceResolvingStrategyMultiplexer {
-    
+
     private RankedServices<ConfigurationResourceResolvingStrategy> items = new RankedServices<>(Order.DESCENDING);
-        
+
     protected void bindConfigurationResourceResolvingStrategy(ConfigurationResourceResolvingStrategy contextPathStrategy, Map<String, Object> props) {
         items.bind(contextPathStrategy, props);
     }
-    
+
     protected void unbindConfigurationResourceResolvingStrategy(ConfigurationResourceResolvingStrategy contextPathStrategy, Map<String, Object> props) {
         items.unbind(contextPathStrategy, props);
     }
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/def/ConfigurationResourceNameConstants.java b/src/main/java/org/apache/sling/caconfig/resource/impl/def/ConfigurationResourceNameConstants.java
index 50e33e5..93a0737 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/def/ConfigurationResourceNameConstants.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/def/ConfigurationResourceNameConstants.java
@@ -29,7 +29,7 @@ public final class ConfigurationResourceNameConstants {
      * Additionally each resource having this property marks the beginning of a new context sub-tree.
      */
     public static final String PROPERTY_CONFIG_REF = "sling:configRef";
-   
+
     /**
      * Boolean property that controls whether config resource collections should be merged on inheritance or not.
      * Merging means merging the lists, not the list items (properties of the resources) itself.
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java b/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
index 38cb165..e6d8287 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
@@ -183,7 +183,7 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
                                 val = null;
                             }
                         }
-                        
+
                         if (val != null) {
                             log.trace("+ Found reference for context path {}: {}", contextResource.getResource().getPath(), val);
                         }
@@ -232,7 +232,7 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
                 ref = null;
             }
         }
-        
+
         if (ref != null && !isAllowedConfigPath(ref)) {
             log.debug("Ignoring reference to {} from {} - not in allowed paths.",
                     contextResource.getConfigRef(), contextResource.getResource().getPath());
@@ -355,7 +355,7 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
         boolean inherit = false;
         while (paths.hasNext()) {
             final String path = paths.next();
-            
+
             Resource item = null;
             String bucketNameUsed = null;
             for (String bucketName : bucketNames) {
@@ -421,10 +421,10 @@ public class DefaultConfigurationResourceResolvingStrategy implements Configurat
         }
         final ResourceResolver resourceResolver = contentResource.getResourceResolver();
         final List<String> paths = IteratorUtils.toList(getResolvePaths(contentResource, bucketNames));
-        
+
         // get resource collection with respect to collection inheritance
         Collection<Resource> resourceCollection = getResourceCollectionInternal(bucketNames, configName, paths.iterator(), resourceResolver);
-        
+
         // get inheritance chain for each item found
         // yes, this resolves the closest item twice, but is the easiest solution to combine both logic aspects
         Iterator<Iterator<Resource>> result = IteratorUtils.transformedIterator(resourceCollection.iterator(), new Transformer() {
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java b/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java
index 63ab2cc..d9d4de8 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java
@@ -27,7 +27,7 @@ import org.apache.commons.lang3.StringUtils;
  * Helper methods for configuration names.
  */
 public final class ConfigNameUtil {
-    
+
     private ConfigNameUtil() {
         // static methods only
     }
@@ -42,7 +42,7 @@ public final class ConfigNameUtil {
                 && !StringUtils.startsWith(configName, "/")
                 && !StringUtils.contains(configName, "../");
     }
-    
+
     /**
      * Check if the config name is valid.
      * @param configNames The names
@@ -59,7 +59,7 @@ public final class ConfigNameUtil {
         }
         return true;
     }
-    
+
     /**
      * Ensure that the config name is valid.
      * @param configName The name
@@ -70,7 +70,7 @@ public final class ConfigNameUtil {
             throw new IllegalArgumentException("Invalid configuration name: " + configName);
         }
     }
-    
+
     /**
      * Returns all partial combinations like: a, a/b, a/b/c from config name a/b/c/d
      * @param configName Config name
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java b/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java
index c2f87fa..0bde568 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/util/MapUtil.java
@@ -25,11 +25,11 @@ import java.util.SortedSet;
 import java.util.TreeSet;
 
 public final class MapUtil {
-    
+
     private MapUtil() {
         // static methods only
     }
-    
+
     /**
      * Produce trace output for properties map.
      * @param properties Properties
@@ -51,7 +51,7 @@ public final class MapUtil {
         sb.append("}");
         return sb.toString();
     }
-    
+
     private static void appendValue(StringBuilder sb, Object value) {
         if (value == null) {
             sb.append("null");
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/util/PathEliminateDuplicatesIterator.java b/src/main/java/org/apache/sling/caconfig/resource/impl/util/PathEliminateDuplicatesIterator.java
index d55107d..92a938f 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/util/PathEliminateDuplicatesIterator.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/util/PathEliminateDuplicatesIterator.java
@@ -33,12 +33,12 @@ public class PathEliminateDuplicatesIterator extends FilterIterator<String> {
     public PathEliminateDuplicatesIterator(Iterator<String> iterator) {
         super(iterator, new Predicate<String>() {
             private final Set<String> resourcePaths = new HashSet<>();
-            
+
             @Override
             public boolean evaluate(String object) {
                 return resourcePaths.add(object);
             }
-            
+
         });
     }
 
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/util/PathParentExpandIterator.java b/src/main/java/org/apache/sling/caconfig/resource/impl/util/PathParentExpandIterator.java
index 3cb62b3..e0ecd72 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/util/PathParentExpandIterator.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/util/PathParentExpandIterator.java
@@ -31,11 +31,11 @@ import org.apache.sling.api.resource.ResourceUtil;
  * Duplicates are not eliminated.
  */
 public class PathParentExpandIterator implements Iterator<String> {
-    
+
     private final String rootPath;
     private final Iterator<String> paths;
     private final Queue<String> expandedPaths = new LinkedList<>();
-    
+
     public PathParentExpandIterator(String rootPath, Iterator<String> paths) {
         this.rootPath = rootPath;
         this.paths = paths;
@@ -53,7 +53,7 @@ public class PathParentExpandIterator implements Iterator<String> {
         }
         return expandedPaths.remove();
     }
-    
+
     private void expandPaths(String path) {
         expandedPaths.add(path);
         String parentPath = ResourceUtil.getParent(path);
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java b/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
index 248d1ed..4bd5f6f 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/util/PropertyUtil.java
@@ -22,7 +22,7 @@ import org.apache.commons.lang3.ArrayUtils;
 import org.apache.sling.api.resource.ValueMap;
 
 public final class PropertyUtil {
-    
+
     private PropertyUtil() {
         // static methods only
     }
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/util/ResourceEliminateDuplicatesIterator.java b/src/main/java/org/apache/sling/caconfig/resource/impl/util/ResourceEliminateDuplicatesIterator.java
index bf95224..7af2781 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/util/ResourceEliminateDuplicatesIterator.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/util/ResourceEliminateDuplicatesIterator.java
@@ -35,13 +35,13 @@ public class ResourceEliminateDuplicatesIterator extends FilterIterator<ContextR
     public ResourceEliminateDuplicatesIterator(Iterator<ContextResource> iterator) {
         super(iterator, new Predicate<ContextResource>() {
             private final Set<String> keys = new HashSet<>();
-            
+
             @Override
             public boolean evaluate(ContextResource contextResource) {
                 String key = contextResource.getResource().getPath() + "#" + StringUtils.defaultString(contextResource.getConfigRef());
                 return keys.add(key);
             }
-            
+
         });
     }
 
diff --git a/src/main/java/org/apache/sling/caconfig/resource/impl/util/ResourcePathCollatingIterator.java b/src/main/java/org/apache/sling/caconfig/resource/impl/util/ResourcePathCollatingIterator.java
index fb31ee4..5e9d672 100644
--- a/src/main/java/org/apache/sling/caconfig/resource/impl/util/ResourcePathCollatingIterator.java
+++ b/src/main/java/org/apache/sling/caconfig/resource/impl/util/ResourcePathCollatingIterator.java
@@ -30,7 +30,7 @@ import org.apache.sling.caconfig.resource.spi.ContextResource;
 /**
  * Expected a list of iterators containing paths, where each path is a direct or indirect parent of the previous one
  * (= sorted by path hierarchy starting with the deepest path).
- * Result is a new iterator with all resources combined from all iterators in the same order, duplicates not eliminated. 
+ * Result is a new iterator with all resources combined from all iterators in the same order, duplicates not eliminated.
  */
 public class ResourcePathCollatingIterator extends CollatingIterator<ContextResource> {
 
@@ -56,5 +56,5 @@ public class ResourcePathCollatingIterator extends CollatingIterator<ContextReso
     public ResourcePathCollatingIterator(List<Iterator<ContextResource>> iterator) {
         super(PATH_LENGTH_COMPARATOR, (Collection)iterator);
     }
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/AllTypesConfig.java b/src/test/java/org/apache/sling/caconfig/example/AllTypesConfig.java
index 77d4ff1..9dd3dce 100644
--- a/src/test/java/org/apache/sling/caconfig/example/AllTypesConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/AllTypesConfig.java
@@ -35,43 +35,43 @@ import org.apache.sling.caconfig.annotation.Configuration;
 public @interface AllTypesConfig {
 
     String stringParam();
-    
+
     String stringParamWithDefault() default STRING_DEFAULT;
 
     int intParam();
-    
+
     int intParamWithDefault() default INT_DEFAULT;
-    
+
     long longParam();
-    
+
     long longParamWithDefault() default LONG_DEFAULT;
-    
+
     double doubleParam();
-    
+
     double doubleParamWithDefault() default DOUBLE_DEFAULT;
-    
+
     boolean boolParam();
-    
+
     boolean boolParamWithDefault() default BOOL_DEFAULT;
-    
+
     String[] stringArrayParam();
-    
+
     String[] stringArrayParamWithDefault() default { STRING_DEFAULT, STRING_DEFAULT_2 };
 
     int[] intArrayParam();
-    
+
     int[] intArrayParamWithDefault() default { INT_DEFAULT, INT_DEFAULT_2 };
-    
+
     long[] longArrayParam();
-    
+
     long[] longArrayParamWithDefault() default { LONG_DEFAULT, LONG_DEFAULT_2 };
-    
+
     double[] doubleArrayParam();
-    
+
     double[] doubleArrayParamWithDefault() default { DOUBLE_DEFAULT, DOUBLE_DEFAULT_2 };
-    
+
     boolean[] boolArrayParam();
-    
+
     boolean[] boolArrayParamWithDefault() default { BOOL_DEFAULT, BOOL_DEFAULT_2 };
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/AllTypesDefaults.java b/src/test/java/org/apache/sling/caconfig/example/AllTypesDefaults.java
index 437d326..c7208c3 100644
--- a/src/test/java/org/apache/sling/caconfig/example/AllTypesDefaults.java
+++ b/src/test/java/org/apache/sling/caconfig/example/AllTypesDefaults.java
@@ -19,19 +19,19 @@
 package org.apache.sling.caconfig.example;
 
 public final class AllTypesDefaults {
-    
+
     private AllTypesDefaults() {
         // constants only
     }
-    
+
     public static final String STRING_DEFAULT = "myDefault";
 
     public static final String STRING_DEFAULT_2 = "myDefault2";
 
     public static final int INT_DEFAULT = 12345;
-    
+
     public static final int INT_DEFAULT_2 = 23456;
-    
+
     public static final long LONG_DEFAULT = 1234567890L;
 
     public static final long LONG_DEFAULT_2 = 2345678901L;
diff --git a/src/test/java/org/apache/sling/caconfig/example/IllegalTypesConfig.java b/src/test/java/org/apache/sling/caconfig/example/IllegalTypesConfig.java
index ef72a62..1ba5ee5 100644
--- a/src/test/java/org/apache/sling/caconfig/example/IllegalTypesConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/IllegalTypesConfig.java
@@ -27,21 +27,21 @@ import org.apache.sling.caconfig.annotation.Configuration;
 public @interface IllegalTypesConfig {
 
     Class clazz();
-    
+
     byte byteSingle();
-    
+
     byte[] byteArray();
-    
+
     short shortSingle();
-    
+
     short[] shortArray();
-    
+
     float floatSingle();
-    
+
     float[] floatArray();
-    
+
     char charSingle();
-    
+
     char[] charArray();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/ListConfig.java b/src/test/java/org/apache/sling/caconfig/example/ListConfig.java
index bc337f8..94b40ba 100644
--- a/src/test/java/org/apache/sling/caconfig/example/ListConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/ListConfig.java
@@ -24,7 +24,7 @@ import org.apache.sling.caconfig.annotation.Configuration;
 public @interface ListConfig {
 
     String stringParam();
-    
+
     int intParam();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java b/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
index 4405186..47bf32b 100644
--- a/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/ListDoubleNestedConfig.java
@@ -24,9 +24,9 @@ import org.apache.sling.caconfig.annotation.Configuration;
 public @interface ListDoubleNestedConfig {
 
     String stringParam();
-    
+
     int intParam();
 
     ListNestedConfig[] subListNestedConfig();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/ListNestedConfig.java b/src/test/java/org/apache/sling/caconfig/example/ListNestedConfig.java
index c815fc9..77e8818 100644
--- a/src/test/java/org/apache/sling/caconfig/example/ListNestedConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/ListNestedConfig.java
@@ -24,9 +24,9 @@ import org.apache.sling.caconfig.annotation.Configuration;
 public @interface ListNestedConfig {
 
     String stringParam();
-    
+
     int intParam();
 
     ListConfig[] subListConfig();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/MetadataSimpleConfig.java b/src/test/java/org/apache/sling/caconfig/example/MetadataSimpleConfig.java
index f2588a3..83f2ddc 100644
--- a/src/test/java/org/apache/sling/caconfig/example/MetadataSimpleConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/MetadataSimpleConfig.java
@@ -32,11 +32,11 @@ public @interface MetadataSimpleConfig {
 
     @Property(label = "String Param", description = "Enter strings here.", property = "p1=v1", order = 1)
     String stringParam();
-    
+
     @Property(label = "Integer Param", order = 2)
     int intParam() default 5;
-    
+
     @Property(order = 3)
     boolean boolParam();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/NestedConfig.java b/src/test/java/org/apache/sling/caconfig/example/NestedConfig.java
index aca84fd..bf5b31a 100644
--- a/src/test/java/org/apache/sling/caconfig/example/NestedConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/NestedConfig.java
@@ -24,11 +24,11 @@ import org.apache.sling.caconfig.annotation.Configuration;
 public @interface NestedConfig {
 
     String stringParam();
-    
+
     SimpleConfig subConfig();
-    
+
     ListConfig[] subListConfig();
 
-    WithoutAnnotationConfig subConfigWithoutAnnotation();    
-    
+    WithoutAnnotationConfig subConfigWithoutAnnotation();
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/SimpleConfig.java b/src/test/java/org/apache/sling/caconfig/example/SimpleConfig.java
index 23e2758..e25b760 100644
--- a/src/test/java/org/apache/sling/caconfig/example/SimpleConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/SimpleConfig.java
@@ -24,9 +24,9 @@ import org.apache.sling.caconfig.annotation.Configuration;
 public @interface SimpleConfig {
 
     String stringParam();
-    
+
     int intParam() default 5;
-    
+
     boolean boolParam();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java b/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java
index 93ad760..4bbcba0 100644
--- a/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java
+++ b/src/test/java/org/apache/sling/caconfig/example/SimpleSlingModel.java
@@ -27,11 +27,11 @@ public interface SimpleSlingModel {
 
     @ValueMapValue(name="stringParam")
     String getStringParam();
-    
+
     @ValueMapValue(name="intParam", optional = true)
     int getIntParam();
-    
+
     @ValueMapValue(name="boolParam", optional = true)
     boolean getBoolParam();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/SpecialNamesConfig.java b/src/test/java/org/apache/sling/caconfig/example/SpecialNamesConfig.java
index 4d54b3e..9ba7a84 100644
--- a/src/test/java/org/apache/sling/caconfig/example/SpecialNamesConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/SpecialNamesConfig.java
@@ -24,9 +24,9 @@ import org.apache.sling.caconfig.annotation.Configuration;
 public @interface SpecialNamesConfig {
 
     String $stringParam();
-    
+
     int int__Param() default 5;
-    
+
     boolean bool_Param();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/example/WithoutAnnotationConfig.java b/src/test/java/org/apache/sling/caconfig/example/WithoutAnnotationConfig.java
index ac21b86..4241e22 100644
--- a/src/test/java/org/apache/sling/caconfig/example/WithoutAnnotationConfig.java
+++ b/src/test/java/org/apache/sling/caconfig/example/WithoutAnnotationConfig.java
@@ -24,5 +24,5 @@ package org.apache.sling.caconfig.example;
 public @interface WithoutAnnotationConfig {
 
     String stringParam();
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactoryTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactoryTest.java
index 609d7eb..0f30e12 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactoryTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationBuilderAdapterFactoryTest.java
@@ -31,19 +31,19 @@ import org.junit.Test;
 
 @SuppressWarnings("null")
 public class ConfigurationBuilderAdapterFactoryTest {
-    
+
     @Rule
     public SlingContext context = new SlingContext();
-    
+
     private Resource site1Page1;
-    
+
     @Before
     public void setUp() {
         ConfigurationTestUtils.registerConfigurationResolver(context);
         context.registerInjectActivateService(new ConfigurationBuilderAdapterFactory());
 
         // config resource
-        context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.SimpleConfig", 
+        context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.SimpleConfig",
                 "stringParam", "configValue1",
                 "intParam", 111,
                 "boolParam", true);
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationProxyTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationProxyTest.java
index 774b341..9aca4c7 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationProxyTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationProxyTest.java
@@ -53,10 +53,10 @@ import org.junit.Rule;
 import org.junit.Test;
 
 public class ConfigurationProxyTest {
-    
+
     @Rule
     public SlingContext context = new SlingContext();
-    
+
     @Test
     public void testNonExistingConfig_AllTypes() {
         AllTypesConfig cfg = get(null, AllTypesConfig.class);
@@ -89,12 +89,12 @@ public class ConfigurationProxyTest {
         NestedConfig cfg = get(null, NestedConfig.class);
 
         assertNull(cfg.stringParam());
-        
+
         SimpleConfig subConfig = cfg.subConfig();
         assertNull(subConfig.stringParam());
         assertEquals(5, subConfig.intParam());
         assertFalse(subConfig.boolParam());
-        
+
         assertArrayEquals(new ListConfig[0], cfg.subListConfig());
     }
 
@@ -159,16 +159,16 @@ public class ConfigurationProxyTest {
             .resource("/test/subConfigWithoutAnnotation", "stringParam", "v4");
 
         Resource resource = context.resourceResolver().getResource("/test");
-        
+
         NestedConfig cfg = get(resource, NestedConfig.class);
 
         assertEquals("v1", cfg.stringParam());
-        
+
         SimpleConfig subConfig = cfg.subConfig();
         assertEquals("v2", subConfig.stringParam());
         assertEquals(444, subConfig.intParam());
         assertEquals(true, subConfig.boolParam());
-        
+
         ListConfig[] listConfig = cfg.subListConfig();
         assertEquals(3, listConfig.length);
         assertEquals("v3.1", listConfig[0].stringParam());
@@ -190,59 +190,59 @@ public class ConfigurationProxyTest {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.clazz();
     }
-    
+
     @Test(expected=ConfigurationResolveException.class)
     public void testIllegalTypes_Byte() {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.byteSingle();
     }
-    
+
     @Test(expected=ConfigurationResolveException.class)
     public void testIllegalTypes_ByteArray() {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.byteArray();
     }
-    
+
     @Test(expected=ConfigurationResolveException.class)
     public void testIllegalTypes_Short() {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.shortSingle();
     }
-    
+
     @Test(expected=ConfigurationResolveException.class)
     public void testIllegalTypes_ShortArray() {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.shortArray();
     }
-    
+
     @Test(expected=ConfigurationResolveException.class)
     public void testIllegalTypes_Float() {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.floatSingle();
     }
-    
+
     @Test(expected=ConfigurationResolveException.class)
     public void testIllegalTypes_FloatArray() {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.floatArray();
     }
-    
+
     @Test(expected=ConfigurationResolveException.class)
     public void testIllegalTypes_Char() {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.charSingle();
     }
-    
+
     @Test(expected=ConfigurationResolveException.class)
     public void testIllegalTypes_CharArray() {
         IllegalTypesConfig cfg = get(null, IllegalTypesConfig.class);
         cfg.charArray();
     }
-    
+
     private <T> T get(Resource resource, Class<T> clazz) {
         return ConfigurationProxy.get(resource, clazz, childResolver(resource));
     }
-    
+
     // simulate simple child resolver without involving ConfigurationResolver implementation
     private ChildResolver childResolver(final Resource resource) {
         return new ChildResolver() {
@@ -267,5 +267,5 @@ public class ConfigurationProxyTest {
             }
         };
     }
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
index 226cff3..3e25ff1 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAdaptableTest.java
@@ -59,7 +59,7 @@ public class ConfigurationResolverAdaptableTest {
         underTest = ConfigurationTestUtils.registerConfigurationResolver(context);
 
         context.addModelsForPackage("org.apache.sling.caconfig.example");
-        
+
         // content resources
         context.build().resource("/content/site1", PROPERTY_CONFIG_REF, "/conf/content/site1");
         site1Page1 = context.create().resource("/content/site1/page1");
@@ -108,7 +108,7 @@ public class ConfigurationResolverAdaptableTest {
 
     @Test
     public void testConfigWithDefaultValues() {
-        context.registerService(ConfigurationMetadataProvider.class, new DummyConfigurationMetadataProvider("sampleName", 
+        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",
@@ -122,7 +122,7 @@ public class ConfigurationResolverAdaptableTest {
 
     @Test
     public void testConfigCollectionWithDefaultValues() {
-        context.registerService(ConfigurationMetadataProvider.class, new DummyConfigurationMetadataProvider("sampleList", 
+        context.registerService(ConfigurationMetadataProvider.class, new DummyConfigurationMetadataProvider("sampleList",
                 ImmutableMap.<String, Object>of("intParam", 999), true));
 
         context.build().resource("/conf/content/site1/sling:configs/sampleList")
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 beb2122..0b9ef3c 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverAnnotationClassTest.java
@@ -78,7 +78,7 @@ public class ConfigurationResolverAnnotationClassTest {
         assertNull(cfg.stringParam());
         assertEquals(5, cfg.intParam());
         assertEquals(false, cfg.boolParam());
-        
+
         assertFalse(underTest.get(site1Page1).has(SimpleConfig.class));
     }
 
@@ -192,13 +192,13 @@ public class ConfigurationResolverAnnotationClassTest {
         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);
@@ -236,7 +236,7 @@ public class ConfigurationResolverAnnotationClassTest {
         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);
@@ -247,7 +247,7 @@ public class ConfigurationResolverAnnotationClassTest {
         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);
@@ -268,7 +268,7 @@ public class ConfigurationResolverAnnotationClassTest {
                 .siblingsMode()
                 .resource("1", "stringParam", "configValue1.1", "intParam", "111")
                 .resource("2", "stringParam", "configValue1.2", "intParam", "222")
-            .resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListConfig",                    
+            .resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListConfig",
                     PROPERTY_CONFIG_COLLECTION_INHERIT, true)
                 .siblingsMode()
                 .resource("2", "stringParam", "configValue2.2", PROPERTY_CONFIG_PROPERTY_INHERIT, true)
@@ -303,12 +303,12 @@ public class ConfigurationResolverAnnotationClassTest {
         NestedConfig cfg = underTest.get(site1Page1).as(NestedConfig.class);
 
         assertEquals("configValue3", cfg.stringParam());
-        
+
         SimpleConfig subConfig = cfg.subConfig();
         assertEquals("configValue4", subConfig.stringParam());
         assertEquals(444, subConfig.intParam());
         assertEquals(true, subConfig.boolParam());
-        
+
         ListConfig[] listConfig = cfg.subListConfig();
         assertEquals(3, listConfig.length);
         assertEquals("configValue2.1", listConfig[0].stringParam());
@@ -330,7 +330,7 @@ public class ConfigurationResolverAnnotationClassTest {
         NestedConfig cfg = underTest.get(site1Page1).as(NestedConfig.class);
 
         assertEquals("configValue3", cfg.stringParam());
-        
+
         SimpleConfig subConfig = cfg.subConfig();
         assertEquals("configValue4", subConfig.stringParam());
         assertEquals(111, subConfig.intParam());
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
index ced83d7..07d01ab 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistence2Test.java
@@ -69,7 +69,7 @@ public class ConfigurationResolverCustomPersistence2Test {
         // custom strategy which redirects all config resources to a jcr:content subnode
         context.registerService(ConfigurationPersistenceStrategy2.class,
                 new CustomConfigurationPersistenceStrategy2(), Constants.SERVICE_RANKING, 2000);
-        
+
         // content resources
         context.build().resource("/content/site1", PROPERTY_CONFIG_REF, "/conf/content/site1");
         site1Page1 = context.create().resource("/content/site1/page1");
@@ -163,13 +163,13 @@ public class ConfigurationResolverCustomPersistence2Test {
         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);
@@ -205,7 +205,7 @@ public class ConfigurationResolverCustomPersistence2Test {
         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);
@@ -216,7 +216,7 @@ public class ConfigurationResolverCustomPersistence2Test {
         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);
@@ -244,12 +244,12 @@ public class ConfigurationResolverCustomPersistence2Test {
         NestedConfig cfg = underTest.get(site1Page1).as(NestedConfig.class);
 
         assertEquals("configValue3", cfg.stringParam());
-        
+
         SimpleConfig subConfig = cfg.subConfig();
         assertEquals("configValue4", subConfig.stringParam());
         assertEquals(444, subConfig.intParam());
         assertEquals(true, subConfig.boolParam());
-        
+
         ListConfig[] listConfig = cfg.subListConfig();
         assertEquals(3, listConfig.length);
         assertEquals("configValue2.1", listConfig[0].stringParam());
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
index ed84581..d954260 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
@@ -69,7 +69,7 @@ public class ConfigurationResolverCustomPersistenceTest {
         // custom strategy which redirects all config resources to a jcr:content subnode
         context.registerService(ConfigurationPersistenceStrategy2.class,
                 new CustomConfigurationPersistenceStrategy(), Constants.SERVICE_RANKING, 2000);
-        
+
         // content resources
         context.build().resource("/content/site1", PROPERTY_CONFIG_REF, "/conf/content/site1");
         site1Page1 = context.create().resource("/content/site1/page1");
@@ -163,13 +163,13 @@ public class ConfigurationResolverCustomPersistenceTest {
         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);
@@ -205,7 +205,7 @@ public class ConfigurationResolverCustomPersistenceTest {
         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);
@@ -216,7 +216,7 @@ public class ConfigurationResolverCustomPersistenceTest {
         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);
@@ -244,12 +244,12 @@ public class ConfigurationResolverCustomPersistenceTest {
         NestedConfig cfg = underTest.get(site1Page1).as(NestedConfig.class);
 
         assertEquals("configValue3", cfg.stringParam());
-        
+
         SimpleConfig subConfig = cfg.subConfig();
         assertEquals("configValue4", subConfig.stringParam());
         assertEquals(444, subConfig.intParam());
         assertEquals(true, subConfig.boolParam());
-        
+
         ListConfig[] listConfig = cfg.subListConfig();
         assertEquals(3, listConfig.length);
         assertEquals("configValue2.1", listConfig[0].stringParam());
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
index ca2278a..369abcf 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverValueMapTest.java
@@ -86,7 +86,7 @@ public class ConfigurationResolverValueMapTest {
 
     @Test
     public void testConfig() {
-        context.build().resource("/conf/content/site1/sling:configs/sampleName", 
+        context.build().resource("/conf/content/site1/sling:configs/sampleName",
                 "stringParam", "configValue1",
                 "intParam", 111,
                 "boolParam", true);
@@ -120,10 +120,10 @@ public class ConfigurationResolverValueMapTest {
 
     @Test
     public void testConfigWithDefaultValues() {
-        context.registerService(ConfigurationMetadataProvider.class, new DummyConfigurationMetadataProvider("sampleName", 
+        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", 
+
+        context.build().resource("/conf/content/site1/sling:configs/sampleName",
                 "boolParam", true);
 
         ValueMap props = underTest.get(site1Page1).name("sampleName").asValueMap();
@@ -137,7 +137,7 @@ public class ConfigurationResolverValueMapTest {
 
     @Test
     public void testConfigCollectionWithDefaultValues() {
-        context.registerService(ConfigurationMetadataProvider.class, new DummyConfigurationMetadataProvider("sampleList", 
+        context.registerService(ConfigurationMetadataProvider.class, new DummyConfigurationMetadataProvider("sampleList",
                 ImmutableMap.<String, Object>of("intParam", 999), true));
 
         context.build().resource("/conf/content/site1/sling:configs/sampleList")
@@ -163,7 +163,7 @@ public class ConfigurationResolverValueMapTest {
         context.registerService(ConfigurationOverrideProvider.class, new DummyConfigurationOverrideProvider(
                 "[/content]sampleName={\"stringParam\":\"override1\",\"intParam\":222}"));
 
-        context.build().resource("/conf/content/site1/sling:configs/sampleName", 
+        context.build().resource("/conf/content/site1/sling:configs/sampleName",
                 "stringParam", "configValue1",
                 "intParam", 111,
                 "boolParam", true);
diff --git a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
index 1c4042e..82e6b8b 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
@@ -29,7 +29,7 @@ import org.apache.sling.caconfig.resource.impl.ConfigurationResourceTestUtils;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 
 public final class ConfigurationTestUtils {
-    
+
     private ConfigurationTestUtils() {
         // static methods only
     }
@@ -49,7 +49,7 @@ public final class ConfigurationTestUtils {
         context.registerInjectActivateService(new ConfigurationMetadataProviderMultiplexerImpl());
         return context.registerInjectActivateService(new ConfigurationResolverImpl(), properties);
     }
-    
+
     /**
      * Register all services for {@link ConfigurationResolver}
      * without the default implementations of the multiplexed services.
@@ -64,5 +64,5 @@ public final class ConfigurationTestUtils {
         context.registerInjectActivateService(new ConfigurationMetadataProviderMultiplexerImpl());
         return context.registerInjectActivateService(new ConfigurationResolverImpl(), properties);
     }
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java b/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
index edb7af3..b7528e5 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/DummyConfigurationMetadataProvider.java
@@ -36,18 +36,18 @@ class DummyConfigurationMetadataProvider implements ConfigurationMetadataProvide
     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 @NotNull SortedSet<String> getConfigurationNames() {
         return ImmutableSortedSet.of(configName);
     }
-    
+
     @Override
     public ConfigurationMetadata getConfigurationMetadata(String configName) {
         if (!StringUtils.equals(this.configName, configName)) {
diff --git a/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java b/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
index ee6251c..96c2f73 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationInheritanceStrategyTest.java
@@ -35,14 +35,14 @@ import com.google.common.collect.ImmutableList;
 
 @SuppressWarnings("null")
 public class DefaultConfigurationInheritanceStrategyTest {
-    
+
     private static final String PROPERTY_CONFIG_PROPERTY_INHERIT_CUSTOM = "custom:configPropertyInherit";
-    
+
     @Rule
     public SlingContext context = new SlingContext();
-    
+
     private ConfigurationInheritanceStrategy underTest;
-    
+
     @Test
     public void testWithoutPropertyMerging() {
         underTest = context.registerInjectActivateService(new DefaultConfigurationInheritanceStrategy());
@@ -52,14 +52,14 @@ public class DefaultConfigurationInheritanceStrategyTest {
                 context.create().resource("/conf/resource2", "prop2", "value2b", "prop3", "value3b"),
                 context.create().resource("/conf/resource3", "prop4", "value4b")
                 ).iterator();
-        
+
         Resource inherited = underTest.getResource(resources);
         ValueMap props = inherited.getValueMap();
-        
+
         assertEquals("value1a", props.get("prop1", String.class));
         assertEquals("value2a", props.get("prop2", String.class));
         assertNull(props.get("prop3", String.class));
-        assertNull(props.get("prop4", String.class));        
+        assertNull(props.get("prop4", String.class));
     }
 
     @Test
@@ -71,14 +71,14 @@ public class DefaultConfigurationInheritanceStrategyTest {
                 context.create().resource("/conf/resource2", "prop2", "value2b", "prop3", "value3b", PROPERTY_CONFIG_PROPERTY_INHERIT_CUSTOM, true),
                 context.create().resource("/conf/resource3", "prop4", "value4b")
                 ).iterator();
-        
+
         Resource inherited = underTest.getResource(resources);
         ValueMap props = inherited.getValueMap();
-        
+
         assertEquals("value1a", props.get("prop1", String.class));
         assertEquals("value2a", props.get("prop2", String.class));
         assertEquals("value3b", props.get("prop3", String.class));
-        assertEquals("value4b", props.get("prop4", String.class));        
+        assertEquals("value4b", props.get("prop4", String.class));
     }
 
     @Test
@@ -90,14 +90,14 @@ public class DefaultConfigurationInheritanceStrategyTest {
                 context.create().resource("/conf/resource2", "prop2", "value2b", "prop3", "value3b"),
                 context.create().resource("/conf/resource3", "prop4", "value4b")
                 ).iterator();
-        
+
         Resource inherited = underTest.getResource(resources);
         ValueMap props = inherited.getValueMap();
-        
+
         assertEquals("value1a", props.get("prop1", String.class));
         assertEquals("value2a", props.get("prop2", String.class));
         assertEquals("value3b", props.get("prop3", String.class));
-        assertNull(props.get("prop4", String.class));        
+        assertNull(props.get("prop4", String.class));
     }
 
     @Test
@@ -110,7 +110,7 @@ public class DefaultConfigurationInheritanceStrategyTest {
                 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);
     }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProviderTest.java b/src/test/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProviderTest.java
index 1f6d0da..a969b93 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProviderTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassConfigurationMetadataProviderTest.java
@@ -34,27 +34,27 @@ import org.junit.Test;
 import org.osgi.framework.Bundle;
 
 public class AnnotationClassConfigurationMetadataProviderTest {
-    
+
     @Rule
     public OsgiContext context = new OsgiContext();
-    
+
     private AnnotationClassConfigurationMetadataProvider underTest;
-    
+
     @Before
     public void setUp() {
-        underTest = context.registerInjectActivateService(new AnnotationClassConfigurationMetadataProvider()); 
+        underTest = context.registerInjectActivateService(new AnnotationClassConfigurationMetadataProvider());
     }
 
     @Test
     public void testGetConfigurationMetadata() {
-        
+
         // no configuration metadata present
         assertTrue(underTest.getConfigurationNames().isEmpty());
-        
+
         // simulate bundle deployment with annotation classes
         Bundle dummyBundle = BundleEventUtil.startDummyBundle(context.bundleContext(),
                 MetadataSimpleConfig.class, AllTypesConfig.class);
-        
+
         // validate config metadata is available
         Set<String> configNames = underTest.getConfigurationNames();
         assertEquals(2, configNames.size());
@@ -62,7 +62,7 @@ public class AnnotationClassConfigurationMetadataProviderTest {
         assertTrue(configNames.contains(AllTypesConfig.class.getName()));
         assertEquals("simpleConfig", underTest.getConfigurationMetadata("simpleConfig").getName());
         assertEquals(AllTypesConfig.class.getName(), underTest.getConfigurationMetadata(AllTypesConfig.class.getName()).getName());
-        
+
         // simulate bundle undeployment
         BundleEventUtil.stopDummyBundle(dummyBundle);
 
@@ -86,17 +86,17 @@ public class AnnotationClassConfigurationMetadataProviderTest {
 
     @Test
     public void testNameConflictSingleBundle() {
-        
+
         // simulate bundle deployment with annotation classes
         Bundle dummyBundle = BundleEventUtil.startDummyBundle(context.bundleContext(),
                 MetadataSimpleConfig.class, NameConflictMetadataSimpleConfig.class);
-        
+
         // validate config metadata is available
         Set<String> configNames = underTest.getConfigurationNames();
         assertEquals(1, configNames.size());  // only 1 - annotation with conflicting name is ignored
         assertTrue(configNames.contains("simpleConfig"));
         assertEquals("simpleConfig", underTest.getConfigurationMapping("simpleConfig").getConfigName());
-        
+
         // simulate bundle undeployment
         BundleEventUtil.stopDummyBundle(dummyBundle);
 
@@ -106,19 +106,19 @@ public class AnnotationClassConfigurationMetadataProviderTest {
 
     @Test
     public void testNameConflictAccrossBundles() {
-        
+
         // simulate bundle deployment with annotation classes
         Bundle dummyBundle1 = BundleEventUtil.startDummyBundle(context.bundleContext(),
                 MetadataSimpleConfig.class);
         Bundle dummyBundle2 = BundleEventUtil.startDummyBundle(context.bundleContext(),
                 NameConflictMetadataSimpleConfig.class);
-        
+
         // validate config metadata is available
         Set<String> configNames = underTest.getConfigurationNames();
         assertEquals(1, configNames.size());  // only 1 - annotation with conflicting name is ignored
         assertTrue(configNames.contains("simpleConfig"));
         assertEquals("simpleConfig", underTest.getConfigurationMapping("simpleConfig").getConfigName());
-        
+
         // simulate bundle undeployment
         BundleEventUtil.stopDummyBundle(dummyBundle1);
         BundleEventUtil.stopDummyBundle(dummyBundle2);
@@ -126,6 +126,6 @@ public class AnnotationClassConfigurationMetadataProviderTest {
         // no configuration metadata present
         assertTrue(underTest.getConfigurationNames().isEmpty());
     }
-   
-    
+
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassParserTest.java b/src/test/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassParserTest.java
index de2c604..9fee58e 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassParserTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/metadata/AnnotationClassParserTest.java
@@ -79,16 +79,16 @@ public class AnnotationClassParserTest {
     @Test
     public void testBuildConfigurationMetadata_Simple() {
         ConfigurationMetadata metadata = buildConfigurationMetadata(MetadataSimpleConfig.class);
-        
+
         assertEquals("simpleConfig", metadata.getName());
         assertEquals("Simple configuration", metadata.getLabel());
         assertEquals("This is a configuration example with additional metadata.", metadata.getDescription());
         assertEquals(ImmutableMap.of("param1", "value1", "param2", "123"), metadata.getProperties());
         assertFalse(metadata.isCollection());
-        
+
         List<PropertyMetadata<?>> propertyMetadataList = ImmutableList.copyOf(metadata.getPropertyMetadata().values());
         assertEquals(3, propertyMetadataList.size());
-        
+
         PropertyMetadata<?> stringParam = propertyMetadataList.get(0);
         assertEquals("String Param", stringParam.getLabel());
         assertEquals("Enter strings here.", stringParam.getDescription());
@@ -107,42 +107,42 @@ public class AnnotationClassParserTest {
         assertTrue(boolParam.getProperties().isEmpty());
         assertNull(boolParam.getDefaultValue());
     }
-    
+
     @Test
     public void testBuildConfigurationMetadata_List() {
         ConfigurationMetadata metadata = buildConfigurationMetadata(ListConfig.class);
-        
+
         assertEquals(ListConfig.class.getName(), metadata.getName());
         assertTrue(metadata.isCollection());
     }
-    
+
     @Test
     public void testBuildConfigurationMetadata_AllTypes() {
         ConfigurationMetadata metadata = buildConfigurationMetadata(AllTypesConfig.class);
-        
+
         assertEquals(AllTypesConfig.class.getName(), metadata.getName());
         assertNull(metadata.getLabel());
         assertNull(metadata.getDescription());
         assertTrue(metadata.getProperties().isEmpty());
         assertEquals(20, metadata.getPropertyMetadata().size());
     }
-    
+
     @Test
     public void testBuildConfigurationMetadata_Nested() {
         ConfigurationMetadata metadata = buildConfigurationMetadata(NestedConfig.class);
-        
+
         assertEquals(NestedConfig.class.getName(), metadata.getName());
 
         Collection<PropertyMetadata<?>> propertyMetadataList = metadata.getPropertyMetadata().values();
         assertEquals(4, propertyMetadataList.size());
-        
+
         for (PropertyMetadata<?> propertyMetadata : propertyMetadataList) {
             if (StringUtils.equals(propertyMetadata.getName(), "stringParam")) {
                 assertEquals(String.class, propertyMetadata.getType());
             }
             else if (StringUtils.equals(propertyMetadata.getName(), "subConfig")) {
                 assertEquals(ConfigurationMetadata.class, propertyMetadata.getType());
-                
+
                 ConfigurationMetadata subConfigMetadata = propertyMetadata.getConfigurationMetadata();
                 assertEquals("subConfig", subConfigMetadata.getName());
                 assertEquals(3, subConfigMetadata.getPropertyMetadata().size());
@@ -150,14 +150,14 @@ public class AnnotationClassParserTest {
             else if (StringUtils.equals(propertyMetadata.getName(), "subListConfig")) {
                 assertEquals(ConfigurationMetadata[].class, propertyMetadata.getType());
 
-                ConfigurationMetadata subListConfigMetadata = propertyMetadata.getConfigurationMetadata(); 
+                ConfigurationMetadata subListConfigMetadata = propertyMetadata.getConfigurationMetadata();
                 assertEquals("subListConfig", subListConfigMetadata.getName());
                 assertEquals(2, subListConfigMetadata.getPropertyMetadata().size());
             }
             else if (StringUtils.equals(propertyMetadata.getName(), "subConfigWithoutAnnotation")) {
                 assertEquals(ConfigurationMetadata.class, propertyMetadata.getType());
 
-                ConfigurationMetadata subConfigWithoutAnnotationMetadata = propertyMetadata.getConfigurationMetadata(); 
+                ConfigurationMetadata subConfigWithoutAnnotationMetadata = propertyMetadata.getConfigurationMetadata();
                 assertEquals("subConfigWithoutAnnotation", subConfigWithoutAnnotationMetadata.getName());
                 assertEquals(1, subConfigWithoutAnnotationMetadata.getPropertyMetadata().size());
             }
@@ -166,10 +166,10 @@ public class AnnotationClassParserTest {
             }
         }
     }
-    
+
     @Test(expected = IllegalArgumentException.class)
     public void testBuildConfigurationMetadata_IllegalClass() {
         buildConfigurationMetadata(WithoutAnnotationConfig.class);
     }
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImplTest.java b/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImplTest.java
index e5cbe3e..fd8f21a 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/metadata/ConfigurationMetadataProviderMultiplexerImplTest.java
@@ -46,7 +46,7 @@ public class ConfigurationMetadataProviderMultiplexerImplTest {
 
     @Rule
     public SlingContext context = new SlingContext();
-    
+
     private ConfigurationMetadataProviderMultiplexerImpl underTest;
 
     @Before
@@ -56,12 +56,12 @@ public class ConfigurationMetadataProviderMultiplexerImplTest {
         context.registerInjectActivateService(new DefaultConfigurationPersistenceStrategy());
         underTest = context.registerInjectActivateService(new ConfigurationMetadataProviderMultiplexerImpl());
     }
-    
+
     @Test
     public void testWithNoProvider() {
         SortedSet<String> configNames = underTest.getConfigurationNames();
         assertTrue(configNames.isEmpty());
-        
+
         ConfigurationMetadata configMetadata = underTest.getConfigurationMetadata("test1");
         assertNull(configMetadata);
     }
@@ -72,14 +72,14 @@ public class ConfigurationMetadataProviderMultiplexerImplTest {
 
         SortedSet<String> configNames = underTest.getConfigurationNames();
         assertEquals(ImmutableSortedSet.of("test1", "test2"), configNames);
-        
+
         ConfigurationMetadata configMetadata = underTest.getConfigurationMetadata("test1");
         assertEquals("test1", configMetadata.getName());
 
         configMetadata = underTest.getConfigurationMetadata("test2");
         assertEquals("test2", configMetadata.getName());
     }
-    
+
     @Test
     public void testWithTwoProviders() {
         registerConfigurationMetadataProvider("test1");
@@ -87,14 +87,14 @@ public class ConfigurationMetadataProviderMultiplexerImplTest {
 
         SortedSet<String> configNames = underTest.getConfigurationNames();
         assertEquals(ImmutableSortedSet.of("test1", "test2"), configNames);
-        
+
         ConfigurationMetadata configMetadata = underTest.getConfigurationMetadata("test1");
         assertEquals("test1", configMetadata.getName());
 
         configMetadata = underTest.getConfigurationMetadata("test2");
         assertEquals("test2", configMetadata.getName());
     }
-    
+
     private void registerConfigurationMetadataProvider(String... names) {
         final Map<String,ConfigurationMetadata> metadata = new HashMap<>();
         for (String name : names) {
diff --git a/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java b/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java
index 92b236f..d5e14e6 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/override/ConfigurationOverrideMultiplexerImplTest.java
@@ -33,12 +33,12 @@ import org.osgi.framework.Constants;
 import com.google.common.collect.ImmutableMap;
 
 public class ConfigurationOverrideMultiplexerImplTest {
-    
+
     @Rule
     public SlingContext context = new SlingContext();
-    
+
     private ConfigurationOverrideMultiplexerImpl underTest;
-    
+
     @Before
     public void setUp() {
         underTest = context.registerInjectActivateService(new ConfigurationOverrideMultiplexerImpl());
@@ -84,7 +84,7 @@ public class ConfigurationOverrideMultiplexerImplTest {
                 ImmutableMap.<String,Object>of("param1", "initialValue"),
                 null);
     }
-    
+
     private void assertOverride(String path, String configName, Map<String,Object> input, Map<String,Object> output) {
         if (output == null) {
             assertNull(underTest.overrideProperties(path, configName, input));
diff --git a/src/test/java/org/apache/sling/caconfig/impl/override/DummyConfigurationOverrideProvider.java b/src/test/java/org/apache/sling/caconfig/impl/override/DummyConfigurationOverrideProvider.java
index 5950a7a..a92cceb 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/override/DummyConfigurationOverrideProvider.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/override/DummyConfigurationOverrideProvider.java
@@ -27,9 +27,9 @@ import org.jetbrains.annotations.NotNull;
 import com.google.common.collect.ImmutableList;
 
 public class DummyConfigurationOverrideProvider implements ConfigurationOverrideProvider {
-    
+
     private final List<String> overrideStrings;
-    
+
     public DummyConfigurationOverrideProvider(String... overrideStrings) {
         this.overrideStrings = ImmutableList.copyOf(overrideStrings);
     }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProviderTest.java b/src/test/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProviderTest.java
index 3fff5a7..0d863d3 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProviderTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/override/OsgiConfigurationOverrideProviderTest.java
@@ -30,7 +30,7 @@ public class OsgiConfigurationOverrideProviderTest {
 
     @Rule
     public SlingContext context = new SlingContext();
-    
+
     @Test
     public void testEnabled() {
         OsgiConfigurationOverrideProvider provider = context.registerInjectActivateService(
diff --git a/src/test/java/org/apache/sling/caconfig/impl/override/OverrideItemTest.java b/src/test/java/org/apache/sling/caconfig/impl/override/OverrideItemTest.java
index 246de69..f5858d0 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/override/OverrideItemTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/override/OverrideItemTest.java
@@ -30,10 +30,10 @@ import org.junit.Test;
 import com.google.common.collect.ImmutableMap;
 
 public class OverrideItemTest {
-    
+
     private Map<String,Object> props;
     private OverrideItem underTest;
-    
+
     @Before
     public void setUp() {
         props = ImmutableMap.<String,Object>of("p1", "abc", "p2", 55);
diff --git a/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java b/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java
index 0b5316f..b772001 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/override/OverrideStringParserTest.java
@@ -41,7 +41,7 @@ public class OverrideStringParserTest {
             .put("param4", 1.23d)
             .put("param5", true)
             .build();
-    
+
     private static final Map<String,Object> BASICTYPES_ARRAY_MAP = ImmutableMap.<String,Object>builder()
             .put("param1", new String[] { "v1a", "v1b" })
             .put("param2", new String[] { "v2a", "v2b" })
@@ -50,13 +50,13 @@ public class OverrideStringParserTest {
             .put("param5", new Boolean[] { true, false })
             .put("param6", new String[0])
             .build();
-    
+
     @Test
     public void testEmptyList() {
         List<OverrideItem> result = parse();
         assertTrue(result.isEmpty());
     }
-    
+
     @Test
     public void testBasicTypes() {
         List<OverrideItem> result = parse(
@@ -65,7 +65,7 @@ public class OverrideStringParserTest {
                 "configName/param3=555",
                 "configName/param4=1.23",
                 "configName/param5=true");
-        
+
         assertEquals(1, result.size());
         OverrideItem item = result.get(0);
         assertNull(item.getPath());
@@ -83,7 +83,7 @@ public class OverrideStringParserTest {
                 "config.name/param4=[1.23,2.34]",
                 "config.name/param5=[true,false]",
                 "config.name/param6=[]");
-        
+
         assertEquals(1, result.size());
         OverrideItem item = result.get(0);
         assertNull(item.getPath());
@@ -136,9 +136,9 @@ public class OverrideStringParserTest {
         List<OverrideItem> result = parse(
                 "[/a/b]configName/sub1/param1=\"value1\"",
                 "configName/sub2/param2=\"value2\"");
-        
+
         assertEquals(2, result.size());
-        
+
         OverrideItem item1 = result.get(0);
         assertEquals("/a/b", item1.getPath());
         assertEquals("configName/sub1", item1.getConfigName());
@@ -162,9 +162,9 @@ public class OverrideStringParserTest {
                         + "\"param3\":555,"
                         + "\"param4\":1.23,"
                         + "\"param5\":true}");
-        
+
         assertEquals(3, result.size());
-        
+
         OverrideItem item1 = result.get(0);
         assertEquals("/a/b", item1.getPath());
         assertEquals("configName", item1.getConfigName());
@@ -199,7 +199,7 @@ public class OverrideStringParserTest {
                 "[[/a/b]]configName/param4=1.23",
                 "[a/b]configName/param5=true",
                 "configName/param1=null");
-        
+
         // all ignored
         assertEquals(0, result.size());
     }
diff --git a/src/test/java/org/apache/sling/caconfig/impl/override/SystemPropertyConfigurationOverrideProviderTest.java b/src/test/java/org/apache/sling/caconfig/impl/override/SystemPropertyConfigurationOverrideProviderTest.java
index 8c5e8e9..96bca54 100644
--- a/src/test/java/org/apache/sling/caconfig/impl/override/SystemPropertyConfigurationOverrideProviderTest.java
+++ b/src/test/java/org/apache/sling/caconfig/impl/override/SystemPropertyConfigurationOverrideProviderTest.java
@@ -33,7 +33,7 @@ public class SystemPropertyConfigurationOverrideProviderTest {
 
     @Rule
     public SlingContext context = new SlingContext();
-    
+
     @Before
     public void setUp() {
         System.setProperty(SYSTEM_PROPERTY_PREFIX + "test/param1", "value1");
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImplTest.java b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImplTest.java
index cacb4de..33a0882 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImplTest.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagementSettingsImplTest.java
@@ -32,15 +32,15 @@ public class ConfigurationManagementSettingsImplTest {
 
     @Rule
     public SlingContext context = new SlingContext();
-    
+
     @Test
     public void testDefault() {
         ConfigurationManagementSettings underTest = context.registerInjectActivateService(new ConfigurationManagementSettingsImpl());
-        
+
         assertEquals(ImmutableSet.<String>of(), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of()));
         assertEquals(ImmutableSet.<String>of(), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of("abc", "def")));
         assertEquals(ImmutableSet.<String>of("jcr:xyz", "jcr:def"), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of("abc", "jcr:xyz", "jcr:def")));
-        
+
         assertEquals(ImmutableList.of("."), underTest.getConfigCollectionPropertiesResourceNames());
     }
 
@@ -49,7 +49,7 @@ public class ConfigurationManagementSettingsImplTest {
         ConfigurationManagementSettings underTest = context.registerInjectActivateService(new ConfigurationManagementSettingsImpl(),
                 "ignorePropertyNameRegex", new String[] { "^.*e.*$", "^.*b.*$" },
                 "configCollectionPropertiesResourceNames", new String[] { "a", "b" });
-        
+
         assertEquals(ImmutableSet.<String>of(), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of()));
         assertEquals(ImmutableSet.<String>of("abc", "def"), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of("abc", "def")));
         assertEquals(ImmutableSet.<String>of("abc", "jcr:def"), underTest.getIgnoredPropertyNames(ImmutableSet.<String>of("abc", "jcr:xyz", "jcr:def")));
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
index d21d742..32e2790 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
@@ -43,10 +43,10 @@ import org.jetbrains.annotations.Nullable;
  * which reads and stores data from a sub-resources named "jcr:content".
  */
 public class CustomConfigurationPersistenceStrategy implements ConfigurationPersistenceStrategy2 {
-    
-    private static final String DEFAULT_RESOURCE_TYPE = JcrConstants.NT_UNSTRUCTURED;    
+
+    private static final String DEFAULT_RESOURCE_TYPE = JcrConstants.NT_UNSTRUCTURED;
     private static final String CHILD_NODE_NAME = JcrConstants.JCR_CONTENT;
-    
+
     @Override
     public Resource getResource(@NotNull Resource resource) {
         assertNotNull(resource);
@@ -100,7 +100,7 @@ public class CustomConfigurationPersistenceStrategy implements ConfigurationPers
         assertNotNull(configName);
         return configName + "/" + CHILD_NODE_NAME;
     }
-    
+
     @Override
     public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
             @NotNull ConfigurationPersistData data) {
@@ -113,23 +113,23 @@ public class CustomConfigurationPersistenceStrategy implements ConfigurationPers
     public boolean persistConfigurationCollection(@NotNull ResourceResolver resourceResolver, @NotNull String configResourceCollectionParentPath,
             @NotNull ConfigurationCollectionPersistData data) {
         Resource configResourceParent = getOrCreateResource(resourceResolver, configResourceCollectionParentPath, ValueMap.EMPTY);
-        
+
         // delete existing children and create new ones
         deleteChildren(configResourceParent);
         for (ConfigurationPersistData item : data.getItems()) {
             String path = configResourceParent.getPath() + "/" + item.getCollectionItemName() + "/" + CHILD_NODE_NAME;
             getOrCreateResource(resourceResolver, path, item.getProperties());
         }
-        
+
         // if resource collection parent properties are given replace them as well
         if (data.getProperties() != null) {
             replaceProperties(configResourceParent, data.getProperties());
         }
-        
+
         commit(resourceResolver);
         return true;
     }
-    
+
     @Override
     public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
         Resource resource = resourceResolver.getResource(configResourcePath);
@@ -167,7 +167,7 @@ public class CustomConfigurationPersistenceStrategy implements ConfigurationPers
             throw new ConfigurationPersistenceException("Unable to remove children from " + resource.getPath(), ex);
         }
     }
-    
+
     @SuppressWarnings("null")
     private void replaceProperties(Resource resource, Map<String,Object> properties) {
         ModifiableValueMap modValueMap = resource.adaptTo(ModifiableValueMap.class);
diff --git a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
index 06af08c..cab5452 100644
--- a/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
+++ b/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy2.java
@@ -42,17 +42,17 @@ import org.jetbrains.annotations.Nullable;
 /**
  * This is a variant of {@link org.apache.sling.caconfig.impl.def.DefaultConfigurationPersistenceStrategy}
  * which reads and stores data from a sub-resources named "jcr:content".
- * 
+ *
  * Difference to {@link CustomConfigurationPersistenceStrategy}:
  * - For configuration collections jcr:content is added only for the parent, not for each item
  * - For nested configuration jcr:content is not duplicated in the path
  */
 public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPersistenceStrategy2 {
-    
-    private static final String DEFAULT_RESOURCE_TYPE = JcrConstants.NT_UNSTRUCTURED;    
+
+    private static final String DEFAULT_RESOURCE_TYPE = JcrConstants.NT_UNSTRUCTURED;
     private static final String CHILD_NODE_NAME = JcrConstants.JCR_CONTENT;
     private static final Pattern JCR_CONTENT_PATTERN = Pattern.compile("(.*/)?" + Pattern.quote(CHILD_NODE_NAME) + "(/.*)?");
-    
+
     @Override
     public Resource getResource(@NotNull Resource resource) {
         assertNotNull(resource);
@@ -136,7 +136,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
         assertNotNull(configName);
         return configName;
     }
-    
+
     @Override
     public boolean persistConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath,
             @NotNull ConfigurationPersistData data) {
@@ -150,24 +150,24 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
             @NotNull ConfigurationCollectionPersistData data) {
         String parentPath = getCollectionParentResourcePath(configResourceCollectionParentPath);
         Resource configResourceParent = getOrCreateResource(resourceResolver, parentPath, ValueMap.EMPTY);
-        
+
         // delete existing children and create new ones
         deleteChildren(configResourceParent);
         for (ConfigurationPersistData item : data.getItems()) {
             String path = configResourceParent.getPath() + "/" + item.getCollectionItemName();
             getOrCreateResource(resourceResolver, path, item.getProperties());
         }
-        
+
         // if resource collection parent properties are given replace them as well
         if (data.getProperties() != null) {
             Resource propsResource = getOrCreateResource(resourceResolver, parentPath + "/colPropsResource", ValueMap.EMPTY);
             replaceProperties(propsResource, data.getProperties());
         }
-        
+
         commit(resourceResolver);
         return true;
     }
-    
+
     @Override
     public boolean deleteConfiguration(@NotNull ResourceResolver resourceResolver, @NotNull String configResourcePath) {
         Resource resource = resourceResolver.getResource(configResourcePath);
@@ -205,7 +205,7 @@ public class CustomConfigurationPersistenceStrategy2 implements ConfigurationPer
             throw new ConfigurationPersistenceException("Unable to remove children from " + resource.getPath(), ex);
         }
     }
-    
+
     @SuppressWarnings("null")
     private void replaceProperties(Resource resource, Map<String,Object> properties) {
         ModifiableValueMap modValueMap = resource.adaptTo(ModifiableValueMap.class);
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceTestUtils.java b/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceTestUtils.java
index 2874214..a0b989b 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceTestUtils.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceTestUtils.java
@@ -25,7 +25,7 @@ import org.apache.sling.caconfig.resource.impl.def.DefaultContextPathStrategy;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 
 public final class ConfigurationResourceTestUtils {
-    
+
     private ConfigurationResourceTestUtils() {
         // static methods only
     }
@@ -41,7 +41,7 @@ public final class ConfigurationResourceTestUtils {
         context.registerInjectActivateService(new ConfigurationResourceResolvingStrategyMultiplexerImpl());
         return context.registerInjectActivateService(new ConfigurationResourceResolverImpl());
     }
-    
+
     /**
      * Register all services for {@link ConfigurationResourceResolver}
      * without the default implementations of the multiplexed services.
@@ -52,5 +52,5 @@ public final class ConfigurationResourceTestUtils {
         context.registerInjectActivateService(new ConfigurationResourceResolvingStrategyMultiplexerImpl());
         return context.registerInjectActivateService(new ConfigurationResourceResolverImpl());
     }
-    
+
 }
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java
index 67b2b47..b9606e2 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java
@@ -40,7 +40,7 @@ public class ConfigNameUtilTest {
         assertTrue(ConfigNameUtil.isValid(ImmutableList.<String>of()));
         assertTrue(ConfigNameUtil.isValid(ImmutableList.of("a")));
         assertTrue(ConfigNameUtil.isValid(ImmutableList.of("a", "a/b", "a/b/c")));
-        
+
         assertFalse(ConfigNameUtil.isValid((String)null));
         assertFalse(ConfigNameUtil.isValid(""));
         assertFalse(ConfigNameUtil.isValid("/a"));
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/util/ContextResourceTestUtil.java b/src/test/java/org/apache/sling/caconfig/resource/impl/util/ContextResourceTestUtil.java
index fac1b58..6185eea 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/util/ContextResourceTestUtil.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/util/ContextResourceTestUtil.java
@@ -26,11 +26,11 @@ import org.apache.sling.api.resource.Resource;
 import org.apache.sling.caconfig.resource.spi.ContextResource;
 
 public final class ContextResourceTestUtil {
-    
+
     private ContextResourceTestUtil() {
         // static methods only
     }
-    
+
     @SuppressWarnings("unchecked")
     public static Iterator<Resource> toResourceIterator(Iterator<ContextResource> contextResources) {
         return IteratorUtils.transformedIterator(contextResources, new Transformer() {
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java
index b60ca1c..0d3c12b 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/util/MapUtilTest.java
@@ -30,7 +30,7 @@ public class MapUtilTest {
     @Test
     public void testTraceOutput() {
         assertEquals("{}", traceOutput(ImmutableMap.<String,Object>of()));
-        
+
         assertEquals("{prop1: 'aa', prop2: 5, prop3: true}", traceOutput(ImmutableMap.<String,Object>of(
                 "prop1", "aa",
                 "prop2", 5,
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/util/PathEliminateDuplicatesIteratorTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/util/PathEliminateDuplicatesIteratorTest.java
index 1e696f4..da8fc41 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/util/PathEliminateDuplicatesIteratorTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/util/PathEliminateDuplicatesIteratorTest.java
@@ -31,11 +31,11 @@ public class PathEliminateDuplicatesIteratorTest {
     @Test
     public void testIterator() {
         List<String> paths = ImmutableList.of(
-                "/conf/a", 
+                "/conf/a",
                 "/conf/a/b",
                 "/conf/a",
                 "/conf/a/b/c");
-        
+
         List<String> result = ImmutableList.copyOf(new PathEliminateDuplicatesIterator(paths.iterator()));
         assertEquals(ImmutableList.of(
                 "/conf/a",
diff --git a/src/test/java/org/apache/sling/caconfig/resource/impl/util/PathParentExpandIteratorTest.java b/src/test/java/org/apache/sling/caconfig/resource/impl/util/PathParentExpandIteratorTest.java
index f240896..0061c93 100644
--- a/src/test/java/org/apache/sling/caconfig/resource/impl/util/PathParentExpandIteratorTest.java
+++ b/src/test/java/org/apache/sling/caconfig/resource/impl/util/PathParentExpandIteratorTest.java
@@ -31,10 +31,10 @@ public class PathParentExpandIteratorTest {
     @Test
     public void testIterator() {
         List<String> list = ImmutableList.of(
-                "/conf/a/b/c", 
+                "/conf/a/b/c",
                 "/conf/a/b",
                 "/conf/x/y/z");
-        
+
         List<String> result = ImmutableList.copyOf(new PathParentExpandIterator("/conf", list.iterator()));
         assertEquals(ImmutableList.of(
                 "/conf/a/b/c",