Author: sseifert
Date: Fri Oct 7 15:36:13 2016
New Revision: 1763789
URL: http://svn.apache.org/viewvc?rev=1763789&view=rev
Log:
SLING-6114 Support nested configurations in configured locations
Added:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathEliminateDuplicatesIterator.java
(with props)
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIterator.java
(with props)
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourceEliminateDuplicatesIterator.java
(with props)
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourcePathCollatingIterator.java
(with props)
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIteratorTest.java
(with props)
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ContextPathStrategyMultiplexer.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/WebConsolePlugin.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ContextPathStrategyMultiplexer.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ContextPathStrategyMultiplexer.java?rev=1763789&r1=1763788&r2=1763789&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ContextPathStrategyMultiplexer.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ContextPathStrategyMultiplexer.java
Fri Oct 7 15:36:13 2016
@@ -20,19 +20,15 @@ package org.apache.sling.contextaware.co
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Set;
-import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.iterators.CollatingIterator;
-import org.apache.commons.collections.iterators.FilterIterator;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.commons.osgi.Order;
import org.apache.sling.commons.osgi.RankedServices;
+import
org.apache.sling.contextaware.config.resource.impl.util.ResourceEliminateDuplicatesIterator;
+import
org.apache.sling.contextaware.config.resource.impl.util.ResourcePathCollatingIterator;
import org.apache.sling.contextaware.config.resource.spi.ContextPathStrategy;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@@ -53,15 +49,6 @@ reference={
})
public class ContextPathStrategyMultiplexer implements ContextPathStrategy {
- private static Comparator<Resource> PATH_LENGTH_COMPARATOR = new
Comparator<Resource>() {
- @Override
- public int compare(Resource o1, Resource o2) {
- Integer length1 = o1.getPath().length();
- Integer length2 = o2.getPath().length();
- return length2.compareTo(length1);
- }
- };
-
private RankedServices<ContextPathStrategy> items = new
RankedServices<>(Order.DESCENDING);
protected void bindContextPathStrategy(ContextPathStrategy
contextPathStrategy, Map<String, Object> props) {
@@ -113,15 +100,9 @@ public class ContextPathStrategyMultiple
*/
@SuppressWarnings("unchecked")
private Iterator<Resource> mergeResults(List<Iterator<Resource>>
allResults) {
- return new FilterIterator(new
CollatingIterator(PATH_LENGTH_COMPARATOR, allResults),
- // eliminate duplicate resources reported by different
implementations
- new Predicate() {
- private Set<String> resourcePaths = new HashSet<>();
- @Override
- public boolean evaluate(Object object) {
- return resourcePaths.add(((Resource)object).getPath());
- }
- });
+ return new ResourceEliminateDuplicatesIterator(
+ new ResourcePathCollatingIterator(allResults)
+ );
}
}
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java?rev=1763789&r1=1763788&r2=1763789&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategy.java
Fri Oct 7 15:36:13 2016
@@ -39,6 +39,8 @@ import org.apache.commons.lang3.StringUt
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
import
org.apache.sling.contextaware.config.resource.impl.ContextPathStrategyMultiplexer;
+import
org.apache.sling.contextaware.config.resource.impl.util.PathEliminateDuplicatesIterator;
+import
org.apache.sling.contextaware.config.resource.impl.util.PathParentExpandIterator;
import
org.apache.sling.contextaware.config.resource.spi.ConfigurationResourceResolvingStrategy;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
@@ -62,9 +64,9 @@ public class DefaultConfigurationResourc
description = "Enable this configuration resourcer resolving
strategy.")
boolean enabled() default true;
- @AttributeDefinition(name="Allowed paths",
- description = "Whitelist of paths where
configurations can reside in.")
- String[] allowedPaths() default {"/conf", "/apps/conf", "/libs/conf"};
+ @AttributeDefinition(name="Configurations path",
+ description = "Paths where the configurations are
stored in.")
+ String configPath() default "/conf";
@AttributeDefinition(name="Fallback paths",
description = "Global fallback configurations, ordered from
most specific (checked first) to least specific.")
@@ -122,14 +124,19 @@ public class DefaultConfigurationResourc
*/
@SuppressWarnings("unchecked")
private Iterator<String> findConfigRefs(final Resource startResource) {
+ // collect all context path resources
Iterator<Resource> contextResources =
contextPathStrategy.findContextResources(startResource);
+
// get config resource path for each context resource, filter out
items where not reference could be resolved
- return new FilterIterator(new TransformIterator(contextResources, new
Transformer() {
+ Iterator<String> configPaths = new FilterIterator(new
TransformIterator(contextResources, new Transformer() {
@Override
public Object transform(Object input) {
return getReference((Resource)input);
}
}), PredicateUtils.notNullPredicate());
+
+ // expand paths and eliminate duplicates
+ return new PathEliminateDuplicatesIterator(new
PathParentExpandIterator(config.configPath(), configPaths));
}
private String getReference(final Resource resource) {
@@ -164,20 +171,15 @@ public class DefaultConfigurationResourc
}
private boolean isAllowedConfigPath(String path) {
- for (String pattern : this.config.allowedPaths()) {
- if (logger.isTraceEnabled()) {
- logger.trace("- checking if '{}' starts with {}", path,
pattern);
- }
- if (path.equals(pattern) || path.startsWith(pattern + "/")) {
- return true;
- }
+ if (logger.isTraceEnabled()) {
+ logger.trace("- checking if '{}' starts with {}", path,
config.configPath());
}
- return false;
+ return path.startsWith(config.configPath() + "/");
}
private boolean isFallbackConfigPath(final String ref) {
- for(final String name : this.config.fallbackPaths()) {
- if ( name.equals(ref) ) {
+ for(final String path : this.config.fallbackPaths()) {
+ if (StringUtils.equals(ref, path) || StringUtils.startsWith(ref,
path + "/")) {
return true;
}
}
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/WebConsolePlugin.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/WebConsolePlugin.java?rev=1763789&r1=1763788&r2=1763789&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/WebConsolePlugin.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/def/WebConsolePlugin.java
Fri Oct 7 15:36:13 2016
@@ -92,9 +92,9 @@ public class WebConsolePlugin extends Ab
final DefaultConfigurationResourceResolvingStrategy configResolverImpl
= (DefaultConfigurationResourceResolvingStrategy)configResolver;
tableStart(pw, "Configuration", 2);
pw.println("<tr>");
- pw.println("<td style='width:20%'>Allowed paths</td>");
+ pw.println("<td style='width:20%'>Configurations path</td>");
pw.print("<td>");
-
pw.print(xssAPI.encodeForHTML(Arrays.toString(configResolverImpl.getConfiguration().allowedPaths())));
+
pw.print(xssAPI.encodeForHTML(configResolverImpl.getConfiguration().configPath()));
pw.println("</td>");
pw.println("</tr>");
pw.println("<tr>");
Added:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathEliminateDuplicatesIterator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathEliminateDuplicatesIterator.java?rev=1763789&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathEliminateDuplicatesIterator.java
(added)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathEliminateDuplicatesIterator.java
Fri Oct 7 15:36:13 2016
@@ -0,0 +1,45 @@
+/*
+ * 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.contextaware.config.resource.impl.util;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.iterators.FilterIterator;
+
+/**
+ * Iterator that eliminates duplicate paths.
+ */
+public class PathEliminateDuplicatesIterator extends FilterIterator {
+
+ public PathEliminateDuplicatesIterator(Iterator<String> iterator) {
+ super(iterator, new Predicate() {
+ private final Set<String> resourcePaths = new HashSet<>();
+
+ @Override
+ public boolean evaluate(Object object) {
+ return resourcePaths.add((String)object);
+ }
+
+ });
+ }
+
+}
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathEliminateDuplicatesIterator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathEliminateDuplicatesIterator.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Fri Oct 7 15:36:13 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathEliminateDuplicatesIterator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIterator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIterator.java?rev=1763789&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIterator.java
(added)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIterator.java
Fri Oct 7 15:36:13 2016
@@ -0,0 +1,70 @@
+/*
+ * 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.contextaware.config.resource.impl.util;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Queue;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.api.resource.ResourceUtil;
+
+/**
+ * Expands all paths from the iterator with their parent paths up to the given
root paths.
+ * The expanded path are added directly after each given path.
+ * 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;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return paths.hasNext() || !expandedPaths.isEmpty();
+ }
+
+ @Override
+ public String next() {
+ if (expandedPaths.isEmpty()) {
+ expandPaths(paths.next());
+ }
+ return expandedPaths.remove();
+ }
+
+ private void expandPaths(String path) {
+ expandedPaths.add(path);
+ String parentPath = ResourceUtil.getParent(path);
+ if (parentPath != null && !StringUtils.equals(parentPath, rootPath)) {
+ expandPaths(parentPath);
+ }
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+
+}
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIterator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIterator.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Fri Oct 7 15:36:13 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIterator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourceEliminateDuplicatesIterator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourceEliminateDuplicatesIterator.java?rev=1763789&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourceEliminateDuplicatesIterator.java
(added)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourceEliminateDuplicatesIterator.java
Fri Oct 7 15:36:13 2016
@@ -0,0 +1,46 @@
+/*
+ * 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.contextaware.config.resource.impl.util;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.iterators.FilterIterator;
+import org.apache.sling.api.resource.Resource;
+
+/**
+ * Iterator that eliminates duplicate resources (having same path).
+ */
+public class ResourceEliminateDuplicatesIterator extends FilterIterator {
+
+ public ResourceEliminateDuplicatesIterator(Iterator<Resource> iterator) {
+ super(iterator, new Predicate() {
+ private final Set<String> resourcePaths = new HashSet<>();
+
+ @Override
+ public boolean evaluate(Object object) {
+ return resourcePaths.add(((Resource)object).getPath());
+ }
+
+ });
+ }
+
+}
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourceEliminateDuplicatesIterator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourceEliminateDuplicatesIterator.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Fri Oct 7 15:36:13 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourceEliminateDuplicatesIterator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourcePathCollatingIterator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourcePathCollatingIterator.java?rev=1763789&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourcePathCollatingIterator.java
(added)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourcePathCollatingIterator.java
Fri Oct 7 15:36:13 2016
@@ -0,0 +1,48 @@
+/*
+ * 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.contextaware.config.resource.impl.util;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.collections.iterators.CollatingIterator;
+import org.apache.sling.api.resource.Resource;
+
+/**
+ * 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.
+ */
+public class ResourcePathCollatingIterator extends CollatingIterator {
+
+ private static Comparator<Resource> PATH_LENGTH_COMPARATOR = new
Comparator<Resource>() {
+ @Override
+ public int compare(Resource o1, Resource o2) {
+ Integer length1 = o1.getPath().length();
+ Integer length2 = o2.getPath().length();
+ return length2.compareTo(length1);
+ }
+ };
+
+ public ResourcePathCollatingIterator(List<Iterator<Resource>> iterator) {
+ super(PATH_LENGTH_COMPARATOR, iterator);
+ }
+
+}
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourcePathCollatingIterator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourcePathCollatingIterator.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Fri Oct 7 15:36:13 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/util/ResourcePathCollatingIterator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java?rev=1763789&r1=1763788&r2=1763789&view=diff
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
(original)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/def/DefaultConfigurationResourceResolvingStrategyHierarchyTest.java
Fri Oct 7 15:36:13 2016
@@ -56,10 +56,10 @@ public class DefaultConfigurationResourc
// content resources that form a deeper hierarchy
context.build()
- .resource("/content/tenant1", PROPERTY_CONFIG_REF, "/conf/tenant1")
- .resource("/content/tenant1/region1", PROPERTY_CONFIG_REF,
"/conf/tenant1/region1")
- .resource("/content/tenant1/region1/site1", PROPERTY_CONFIG_REF,
"/conf/tenant1/region1/site1")
- .resource("/content/tenant1/region1/site2", PROPERTY_CONFIG_REF,
"/conf/tenant1/region1/site2");
+ .resource("/content/tenant1", PROPERTY_CONFIG_REF,
"/conf/brand1/tenant1")
+ .resource("/content/tenant1/region1", PROPERTY_CONFIG_REF,
"/conf/brand1/tenant1/region1")
+ .resource("/content/tenant1/region1/site1", PROPERTY_CONFIG_REF,
"/conf/brand1/tenant1/region1/site1")
+ .resource("/content/tenant1/region1/site2", PROPERTY_CONFIG_REF,
"/conf/brand1/tenant1/region1/site2");
site1Page1 =
context.create().resource("/content/tenant1/region1/site1/page1");
site2Page1 =
context.create().resource("/content/tenant1/region1/site2/page1");
@@ -69,10 +69,11 @@ public class DefaultConfigurationResourc
public void testGetResource() {
// build config resources
context.build()
- .resource("/conf/tenant1/region1/site1/sling:test/cfgSite1")
- .resource("/conf/tenant1/region1/sling:test/cfgRegion1")
- .resource("/conf/tenant1/sling:test/cfgTenant1")
- .resource("/conf/tenant1/sling:test/test")
+ .resource("/conf/brand1/tenant1/region1/site1/sling:test/cfgSite1")
+ .resource("/conf/brand1/tenant1/region1/sling:test/cfgRegion1")
+ .resource("/conf/brand1/tenant1/sling:test/cfgTenant1")
+ .resource("/conf/brand1/tenant1/sling:test/test")
+ .resource("/conf/brand1/sling:test/cfgBrand1")
.resource("/conf/global/sling:test/cfgGlobal")
.resource("/conf/global/sling:test/test")
.resource("/apps/conf/sling:test/cfgAppsGlobal")
@@ -80,30 +81,33 @@ public class DefaultConfigurationResourc
.resource("/libs/conf/sling:test/cfgLibsGlobal")
.resource("/libs/conf/sling:test/test");
- assertEquals("/conf/tenant1/region1/site1/sling:test/cfgSite1",
underTest.getResource(site1Page1, BUCKET, "cfgSite1").getPath());
- assertEquals("/conf/tenant1/region1/sling:test/cfgRegion1",
underTest.getResource(site1Page1, BUCKET, "cfgRegion1").getPath());
- assertEquals("/conf/tenant1/sling:test/cfgTenant1",
underTest.getResource(site1Page1, BUCKET, "cfgTenant1").getPath());
+ 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/tenant1/sling:test/test",
underTest.getResource(site1Page1, BUCKET, "test").getPath());
+ assertEquals("/conf/brand1/tenant1/sling:test/test",
underTest.getResource(site1Page1, BUCKET, "test").getPath());
assertNull(underTest.getResource(site2Page1, BUCKET, "cfgSite1"));
- assertEquals("/conf/tenant1/region1/sling:test/cfgRegion1",
underTest.getResource(site2Page1, BUCKET, "cfgRegion1").getPath());
- assertEquals("/conf/tenant1/sling:test/cfgTenant1",
underTest.getResource(site2Page1, BUCKET, "cfgTenant1").getPath());
+ 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/tenant1/sling:test/test",
underTest.getResource(site2Page1, BUCKET, "test").getPath());
+ assertEquals("/conf/brand1/tenant1/sling:test/test",
underTest.getResource(site2Page1, BUCKET, "test").getPath());
}
@Test
public void testGetResourceCollectionWithInheritance() {
// build config resources
context.build()
- .resource("/conf/tenant1/region1/site1/sling:test/cfgCol/site1")
- .resource("/conf/tenant1/region1/sling:test/cfgCol/region1")
- .resource("/conf/tenant1/sling:test/cfgCol/tenant1")
+
.resource("/conf/brand1/tenant1/region1/site1/sling:test/cfgCol/site1")
+ .resource("/conf/brand1/tenant1/region1/sling:test/cfgCol/region1")
+ .resource("/conf/brand1/tenant1/sling:test/cfgCol/tenant1")
+ .resource("/conf/brand1/sling:test/cfgCol/brand1")
.resource("/conf/global/sling:test/cfgCol/confGlobal")
.resource("/apps/conf/sling:test/cfgCol/appsGlobal")
.resource("/libs/conf/sling:test/cfgCol", PROPERTY_CONFIG_INHERIT,
true)
@@ -111,21 +115,50 @@ public class DefaultConfigurationResourc
.resource("/libs/conf/sling:test/cfgCol/libsGlobal2");
assertThat(underTest.getResourceCollection(site1Page1, BUCKET,
"cfgCol"), ResourceCollectionMatchers.paths(
- "/conf/tenant1/region1/site1/sling:test/cfgCol/site1",
- "/conf/tenant1/region1/sling:test/cfgCol/region1",
- "/conf/tenant1/sling:test/cfgCol/tenant1",
+ "/conf/brand1/tenant1/region1/site1/sling:test/cfgCol/site1",
+ "/conf/brand1/tenant1/region1/sling:test/cfgCol/region1",
+ "/conf/brand1/tenant1/sling:test/cfgCol/tenant1",
+ "/conf/brand1/sling:test/cfgCol/brand1",
"/conf/global/sling:test/cfgCol/confGlobal",
"/apps/conf/sling:test/cfgCol/appsGlobal",
"/libs/conf/sling:test/cfgCol/libsGlobal1",
"/libs/conf/sling:test/cfgCol/libsGlobal2"));
assertThat(underTest.getResourceCollection(site2Page1, BUCKET,
"cfgCol"), ResourceCollectionMatchers.paths(
- "/conf/tenant1/region1/sling:test/cfgCol/region1",
- "/conf/tenant1/sling:test/cfgCol/tenant1",
+ "/conf/brand1/tenant1/region1/sling:test/cfgCol/region1",
+ "/conf/brand1/tenant1/sling:test/cfgCol/tenant1",
+ "/conf/brand1/sling:test/cfgCol/brand1",
"/conf/global/sling:test/cfgCol/confGlobal",
"/apps/conf/sling:test/cfgCol/appsGlobal",
"/libs/conf/sling:test/cfgCol/libsGlobal1",
"/libs/conf/sling:test/cfgCol/libsGlobal2"));
}
+ @Test
+ public void
testGetResourceCollectionContentConfigRefInheritanceAndConfigResourceInheritance()
{
+
+ context.build()
+ .resource("/content/level1", PROPERTY_CONFIG_REF, "/conf/a1/a2")
+ .resource("/content/level1/level2", PROPERTY_CONFIG_REF,
"/conf/b1/b2")
+ .resource("/conf/a1/sling:test/cfgCol/a1")
+ .resource("/conf/a1/a2/sling:test/cfgCol/a1_a2")
+ .resource("/conf/b1/sling:test/cfgCol/b1")
+ .resource("/conf/b1/b2/sling:test/cfgCol/b1_b2")
+ .resource("/conf/global/sling:test/cfgCol/confGlobal")
+ .resource("/libs/conf/sling:test/cfgCol", PROPERTY_CONFIG_INHERIT,
true)
+ .resource("/apps/conf/sling:test/cfgCol/appsGlobal")
+ .resource("/libs/conf/sling:test/cfgCol/libsGlobal");
+
+ Resource level1_2 =
context.resourceResolver().getResource("/content/level1/level2");
+
+ assertThat(underTest.getResourceCollection(level1_2, BUCKET,
"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",
+ "/conf/a1/sling:test/cfgCol/a1",
+ "/conf/global/sling:test/cfgCol/confGlobal",
+ "/apps/conf/sling:test/cfgCol/appsGlobal",
+ "/libs/conf/sling:test/cfgCol/libsGlobal"));
+ }
+
}
Added:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIteratorTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIteratorTest.java?rev=1763789&view=auto
==============================================================================
---
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIteratorTest.java
(added)
+++
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIteratorTest.java
Fri Oct 7 15:36:13 2016
@@ -0,0 +1,50 @@
+/*
+ * 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.contextaware.config.resource.impl.util;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableList;
+
+public class PathParentExpandIteratorTest {
+
+ @Test
+ public void testExpansion() {
+ List<String> paths = ImmutableList.of(
+ "/conf/a/b/c",
+ "/conf/a/b",
+ "/conf/x/y/z");
+
+ List<String> result = ImmutableList.copyOf(new
PathParentExpandIterator("/conf", paths.iterator()));
+ assertEquals(ImmutableList.of(
+ "/conf/a/b/c",
+ "/conf/a/b",
+ "/conf/a",
+ "/conf/a/b",
+ "/conf/a",
+ "/conf/x/y/z",
+ "/conf/x/y",
+ "/conf/x"), result);
+ }
+
+}
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIteratorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIteratorTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Fri Oct 7 15:36:13 2016
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/util/PathParentExpandIteratorTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain