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 2016/12/07 18:03:17 UTC
svn commit: r1773130 [1/2] - in
/sling/trunk/contrib/extensions/contextaware-config:
impl/src/main/java/org/apache/sling/caconfig/impl/
impl/src/main/java/org/apache/sling/caconfig/management/impl/
impl/src/main/java/org/apache/sling/caconfig/resource/...
Author: sseifert
Date: Wed Dec 7 18:03:16 2016
New Revision: 1773130
URL: http://svn.apache.org/viewvc?rev=1773130&view=rev
Log:
SLING-6373 Context-Aware Config: Allow alternative configuration bucket names
Added:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceResolverConfig.java (with props)
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceMixedTest.java (with props)
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexer.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyTest.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtilTest.java
sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/resource/spi/ConfigurationResourceResolvingStrategy.java
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBuilderImpl.java Wed Dec 7 18:03:16 2016
@@ -18,8 +18,6 @@
*/
package org.apache.sling.caconfig.impl;
-import static org.apache.sling.caconfig.impl.ConfigurationNameConstants.CONFIGS_BUCKET_NAME;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -49,6 +47,7 @@ class ConfigurationBuilderImpl implement
private final ConfigurationPersistenceStrategy configurationPersistenceStrategy;
private final ConfigurationInheritanceStrategy configurationInheritanceStrategy;
private final ConfigurationOverrideManager configurationOverrideManager;
+ private final Collection<String> configBucketNames;
private String configName;
@@ -57,13 +56,15 @@ class ConfigurationBuilderImpl implement
final ConfigurationResourceResolvingStrategy configurationResourceResolvingStrategy,
final ConfigurationPersistenceStrategy configurationPersistenceStrategy,
final ConfigurationInheritanceStrategy configurationInheritanceStrategy,
- final ConfigurationOverrideManager configurationOverrideManager) {
+ final ConfigurationOverrideManager configurationOverrideManager,
+ final Collection<String> configBucketNames) {
this.contentResource = resource;
this.configurationResolver = configurationResolver;
this.configurationResourceResolvingStrategy = configurationResourceResolvingStrategy;
this.configurationPersistenceStrategy = configurationPersistenceStrategy;
this.configurationInheritanceStrategy = configurationInheritanceStrategy;
this.configurationOverrideManager = configurationOverrideManager;
+ this.configBucketNames = configBucketNames;
}
@Override
@@ -103,7 +104,7 @@ class ConfigurationBuilderImpl implement
if (this.contentResource != null) {
validateConfigurationName(name);
resourceInheritanceChain = this.configurationResourceResolvingStrategy
- .getResourceInheritanceChain(this.contentResource, CONFIGS_BUCKET_NAME, name);
+ .getResourceInheritanceChain(this.contentResource, configBucketNames, name);
}
return convert(resourceInheritanceChain, clazz, converter, name, false);
}
@@ -119,11 +120,14 @@ class ConfigurationBuilderImpl implement
if (this.contentResource != null) {
validateConfigurationName(name);
final Collection<T> result = new ArrayList<>();
- for (final Iterator<Resource> resourceInheritanceChain : this.configurationResourceResolvingStrategy
- .getResourceCollectionInheritanceChain(this.contentResource, CONFIGS_BUCKET_NAME, name)) {
- final T obj = convert(resourceInheritanceChain, clazz, converter, name, true);
- if (obj != null) {
- result.add(obj);
+ Collection<Iterator<Resource>> resourceInheritanceChains = this.configurationResourceResolvingStrategy
+ .getResourceCollectionInheritanceChain(this.contentResource, configBucketNames, name);;
+ if (resourceInheritanceChains != null) {
+ for (final Iterator<Resource> resourceInheritanceChain : resourceInheritanceChains) {
+ final T obj = convert(resourceInheritanceChain, clazz, converter, name, true);
+ if (obj != null) {
+ result.add(obj);
+ }
}
}
return result;
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResolverImpl.java Wed Dec 7 18:03:16 2016
@@ -18,17 +18,29 @@
*/
package org.apache.sling.caconfig.impl;
+import static org.apache.sling.caconfig.impl.ConfigurationNameConstants.CONFIGS_BUCKET_NAME;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.caconfig.ConfigurationBuilder;
import org.apache.sling.caconfig.ConfigurationResolver;
import org.apache.sling.caconfig.impl.override.ConfigurationOverrideManager;
import org.apache.sling.caconfig.management.impl.ConfigurationPersistenceStrategyMultiplexer;
import org.apache.sling.caconfig.resource.impl.ConfigurationResourceResolvingStrategyMultiplexer;
+import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
-@Component(service=ConfigurationResolver.class, immediate=true)
-public class ConfigurationResolverImpl implements ConfigurationResolver {
+@Component(service={ ConfigurationResolver.class, ConfigurationResourceResolverConfig.class }, immediate=true)
+@Designate(ocd=ConfigurationResolverImpl.Config.class)
+public class ConfigurationResolverImpl implements ConfigurationResolver, ConfigurationResourceResolverConfig {
@Reference
private ConfigurationResourceResolvingStrategyMultiplexer configurationResourceResolvingStrategy;
@@ -39,11 +51,41 @@ public class ConfigurationResolverImpl i
@Reference
private ConfigurationOverrideManager configurationOverrideManager;
+ @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<>();
+ configBucketNames.add(ConfigurationNameConstants.CONFIGS_BUCKET_NAME);
+ if (!ArrayUtils.isEmpty(config.configBucketNames())) {
+ configBucketNames.addAll(Arrays.asList(config.configBucketNames()));
+ }
+ }
+
@Override
public ConfigurationBuilder get(Resource resource) {
return new ConfigurationBuilderImpl(resource, this,
configurationResourceResolvingStrategy, configurationPersistenceStrategy,
- configurationInheritanceStrategy, configurationOverrideManager);
+ configurationInheritanceStrategy, configurationOverrideManager,
+ configBucketNames);
+ }
+
+ @Override
+ public Collection<String> configBucketNames() {
+ return configBucketNames;
}
}
Added: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceResolverConfig.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceResolverConfig.java?rev=1773130&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceResolverConfig.java (added)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceResolverConfig.java Wed Dec 7 18:03:16 2016
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.caconfig.impl;
+
+import java.util.Collection;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Internal service for accessing the ConfigurationResourceResolver configuration from other services.
+ */
+public interface ConfigurationResourceResolverConfig {
+
+ /**
+ * All bucket names starting with sling:configs and the alternative ones.
+ * @return Bucket names
+ */
+ @Nonnull Collection<String> configBucketNames();
+
+}
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceResolverConfig.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceResolverConfig.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed Dec 7 18:03:16 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/ConfigurationResourceResolverConfig.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java Wed Dec 7 18:03:16 2016
@@ -34,6 +34,7 @@ import org.apache.commons.collections.it
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.caconfig.impl.ConfigurationInheritanceStrategyMultiplexer;
+import org.apache.sling.caconfig.impl.ConfigurationResourceResolverConfig;
import org.apache.sling.caconfig.impl.metadata.ConfigurationMetadataProviderMultiplexer;
import org.apache.sling.caconfig.impl.override.ConfigurationOverrideManager;
import org.apache.sling.caconfig.management.ConfigurationCollectionData;
@@ -62,6 +63,8 @@ public class ConfigurationManagerImpl im
private ConfigurationInheritanceStrategyMultiplexer configurationInheritanceStrategy;
@Reference
private ConfigurationOverrideManager configurationOverrideManager;
+ @Reference
+ private ConfigurationResourceResolverConfig configurationResourceResolverConfig;
@SuppressWarnings("unchecked")
@Override
@@ -69,21 +72,29 @@ public class ConfigurationManagerImpl im
ConfigNameUtil.ensureValidConfigName(configName);
ConfigurationMetadata configMetadata = getConfigurationMetadata(configName);
Resource configResource = null;
+
Iterator<Resource> configResourceInheritanceChain = configurationResourceResolvingStrategy
- .getResourceInheritanceChain(resource, CONFIGS_BUCKET_NAME, configName);
+ .getResourceInheritanceChain(resource, configurationResourceResolverConfig.configBucketNames(), configName);;
+
if (configResourceInheritanceChain != null) {
ResettableIterator resettableConfigResourceInheritanceChain = new ListIteratorWrapper(configResourceInheritanceChain);
configResource = applyPersistenceAndInheritance(resource.getPath(), configName, resettableConfigResourceInheritanceChain);
if (configResource != null) {
// get writeback resource for "reverse inheritance detection"
Resource writebackConfigResource = null;
- String writebackConfigResourcePath = configurationResourceResolvingStrategy.getResourcePath(resource, CONFIGS_BUCKET_NAME, configName);
- if (writebackConfigResourcePath != null) {
- writebackConfigResource = configResource.getResourceResolver().getResource(writebackConfigResourcePath);
- if (writebackConfigResource != null) {
- writebackConfigResource = configurationPersistenceStrategy.getResource(writebackConfigResource);
+
+ String writebackConfigResourcePath = null;
+ for (String configBucketName : configurationResourceResolverConfig.configBucketNames()) {
+ writebackConfigResourcePath = configurationResourceResolvingStrategy.getResourcePath(resource, configBucketName, configName);
+ if (writebackConfigResourcePath != null) {
+ writebackConfigResource = resource.getResourceResolver().getResource(writebackConfigResourcePath);
+ if (writebackConfigResource != null) {
+ writebackConfigResource = configurationPersistenceStrategy.getResource(writebackConfigResource);
+ break;
+ }
}
}
+
resettableConfigResourceInheritanceChain.reset();
return new ConfigurationDataImpl(configMetadata, configResource, writebackConfigResource,
applyPersistence(resettableConfigResourceInheritanceChain),
@@ -103,12 +114,13 @@ public class ConfigurationManagerImpl im
public ConfigurationCollectionData getConfigurationCollection(Resource resource, String configName) {
ConfigNameUtil.ensureValidConfigName(configName);
ConfigurationMetadata configMetadata = getConfigurationMetadata(configName);
- String writebackConfigResourceCollectionParentPath = configurationResourceResolvingStrategy.getResourceCollectionParentPath(resource, CONFIGS_BUCKET_NAME, configName);
List<ConfigurationData> configData = new ArrayList<>();
// get configuration resource items
Collection<Iterator<Resource>> configResourceInheritanceChains = configurationResourceResolvingStrategy
- .getResourceCollectionInheritanceChain(resource, CONFIGS_BUCKET_NAME, configName);
+ .getResourceCollectionInheritanceChain(resource, configurationResourceResolverConfig.configBucketNames(), configName);
+
+ String writebackConfigResourceCollectionParentPath = null;
if (configResourceInheritanceChains != null) {
for (Iterator<Resource> configResourceInheritanceChain : configResourceInheritanceChains) {
ResettableIterator resettableConfigResourceInheritanceChain = new ListIteratorWrapper(configResourceInheritanceChain);
@@ -118,13 +130,19 @@ public class ConfigurationManagerImpl im
if (configResource != null) {
// get writeback resource for "reverse inheritance detection"
Resource writebackConfigResource = null;
- if (writebackConfigResourceCollectionParentPath != null) {
- writebackConfigResource = configResource.getResourceResolver().getResource(
- writebackConfigResourceCollectionParentPath + "/" + untransformedConfigResource.getName());
- if (writebackConfigResource != null) {
- writebackConfigResource = configurationPersistenceStrategy.getResource(writebackConfigResource);
+
+ for (String configBucketName : configurationResourceResolverConfig.configBucketNames()) {
+ writebackConfigResourceCollectionParentPath = configurationResourceResolvingStrategy.getResourceCollectionParentPath(resource, configBucketName, configName);
+ if (writebackConfigResourceCollectionParentPath != null) {
+ writebackConfigResource = configResource.getResourceResolver().getResource(
+ writebackConfigResourceCollectionParentPath + "/" + untransformedConfigResource.getName());
+ if (writebackConfigResource != null) {
+ writebackConfigResource = configurationPersistenceStrategy.getResource(writebackConfigResource);
+ break;
+ }
}
}
+
resettableConfigResourceInheritanceChain.reset();
configData.add(new ConfigurationDataImpl(configMetadata, configResource, writebackConfigResource,
applyPersistence(resettableConfigResourceInheritanceChain),
@@ -218,12 +236,20 @@ public class ConfigurationManagerImpl im
@Override
public void deleteConfiguration(Resource resource, String configName) {
ConfigNameUtil.ensureValidConfigName(configName);
- String configResourcePath = configurationResourceResolvingStrategy.getResourcePath(resource, CONFIGS_BUCKET_NAME, configName);
- if (configResourcePath == null) {
- throw new ConfigurationPersistenceException("Unable to delete configuration: Configuration resolving strategy returned no path.");
+
+ // try to delete from all config bucket names
+ boolean foundAnyPath = false;
+ for (String configBucketName : configurationResourceResolverConfig.configBucketNames()) {
+ String configResourcePath = configurationResourceResolvingStrategy.getResourcePath(resource, configBucketName, configName);
+ if (configResourcePath != null) {
+ foundAnyPath = true;
+ if (!configurationPersistenceStrategy.deleteConfiguration(resource.getResourceResolver(), configResourcePath)) {
+ throw new ConfigurationPersistenceException("Unable to delete configuration: No persistence strategy found.");
+ }
+ }
}
- if (!configurationPersistenceStrategy.deleteConfiguration(resource.getResourceResolver(), configResourcePath)) {
- throw new ConfigurationPersistenceException("Unable to delete configuration: No persistence strategy found.");
+ if (!foundAnyPath) {
+ throw new ConfigurationPersistenceException("Unable to delete configuration: Configuration resolving strategy returned no path.");
}
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolverImpl.java Wed Dec 7 18:03:16 2016
@@ -20,6 +20,7 @@ package org.apache.sling.caconfig.resour
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -42,13 +43,13 @@ public class ConfigurationResourceResolv
@Override
public Resource getResource(Resource resource, String bucketName, String configName) {
ConfigNameUtil.ensureValidConfigName(configName);
- return configurationResourceResolvingStrategy.getResource(resource, bucketName, configName);
+ return configurationResourceResolvingStrategy.getResource(resource, Collections.singleton(bucketName), configName);
}
@Override
public Collection<Resource> getResourceCollection(Resource resource, String bucketName, String configName) {
ConfigNameUtil.ensureValidConfigName(configName);
- return configurationResourceResolvingStrategy.getResourceCollection(resource, bucketName, configName);
+ return configurationResourceResolvingStrategy.getResourceCollection(resource, Collections.singleton(bucketName), configName);
}
@Override
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexer.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexer.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexer.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexer.java Wed Dec 7 18:03:16 2016
@@ -59,9 +59,9 @@ public class ConfigurationResourceResolv
* Gets the configuration resource from the first implementation that has an answer.
*/
@Override
- public Resource getResource(Resource resource, String bucketName, String configName) {
+ public Resource getResource(Resource resource, Collection<String> bucketNames, String configName) {
for (ConfigurationResourceResolvingStrategy item : items) {
- Resource result = item.getResource(resource, bucketName, configName);
+ Resource result = item.getResource(resource, bucketNames, configName);
if (result != null) {
return result;
}
@@ -73,9 +73,9 @@ public class ConfigurationResourceResolv
* Gets the configuration resource collection from the first implementation that has an answer.
*/
@Override
- public Collection<Resource> getResourceCollection(Resource resource, String bucketName, String configName) {
+ public Collection<Resource> getResourceCollection(Resource resource, Collection<String> bucketNames, String configName) {
for (ConfigurationResourceResolvingStrategy item : items) {
- Collection<Resource> result = item.getResourceCollection(resource, bucketName, configName);
+ Collection<Resource> result = item.getResourceCollection(resource, bucketNames, configName);
if (result != null) {
return result;
}
@@ -87,9 +87,9 @@ public class ConfigurationResourceResolv
* Gets the configuration resource inheritance chain from the first implementation that has an answer.
*/
@Override
- public Iterator<Resource> getResourceInheritanceChain(Resource resource, String bucketName, String configName) {
+ public Iterator<Resource> getResourceInheritanceChain(Resource resource, Collection<String> bucketNames, String configName) {
for (ConfigurationResourceResolvingStrategy item : items) {
- Iterator<Resource> result = item.getResourceInheritanceChain(resource, bucketName, configName);
+ Iterator<Resource> result = item.getResourceInheritanceChain(resource, bucketNames, configName);
if (result != null) {
return result;
}
@@ -101,10 +101,10 @@ public class ConfigurationResourceResolv
* Gets the configuration resource collection inheritance chains from the first implementation that has an answer.
*/
@Override
- public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(Resource resource, String bucketName,
+ public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(Resource resource, Collection<String> bucketNames,
String configName) {
for (ConfigurationResourceResolvingStrategy item : items) {
- Collection<Iterator<Resource>> result = item.getResourceCollectionInheritanceChain(resource, bucketName, configName);
+ Collection<Iterator<Resource>> result = item.getResourceCollectionInheritanceChain(resource, bucketNames, configName);
if (result != null) {
return result;
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java Wed Dec 7 18:03:16 2016
@@ -22,6 +22,7 @@ import static org.apache.sling.caconfig.
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -114,10 +115,10 @@ public class DefaultConfigurationResourc
}
@SuppressWarnings("unchecked")
- Iterator<String> getResolvePaths(final Resource contentResource, final String bucketName) {
+ Iterator<String> getResolvePaths(final Resource contentResource, final Collection<String> bucketNames) {
return new IteratorChain(
// add all config references found in resource hierarchy
- findConfigRefs(contentResource, bucketName),
+ findConfigRefs(contentResource, bucketNames),
// finally add the global fallbacks
new ArrayIterator(this.config.fallbackPaths())
);
@@ -129,8 +130,7 @@ public class DefaultConfigurationResourc
* @param startResource Resource to start searching
*/
@SuppressWarnings("unchecked")
- private Iterator<String> findConfigRefs(final Resource startResource, final String bucketName) {
- final String notAllowedPostfix = "/" + bucketName;
+ private Iterator<String> findConfigRefs(final Resource startResource, final Collection<String> bucketNames) {
// collect all context path resources (but filter out those without config reference)
final Iterator<ContextResource> contextResources = new FilterIterator(contextPathStrategy.findContextResources(startResource),
@@ -156,7 +156,7 @@ public class DefaultConfigurationResourc
while ( val == null && (useFromRelativePathsWith != null || contextResources.hasNext()) ) {
if ( useFromRelativePathsWith != null ) {
final ContextResource contextResource = relativePaths.remove(relativePaths.size() - 1);
- val = checkPath(contextResource, useFromRelativePathsWith + "/" + contextResource.getConfigRef(), notAllowedPostfix);
+ val = checkPath(contextResource, useFromRelativePathsWith + "/" + contextResource.getConfigRef(), bucketNames);
if ( relativePaths.isEmpty() ) {
useFromRelativePathsWith = null;
@@ -167,7 +167,7 @@ public class DefaultConfigurationResourc
// if absolute path found we are (probably) done
if (val != null && val.startsWith("/")) {
- val = checkPath(contextResource, val, notAllowedPostfix);
+ val = checkPath(contextResource, val, bucketNames);
}
if (val != null) {
@@ -215,15 +215,19 @@ public class DefaultConfigurationResourc
return new PathEliminateDuplicatesIterator(new PathParentExpandIterator(config.configPath(), configPaths));
}
- private String checkPath(final ContextResource contextResource, String ref, final String notAllowedPostfix) {
+ private String checkPath(final ContextResource contextResource, String ref, final Collection<String> bucketNames) {
// combine full path if relativeRef is present
ref = ResourceUtil.normalize(ref);
- if (ref != null && ref.endsWith(notAllowedPostfix) ) {
- logger.warn("Ignoring reference to {} from {} - Probably misconfigured as it ends with '{}'",
- contextResource.getConfigRef(), contextResource.getResource().getPath(), notAllowedPostfix);
- ref = null;
+ for (String bucketName : bucketNames) {
+ String notAllowedPostfix = "/" + bucketName;
+ if (ref != null && ref.endsWith(notAllowedPostfix)) {
+ logger.warn("Ignoring reference to {} from {} - Probably misconfigured as it ends with '{}'",
+ contextResource.getConfigRef(), contextResource.getResource().getPath(), notAllowedPostfix);
+ ref = null;
+ }
}
+
if (ref != null && !isAllowedConfigPath(ref)) {
logger.warn("Ignoring reference to {} from {} - not in allowed paths.",
contextResource.getConfigRef(), contextResource.getResource().getPath());
@@ -255,8 +259,8 @@ public class DefaultConfigurationResourc
return false;
}
- private boolean isEnabledAndParamsValid(final Resource contentResource, final String bucketName, final String configName) {
- return config.enabled() && contentResource != null && ConfigNameUtil.isValid(bucketName) && ConfigNameUtil.isValid(configName);
+ private boolean isEnabledAndParamsValid(final Resource contentResource, final Collection<String> bucketNames, final String configName) {
+ return config.enabled() && contentResource != null && ConfigNameUtil.isValid(bucketNames) && ConfigNameUtil.isValid(configName);
}
private String buildResourcePath(String path, String name) {
@@ -264,8 +268,8 @@ public class DefaultConfigurationResourc
}
@Override
- public Resource getResource(final Resource contentResource, final String bucketName, final String configName) {
- Iterator<Resource> resources = getResourceInheritanceChain(contentResource, bucketName, configName);
+ public Resource getResource(final Resource contentResource, final Collection<String> bucketNames, final String configName) {
+ Iterator<Resource> resources = getResourceInheritanceChain(contentResource, bucketNames, configName);
if (resources != null && resources.hasNext()) {
return resources.next();
}
@@ -273,32 +277,40 @@ public class DefaultConfigurationResourc
}
@SuppressWarnings("unchecked")
- private Iterator<Resource> getResourceInheritanceChainInternal(final String bucketName, final String configName,
+ private Iterator<Resource> getResourceInheritanceChainInternal(final Collection<String> bucketNames, final String configName,
final Iterator<String> paths, final ResourceResolver resourceResolver) {
- final String name = bucketName + "/" + configName;
// find all matching items among all configured paths
Iterator<Resource> matchingResources = IteratorUtils.transformedIterator(paths, new Transformer() {
@Override
public Object transform(Object input) {
String path = (String)input;
- return resourceResolver.getResource(buildResourcePath(path, name));
+ for (String bucketName : bucketNames) {
+ final String name = bucketName + "/" + configName;
+ Resource resource = resourceResolver.getResource(buildResourcePath(path, name));
+ if (resource != null) {
+ return resource;
+ }
+ }
+ return null;
}
});
- return IteratorUtils.filteredIterator(matchingResources, PredicateUtils.notNullPredicate());
+ Iterator<Resource> result = IteratorUtils.filteredIterator(matchingResources, PredicateUtils.notNullPredicate());
+ if (result.hasNext()) {
+ return result;
+ }
+ return null;
}
@Override
- public Iterator<Resource> getResourceInheritanceChain(Resource contentResource, String bucketName, String configName) {
- if (!isEnabledAndParamsValid(contentResource, bucketName, configName)) {
+ public Iterator<Resource> getResourceInheritanceChain(Resource contentResource, Collection<String> bucketNames, String configName) {
+ if (!isEnabledAndParamsValid(contentResource, bucketNames, configName)) {
return null;
}
final ResourceResolver resourceResolver = contentResource.getResourceResolver();
- final String name = bucketName + "/" + configName;
- logger.debug("Searching {} for resource {}", name, contentResource.getPath());
- Iterator<String> paths = getResolvePaths(contentResource, bucketName);
- return getResourceInheritanceChainInternal(bucketName, configName, paths, resourceResolver);
+ Iterator<String> paths = getResolvePaths(contentResource, bucketNames);
+ return getResourceInheritanceChainInternal(bucketNames, configName, paths, resourceResolver);
}
private boolean include(final List<CollectionInheritanceDecider> deciders,
@@ -322,12 +334,8 @@ public class DefaultConfigurationResourc
return result;
}
- private Collection<Resource> getResourceCollectionInternal(final String bucketName, final String configName,
+ private Collection<Resource> getResourceCollectionInternal(final Collection<String> bucketNames, final String configName,
Iterator<String> paths, ResourceResolver resourceResolver) {
- String name = bucketName + "/" + configName;
- if (logger.isTraceEnabled()) {
- logger.trace("- searching for list '{}'", name);
- }
final Map<String,Resource> result = new LinkedHashMap<>();
final List<CollectionInheritanceDecider> deciders = this.collectionInheritanceDeciders;
@@ -337,9 +345,23 @@ public class DefaultConfigurationResourc
boolean inherit = false;
while (paths.hasNext()) {
final String path = paths.next();
- Resource item = resourceResolver.getResource(buildResourcePath(path, name));
- if (item != null) {
+
+ Resource item = null;
+ String bucketNameUsed = null;
+ for (String bucketName : bucketNames) {
+ String name = bucketName + "/" + configName;
+ if (logger.isTraceEnabled()) {
+ logger.trace("- searching for list '{}'", name);
+ }
+
+ item = resourceResolver.getResource(buildResourcePath(path, name));
+ if (item != null) {
+ bucketNameUsed = bucketName;
+ break;
+ }
+ }
+ if (item != null) {
if (logger.isTraceEnabled()) {
logger.trace("+ resolved config item at [{}]: {}", idx, item.getPath());
}
@@ -347,7 +369,7 @@ public class DefaultConfigurationResourc
for (Resource child : item.getChildren()) {
if (isValidResourceCollectionItem(child)
&& !result.containsKey(child.getName())
- && include(deciders, bucketName, child, blockedItems)) {
+ && include(deciders, bucketNameUsed, child, blockedItems)) {
result.put(child.getName(), child);
}
}
@@ -361,9 +383,10 @@ public class DefaultConfigurationResourc
}
else {
if (logger.isTraceEnabled()) {
- logger.trace("- no item '{}' under config '{}'", name, path);
+ logger.trace("- no item '{}' under config '{}'", StringUtils.join(bucketNames, ","), path);
}
}
+
idx++;
}
@@ -375,26 +398,32 @@ public class DefaultConfigurationResourc
}
@Override
- public Collection<Resource> getResourceCollection(final Resource contentResource, final String bucketName, final String configName) {
- if (!isEnabledAndParamsValid(contentResource, bucketName, configName)) {
+ public Collection<Resource> getResourceCollection(final Resource contentResource, final Collection<String> bucketNames, final String configName) {
+ if (!isEnabledAndParamsValid(contentResource, bucketNames, configName)) {
+ return null;
+ }
+ Iterator<String> paths = getResolvePaths(contentResource, bucketNames);
+ Collection<Resource> result = getResourceCollectionInternal(bucketNames, configName, paths, contentResource.getResourceResolver());
+ if (!result.isEmpty()) {
+ return result;
+ }
+ else {
return null;
}
- Iterator<String> paths = getResolvePaths(contentResource, bucketName);
- return getResourceCollectionInternal(bucketName, configName, paths, contentResource.getResourceResolver());
}
@SuppressWarnings("unchecked")
@Override
public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(final Resource contentResource,
- final String bucketName, final String configName) {
- if (!isEnabledAndParamsValid(contentResource, bucketName, configName)) {
+ final Collection<String> bucketNames, final String configName) {
+ if (!isEnabledAndParamsValid(contentResource, bucketNames, configName)) {
return null;
}
final ResourceResolver resourceResolver = contentResource.getResourceResolver();
- final List<String> paths = IteratorUtils.toList(getResolvePaths(contentResource, bucketName));
+ final List<String> paths = IteratorUtils.toList(getResolvePaths(contentResource, bucketNames));
// get resource collection with respect to collection inheritance
- Collection<Resource> resourceCollection = getResourceCollectionInternal(bucketName, configName, paths.iterator(), resourceResolver);
+ 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
@@ -402,10 +431,15 @@ public class DefaultConfigurationResourc
@Override
public Object transform(Object input) {
Resource item = (Resource)input;
- return getResourceInheritanceChainInternal(bucketName, configName + "/" + item.getName(), paths.iterator(), resourceResolver);
+ return getResourceInheritanceChainInternal(bucketNames, configName + "/" + item.getName(), paths.iterator(), resourceResolver);
}
});
- return IteratorUtils.toList(result);
+ if (result.hasNext()) {
+ return IteratorUtils.toList(result);
+ }
+ else {
+ return null;
+ }
}
private boolean isValidResourceCollectionItem(Resource resource) {
@@ -428,12 +462,12 @@ public class DefaultConfigurationResourc
@Override
public String getResourcePath(Resource contentResource, String bucketName, String configName) {
- if (!isEnabledAndParamsValid(contentResource, bucketName, configName)) {
+ if (!isEnabledAndParamsValid(contentResource, Collections.singleton(bucketName), configName)) {
return null;
}
String name = bucketName + "/" + configName;
- Iterator<String> configPaths = this.findConfigRefs(contentResource, bucketName);
+ Iterator<String> configPaths = this.findConfigRefs(contentResource, Collections.singleton(bucketName));
if (configPaths.hasNext()) {
String configPath = buildResourcePath(configPaths.next(), name);
logger.debug("Building configuration path {} for resource {}: {}", name, contentResource.getPath(), configPath);
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/resource/impl/util/ConfigNameUtil.java Wed Dec 7 18:03:16 2016
@@ -18,6 +18,8 @@
*/
package org.apache.sling.caconfig.resource.impl.util;
+import java.util.Collection;
+
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
@@ -42,6 +44,23 @@ public final class ConfigNameUtil {
}
/**
+ * Check if the config name is valid.
+ * @param configNames The names
+ * @return {@code true} if it is valid
+ */
+ public static boolean isValid(final Collection<String> configNames) {
+ if (configNames == null) {
+ return false;
+ }
+ for (String configName : configNames) {
+ if (!isValid(configName)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
* Ensure that the config name is valid.
* @param configName The name
* @throws IllegalArgumentException if the config name is not valid
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationResolverCustomPersistenceTest.java Wed Dec 7 18:03:16 2016
@@ -56,7 +56,9 @@ public class ConfigurationResolverCustom
@Before
public void setUp() {
- underTest = ConfigurationTestUtils.registerConfigurationResolver(context);
+ // 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(ConfigurationPersistenceStrategy.class,
@@ -94,7 +96,7 @@ public class ConfigurationResolverCustom
@Test
public void testConfig_Simple() {
- context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.SimpleConfig/jcr:content",
+ context.build().resource("/conf/content/site1/settings/org.apache.sling.caconfig.example.SimpleConfig/jcr:content",
"stringParam", "configValue1",
"intParam", 111,
"boolParam", true);
@@ -108,7 +110,7 @@ public class ConfigurationResolverCustom
@Test
public void testConfig_SimpleWithName() {
- context.build().resource("/conf/content/site1/sling:configs/sampleName/jcr:content",
+ context.build().resource("/conf/content/site1/settings/sampleName/jcr:content",
"stringParam", "configValue1.1",
"intParam", 1111,
"boolParam", true);
@@ -122,7 +124,7 @@ public class ConfigurationResolverCustom
@Test
public void testConfig_List() {
- context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.ListConfig")
+ context.build().resource("/conf/content/site1/settings/org.apache.sling.caconfig.example.ListConfig")
.siblingsMode()
.resource("1/jcr:content", "stringParam", "configValue1.1")
.resource("2/jcr:content", "stringParam", "configValue1.2")
@@ -139,7 +141,7 @@ public class ConfigurationResolverCustom
@Test
public void testConfig_Nested() {
- context.build().resource("/conf/content/site1/sling:configs/org.apache.sling.caconfig.example.NestedConfig")
+ context.build().resource("/conf/content/site1/settings/org.apache.sling.caconfig.example.NestedConfig")
.resource("jcr:content", "stringParam", "configValue3")
.siblingsMode()
.resource("subConfig/jcr:content", "stringParam", "configValue4", "intParam", 444, "boolParam", true)
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/ConfigurationTestUtils.java Wed Dec 7 18:03:16 2016
@@ -36,14 +36,14 @@ public final class ConfigurationTestUtil
* Register all services for {@link ConfigurationResolver}.
* @param context Sling context
*/
- public static ConfigurationResolver registerConfigurationResolver(SlingContext context) {
+ public static ConfigurationResolver registerConfigurationResolver(SlingContext context, Object... properties) {
ConfigurationResourceTestUtils.registerConfigurationResourceResolver(context);
context.registerInjectActivateService(new DefaultConfigurationPersistenceStrategy());
context.registerInjectActivateService(new ConfigurationPersistenceStrategyMultiplexer());
context.registerInjectActivateService(new DefaultConfigurationInheritanceStrategy());
context.registerInjectActivateService(new ConfigurationInheritanceStrategyMultiplexer());
context.registerInjectActivateService(new ConfigurationOverrideManager());
- return context.registerInjectActivateService(new ConfigurationResolverImpl());
+ return context.registerInjectActivateService(new ConfigurationResolverImpl(), properties);
}
/**
@@ -51,12 +51,12 @@ public final class ConfigurationTestUtil
* without the default implementations of the multiplexed services.
* @param context Sling context
*/
- public static ConfigurationResolver registerConfigurationResolverWithoutDefaultImpl(SlingContext context) {
+ public static ConfigurationResolver registerConfigurationResolverWithoutDefaultImpl(SlingContext context, Object... properties) {
ConfigurationResourceTestUtils.registerConfigurationResourceResolverWithoutDefaultImpl(context);
context.registerInjectActivateService(new ConfigurationPersistenceStrategyMultiplexer());
context.registerInjectActivateService(new ConfigurationInheritanceStrategyMultiplexer());
context.registerInjectActivateService(new ConfigurationOverrideManager());
- return context.registerInjectActivateService(new ConfigurationResolverImpl());
+ return context.registerInjectActivateService(new ConfigurationResolverImpl(), properties);
}
}
Added: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceMixedTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceMixedTest.java?rev=1773130&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceMixedTest.java (added)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceMixedTest.java Wed Dec 7 18:03:16 2016
@@ -0,0 +1,61 @@
+/*
+ * 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 org.apache.commons.lang3.StringUtils;
+import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.osgi.framework.Constants;
+
+/**
+ * Test {@link ConfigurationManagerImpl} with custom persistence.
+ */
+@RunWith(MockitoJUnitRunner.class)
+public class ConfigurationManagerImplCustomPersistenceMixedTest extends ConfigurationManagerImplTest {
+
+ @Before
+ public void setUpCustomPersistence() {
+ // custom strategy which redirects all config resources to a jcr:content subnode
+ context.registerService(ConfigurationPersistenceStrategy.class,
+ new CustomConfigurationPersistenceStrategy(), Constants.SERVICE_RANKING, 2000);
+ }
+
+ @Override
+ protected String getConfigPropsPath(String path) {
+ return StringUtils.replace(path + "/jcr:content", "/sling:configs/", "/settings/");
+ }
+
+ @Override
+ protected String getConfigPropsPersistPath(String path) {
+ return path + "/jcr:content";
+ }
+
+ @Override
+ protected String[] getAlternativeBucketNames() {
+ return new String[] { "settings" };
+ }
+
+ @Override
+ protected String getConfigCollectionParentPath(String path) {
+ return StringUtils.replace(path, "/sling:configs/", "/settings/");
+ }
+
+}
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceMixedTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceMixedTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed Dec 7 18:03:16 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceMixedTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceTest.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplCustomPersistenceTest.java Wed Dec 7 18:03:16 2016
@@ -18,18 +18,25 @@
*/
package org.apache.sling.caconfig.management.impl;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.commons.lang3.StringUtils;
import org.apache.sling.caconfig.spi.ConfigurationPersistenceStrategy;
import org.junit.Before;
+import org.junit.Ignore;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import org.osgi.framework.Constants;
/**
- * Test {@link ConfigurationManagerImpl} with custom persistence.
+ * Test {@link ConfigurationManagerImpl} with custom persistence with mixed bucked names (primary, alternative).
*/
+@Ignore // TODO: does this test makes sense?
@RunWith(MockitoJUnitRunner.class)
public class ConfigurationManagerImplCustomPersistenceTest extends ConfigurationManagerImplTest {
+ private static AtomicInteger COUNTER = new AtomicInteger();
+
@Before
public void setUpCustomPersistence() {
// custom strategy which redirects all config resources to a jcr:content subnode
@@ -39,7 +46,35 @@ public class ConfigurationManagerImplCus
@Override
protected String getConfigPropsPath(String path) {
+ return StringUtils.replace(path + "/jcr:content", "/sling:configs/", "/" + getIteratingBucketName() + "/");
+ }
+
+ @Override
+ protected String getConfigPropsPersistPath(String path) {
return path + "/jcr:content";
}
+ @Override
+ protected String[] getAlternativeBucketNames() {
+ return new String[] { "settings" };
+ }
+
+ @Override
+ protected String getConfigCollectionParentPath(String path) {
+ return StringUtils.replace(path, "/sling:configs/", "/" + getIteratingBucketName() + "/");
+ }
+
+ /**
+ * @return On or another bucket name changing each call.
+ */
+ private String getIteratingBucketName() {
+ int count = COUNTER.getAndIncrement();
+ if (count % 2 == 0) {
+ return "sling:configs";
+ }
+ else {
+ return "settings";
+ }
+ }
+
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java Wed Dec 7 18:03:16 2016
@@ -83,7 +83,8 @@ public class ConfigurationManagerImplTes
public void setUp() {
context.registerService(ConfigurationMetadataProvider.class, configurationMetadataProvider);
context.registerInjectActivateService(new ConfigurationMetadataProviderMultiplexer());
- ConfigurationTestUtils.registerConfigurationResolver(context);
+ ConfigurationTestUtils.registerConfigurationResolver(context,
+ "configBucketNames", getAlternativeBucketNames());
underTest = context.registerInjectActivateService(new ConfigurationManagerImpl());
contextResource = context.create().resource("/content/test",
@@ -104,7 +105,7 @@ public class ConfigurationManagerImplTes
"prop4", true);
// test fixture with resource collection inheritance on level 2
- context.create().resource("/conf/test/level2/sling:configs/" + CONFIG_COL_NAME,
+ context.create().resource(getConfigCollectionParentPath("/conf/test/level2/sling:configs/" + CONFIG_COL_NAME),
PROPERTY_CONFIG_COLLECTION_INHERIT, true);
context.create().resource(getConfigPropsPath("/conf/test/level2/sling:configs/" + CONFIG_COL_NAME + "/1"),
"prop1", "value1_level2");
@@ -114,7 +115,7 @@ public class ConfigurationManagerImplTes
"prop4", false,
"prop5", "value5_level3",
PROPERTY_CONFIG_PROPERTY_INHERIT, true);
- context.create().resource("/conf/test/level2/level3/sling:configs/" + CONFIG_COL_NAME,
+ context.create().resource(getConfigCollectionParentPath("/conf/test/level2/level3/sling:configs/" + CONFIG_COL_NAME),
PROPERTY_CONFIG_COLLECTION_INHERIT, true);
context.create().resource(getConfigPropsPath("/conf/test/level2/level3/sling:configs/" + CONFIG_COL_NAME + "/1"),
"prop4", false,
@@ -199,6 +200,18 @@ public class ConfigurationManagerImplTes
return path;
}
+ protected String getConfigPropsPersistPath(String path) {
+ return path;
+ }
+
+ protected String getConfigCollectionParentPath(String path) {
+ return path;
+ }
+
+ protected String[] getAlternativeBucketNames() {
+ return new String[0];
+ }
+
@Test
public void testGetConfiguration() {
ConfigurationData configData = underTest.getConfiguration(contextResource, CONFIG_NAME);
@@ -506,7 +519,7 @@ public class ConfigurationManagerImplTes
new ConfigurationPersistData(ImmutableMap.<String, Object>of("prop1", "value1")));
context.resourceResolver().commit();
- String configPath = getConfigPropsPath("/conf/testNoConfig/sling:configs/" + CONFIG_NAME);
+ String configPath = getConfigPropsPersistPath("/conf/testNoConfig/sling:configs/" + CONFIG_NAME);
ValueMap props = context.resourceResolver().getResource(configPath).getValueMap();
assertEquals("value1", props.get("prop1"));
}
@@ -520,11 +533,11 @@ public class ConfigurationManagerImplTes
));
context.resourceResolver().commit();
- String configPath0 = getConfigPropsPath("/conf/testNoConfig/sling:configs/" + CONFIG_COL_NAME + "/0");
+ String configPath0 = getConfigPropsPersistPath("/conf/testNoConfig/sling:configs/" + CONFIG_COL_NAME + "/0");
ValueMap props0 = context.resourceResolver().getResource(configPath0).getValueMap();
assertEquals("value1", props0.get("prop1"));
- String configPath1 = getConfigPropsPath("/conf/testNoConfig/sling:configs/" + CONFIG_COL_NAME + "/1");
+ String configPath1 = getConfigPropsPersistPath("/conf/testNoConfig/sling:configs/" + CONFIG_COL_NAME + "/1");
ValueMap props1 = context.resourceResolver().getResource(configPath1).getValueMap();
assertEquals((Integer)5, props1.get("prop2"));
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/ConfigurationResourceResolvingStrategyMultiplexerTest.java Wed Dec 7 18:03:16 2016
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertThat;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import org.apache.sling.api.resource.Resource;
@@ -48,6 +49,7 @@ import com.google.common.collect.Iterato
public class ConfigurationResourceResolvingStrategyMultiplexerTest {
private static final String BUCKET = "sling:test";
+ private static final Collection<String> BUCKETS = Collections.singleton(BUCKET);
@Rule
public SlingContext context = new SlingContext();
@@ -86,11 +88,11 @@ public class ConfigurationResourceResolv
@Test
public void testWithNoStrategies() {
- assertNull(underTest.getResource(site1Page1, BUCKET, "test"));
- assertNull(underTest.getResourceCollection(site1Page1, BUCKET, "feature"));
+ assertNull(underTest.getResource(site1Page1, BUCKETS, "test"));
+ assertNull(underTest.getResourceCollection(site1Page1, BUCKETS, "feature"));
- assertNull(underTest.getResourceInheritanceChain(site1Page1, BUCKET, "test"));
- assertNull(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKET, "feature"));
+ assertNull(underTest.getResourceInheritanceChain(site1Page1, BUCKETS, "test"));
+ assertNull(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKETS, "feature"));
assertNull(underTest.getResourcePath(site1Page1, BUCKET, "test"));
assertNull(underTest.getResourceCollectionParentPath(site1Page1, BUCKET, "feature"));
@@ -100,14 +102,14 @@ public class ConfigurationResourceResolv
public void testWithDefaultStrategy() {
context.registerInjectActivateService(new DefaultConfigurationResourceResolvingStrategy());
- assertThat(underTest.getResource(site1Page1, BUCKET, "test"), ResourceMatchers.path("/conf/site1/sling:test/test"));
- assertThat(underTest.getResourceCollection(site1Page1, BUCKET, "feature"), ResourceCollectionMatchers.paths(
+ assertThat(underTest.getResource(site1Page1, BUCKETS, "test"), ResourceMatchers.path("/conf/site1/sling:test/test"));
+ assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, "feature"), ResourceCollectionMatchers.paths(
"/conf/site1/sling:test/feature/c",
"/apps/conf/sling:test/feature/a",
"/libs/conf/sling:test/feature/b"));
- assertThat(first(underTest.getResourceInheritanceChain(site1Page1, BUCKET, "test")), ResourceMatchers.path("/conf/site1/sling:test/test"));
- assertThat(first(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKET, "feature")), ResourceCollectionMatchers.paths(
+ assertThat(first(underTest.getResourceInheritanceChain(site1Page1, BUCKETS, "test")), ResourceMatchers.path("/conf/site1/sling:test/test"));
+ assertThat(first(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKETS, "feature")), ResourceCollectionMatchers.paths(
"/conf/site1/sling:test/feature/c",
"/apps/conf/sling:test/feature/a",
"/libs/conf/sling:test/feature/b"));
@@ -122,21 +124,21 @@ public class ConfigurationResourceResolv
// strategy 1
context.registerService(ConfigurationResourceResolvingStrategy.class, new ConfigurationResourceResolvingStrategy() {
@Override
- public Resource getResource(Resource resource, String bucketName, String configName) {
+ public Resource getResource(Resource resource, Collection<String> bucketNames, String configName) {
return context.resourceResolver().getResource("/conf/site1/sling:test/test");
}
@Override
- public Collection<Resource> getResourceCollection(Resource resource, String bucketName, String configName) {
+ public Collection<Resource> getResourceCollection(Resource resource, Collection<String> bucketNames, String configName) {
return ImmutableList.copyOf(context.resourceResolver().getResource("/conf/site1/sling:test/feature").listChildren());
}
@Override
- public Iterator<Resource> getResourceInheritanceChain(Resource resource, String bucketName, String configName) {
- return Iterators.singletonIterator(getResource(resource, bucketName, configName));
+ public Iterator<Resource> getResourceInheritanceChain(Resource resource, Collection<String> bucketNames, String configName) {
+ return Iterators.singletonIterator(getResource(resource, bucketNames, configName));
}
@Override
public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(Resource resource,
- String bucketName, String configName) {
- return Collections2.transform(getResourceCollection(resource, bucketName, configName), new Function<Resource, Iterator<Resource>>() {
+ Collection<String> bucketNames, String configName) {
+ return Collections2.transform(getResourceCollection(resource, bucketNames, configName), new Function<Resource, Iterator<Resource>>() {
@Override
public Iterator<Resource> apply(Resource input) {
return Iterators.singletonIterator(input);
@@ -156,21 +158,21 @@ public class ConfigurationResourceResolv
// strategy 2
context.registerService(ConfigurationResourceResolvingStrategy.class, new ConfigurationResourceResolvingStrategy() {
@Override
- public Resource getResource(Resource resource, String bucketName, String configName) {
+ public Resource getResource(Resource resource, Collection<String> bucketNames, String configName) {
return context.resourceResolver().getResource("/libs/conf/sling:test/test");
}
@Override
- public Collection<Resource> getResourceCollection(Resource resource, String bucketName, String configName) {
+ public Collection<Resource> getResourceCollection(Resource resource, Collection<String> bucketNames, String configName) {
return ImmutableList.copyOf(context.resourceResolver().getResource("/libs/conf/sling:test/feature").listChildren());
}
@Override
- public Iterator<Resource> getResourceInheritanceChain(Resource resource, String bucketName, String configName) {
- return Iterators.singletonIterator(getResource(resource, bucketName, configName));
+ public Iterator<Resource> getResourceInheritanceChain(Resource resource, Collection<String> bucketNames, String configName) {
+ return Iterators.singletonIterator(getResource(resource, bucketNames, configName));
}
@Override
public Collection<Iterator<Resource>> getResourceCollectionInheritanceChain(Resource resource,
- String bucketName, String configName) {
- return Collections2.transform(getResourceCollection(resource, bucketName, configName), new Function<Resource, Iterator<Resource>>() {
+ Collection<String> bucketNames, String configName) {
+ return Collections2.transform(getResourceCollection(resource, bucketNames, configName), new Function<Resource, Iterator<Resource>>() {
@Override
public Iterator<Resource> apply(Resource input) {
return Iterators.singletonIterator(input);
@@ -187,12 +189,12 @@ public class ConfigurationResourceResolv
}
}, Constants.SERVICE_RANKING, 1000);
- assertThat(underTest.getResource(site1Page1, BUCKET, "test"), ResourceMatchers.path("/conf/site1/sling:test/test"));
- assertThat(underTest.getResourceCollection(site1Page1, BUCKET, "feature"), ResourceCollectionMatchers.paths(
+ assertThat(underTest.getResource(site1Page1, BUCKETS, "test"), ResourceMatchers.path("/conf/site1/sling:test/test"));
+ assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, "feature"), ResourceCollectionMatchers.paths(
"/conf/site1/sling:test/feature/c"));
- assertThat(first(underTest.getResourceInheritanceChain(site1Page1, BUCKET, "test")), ResourceMatchers.path("/conf/site1/sling:test/test"));
- assertThat(first(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKET, "feature")), ResourceCollectionMatchers.paths(
+ assertThat(first(underTest.getResourceInheritanceChain(site1Page1, BUCKETS, "test")), ResourceMatchers.path("/conf/site1/sling:test/test"));
+ assertThat(first(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKETS, "feature")), ResourceCollectionMatchers.paths(
"/conf/site1/sling:test/feature/c"));
assertEquals("/conf/site1/sling:test/test", underTest.getResourcePath(site1Page1, BUCKET, "test"));
@@ -209,7 +211,7 @@ public class ConfigurationResourceResolv
}
private Collection<Resource> first(Collection<Iterator<Resource>> resources) {
- return Collections2.transform(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKET, "feature"),
+ return Collections2.transform(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKETS, "feature"),
new Function<Iterator<Resource>, Resource>() {
@Override
public Resource apply(Iterator<Resource> input) {
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java?rev=1773130&r1=1773129&r2=1773130&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java Wed Dec 7 18:03:16 2016
@@ -24,6 +24,8 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -45,6 +47,7 @@ import com.google.common.collect.Immutab
public class DefaultConfigurationResourceResolvingStrategyHierarchyTest {
private static final String BUCKET = "sling:test";
+ private static final Collection<String> BUCKETS = Collections.singleton(BUCKET);
@Rule
public SlingContext context = new SlingContext();
@@ -85,23 +88,23 @@ public class DefaultConfigurationResourc
.resource("/libs/conf/sling:test/cfgLibsGlobal")
.resource("/libs/conf/sling:test/test");
- assertEquals("/conf/brand1/tenant1/region1/site1/sling:test/cfgSite1", underTest.getResource(site1Page1, BUCKET, "cfgSite1").getPath());
- assertEquals("/conf/brand1/tenant1/region1/sling:test/cfgRegion1", underTest.getResource(site1Page1, BUCKET, "cfgRegion1").getPath());
- assertEquals("/conf/brand1/tenant1/sling:test/cfgTenant1", underTest.getResource(site1Page1, BUCKET, "cfgTenant1").getPath());
- assertEquals("/conf/brand1/sling:test/cfgBrand1", underTest.getResource(site1Page1, BUCKET, "cfgBrand1").getPath());
- assertEquals("/conf/global/sling:test/cfgGlobal", underTest.getResource(site1Page1, BUCKET, "cfgGlobal").getPath());
- assertEquals("/apps/conf/sling:test/cfgAppsGlobal", underTest.getResource(site1Page1, BUCKET, "cfgAppsGlobal").getPath());
- assertEquals("/libs/conf/sling:test/cfgLibsGlobal", underTest.getResource(site1Page1, BUCKET, "cfgLibsGlobal").getPath());
- assertEquals("/conf/brand1/tenant1/sling:test/test", underTest.getResource(site1Page1, BUCKET, "test").getPath());
-
- assertNull(underTest.getResource(site2Page1, BUCKET, "cfgSite1"));
- assertEquals("/conf/brand1/tenant1/region1/sling:test/cfgRegion1", underTest.getResource(site2Page1, BUCKET, "cfgRegion1").getPath());
- assertEquals("/conf/brand1/tenant1/sling:test/cfgTenant1", underTest.getResource(site2Page1, BUCKET, "cfgTenant1").getPath());
- assertEquals("/conf/brand1/sling:test/cfgBrand1", underTest.getResource(site2Page1, BUCKET, "cfgBrand1").getPath());
- assertEquals("/conf/global/sling:test/cfgGlobal", underTest.getResource(site2Page1, BUCKET, "cfgGlobal").getPath());
- assertEquals("/apps/conf/sling:test/cfgAppsGlobal", underTest.getResource(site2Page1, BUCKET, "cfgAppsGlobal").getPath());
- assertEquals("/libs/conf/sling:test/cfgLibsGlobal", underTest.getResource(site2Page1, BUCKET, "cfgLibsGlobal").getPath());
- assertEquals("/conf/brand1/tenant1/sling:test/test", underTest.getResource(site2Page1, BUCKET, "test").getPath());
+ assertEquals("/conf/brand1/tenant1/region1/site1/sling:test/cfgSite1", underTest.getResource(site1Page1, BUCKETS, "cfgSite1").getPath());
+ assertEquals("/conf/brand1/tenant1/region1/sling:test/cfgRegion1", underTest.getResource(site1Page1, BUCKETS, "cfgRegion1").getPath());
+ assertEquals("/conf/brand1/tenant1/sling:test/cfgTenant1", underTest.getResource(site1Page1, BUCKETS, "cfgTenant1").getPath());
+ assertEquals("/conf/brand1/sling:test/cfgBrand1", underTest.getResource(site1Page1, BUCKETS, "cfgBrand1").getPath());
+ assertEquals("/conf/global/sling:test/cfgGlobal", underTest.getResource(site1Page1, BUCKETS, "cfgGlobal").getPath());
+ assertEquals("/apps/conf/sling:test/cfgAppsGlobal", underTest.getResource(site1Page1, BUCKETS, "cfgAppsGlobal").getPath());
+ assertEquals("/libs/conf/sling:test/cfgLibsGlobal", underTest.getResource(site1Page1, BUCKETS, "cfgLibsGlobal").getPath());
+ assertEquals("/conf/brand1/tenant1/sling:test/test", underTest.getResource(site1Page1, BUCKETS, "test").getPath());
+
+ assertNull(underTest.getResource(site2Page1, BUCKETS, "cfgSite1"));
+ assertEquals("/conf/brand1/tenant1/region1/sling:test/cfgRegion1", underTest.getResource(site2Page1, BUCKETS, "cfgRegion1").getPath());
+ assertEquals("/conf/brand1/tenant1/sling:test/cfgTenant1", underTest.getResource(site2Page1, BUCKETS, "cfgTenant1").getPath());
+ assertEquals("/conf/brand1/sling:test/cfgBrand1", underTest.getResource(site2Page1, BUCKETS, "cfgBrand1").getPath());
+ assertEquals("/conf/global/sling:test/cfgGlobal", underTest.getResource(site2Page1, BUCKETS, "cfgGlobal").getPath());
+ assertEquals("/apps/conf/sling:test/cfgAppsGlobal", underTest.getResource(site2Page1, BUCKETS, "cfgAppsGlobal").getPath());
+ assertEquals("/libs/conf/sling:test/cfgLibsGlobal", underTest.getResource(site2Page1, BUCKETS, "cfgLibsGlobal").getPath());
+ assertEquals("/conf/brand1/tenant1/sling:test/test", underTest.getResource(site2Page1, BUCKETS, "test").getPath());
}
@Test
@@ -113,14 +116,14 @@ public class DefaultConfigurationResourc
.resource("/apps/conf/sling:test/test")
.resource("/libs/conf/sling:test/test");
- assertThat(underTest.getResourceInheritanceChain(site1Page1, BUCKET, "test"), ResourceIteratorMatchers.paths(
+ assertThat(underTest.getResourceInheritanceChain(site1Page1, BUCKETS, "test"), ResourceIteratorMatchers.paths(
"/conf/brand1/tenant1/region1/site1/sling:test/test",
"/conf/brand1/tenant1/sling:test/test",
"/conf/global/sling:test/test",
"/apps/conf/sling:test/test",
"/libs/conf/sling:test/test"));
- assertThat(underTest.getResourceInheritanceChain(site2Page1, BUCKET, "test"), ResourceIteratorMatchers.paths(
+ assertThat(underTest.getResourceInheritanceChain(site2Page1, BUCKETS, "test"), ResourceIteratorMatchers.paths(
"/conf/brand1/tenant1/sling:test/test",
"/conf/global/sling:test/test",
"/apps/conf/sling:test/test",
@@ -139,7 +142,7 @@ public class DefaultConfigurationResourc
.resource("/libs/conf/sling:test/cfgCol/libsGlobal1")
.resource("/libs/conf/sling:test/cfgCol/libsGlobal2");
- assertThat(underTest.getResourceCollection(site1Page1, BUCKET, "cfgCol"), ResourceCollectionMatchers.paths(
+ assertThat(underTest.getResourceCollection(site1Page1, BUCKETS, "cfgCol"), ResourceCollectionMatchers.paths(
"/conf/brand1/tenant1/region1/site1/sling:test/cfgCol/site1",
"/conf/brand1/tenant1/region1/sling:test/cfgCol/region1",
"/conf/brand1/tenant1/sling:test/cfgCol/tenant1",
@@ -149,7 +152,7 @@ public class DefaultConfigurationResourc
"/libs/conf/sling:test/cfgCol/libsGlobal1",
"/libs/conf/sling:test/cfgCol/libsGlobal2"));
- assertThat(underTest.getResourceCollection(site2Page1, BUCKET, "cfgCol"), ResourceCollectionMatchers.paths(
+ assertThat(underTest.getResourceCollection(site2Page1, BUCKETS, "cfgCol"), ResourceCollectionMatchers.paths(
"/conf/brand1/tenant1/region1/sling:test/cfgCol/region1",
"/conf/brand1/tenant1/sling:test/cfgCol/tenant1",
"/conf/brand1/sling:test/cfgCol/brand1",
@@ -181,7 +184,7 @@ public class DefaultConfigurationResourc
.resource("item2")
.resource("item3");
- List<Iterator<Resource>> resources = ImmutableList.copyOf(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKET, "cfgCol"));
+ List<Iterator<Resource>> resources = ImmutableList.copyOf(underTest.getResourceCollectionInheritanceChain(site1Page1, BUCKETS, "cfgCol"));
assertEquals(4, resources.size());
assertThat(resources.get(0), ResourceIteratorMatchers.paths(
@@ -213,7 +216,7 @@ public class DefaultConfigurationResourc
Resource level1_2 = context.resourceResolver().getResource("/content/level1/level2");
- assertThat(underTest.getResourceCollection(level1_2, BUCKET, "cfgCol"), ResourceCollectionMatchers.paths(
+ assertThat(underTest.getResourceCollection(level1_2, BUCKETS, "cfgCol"), ResourceCollectionMatchers.paths(
"/conf/b1/b2/sling:test/cfgCol/b1_b2",
"/conf/b1/sling:test/cfgCol/b1",
"/conf/a1/a2/sling:test/cfgCol/a1_a2",