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/09/01 12:29:30 UTC
svn commit: r1758767 - in
/sling/trunk/contrib/extensions/contextaware-config:
api/src/main/java/org/apache/sling/contextaware/config/resource/
impl/src/main/java/org/apache/sling/contextaware/config/impl/
impl/src/main/java/org/apache/sling/contextawa...
Author: sseifert
Date: Thu Sep 1 12:29:30 2016
New Revision: 1758767
URL: http://svn.apache.org/viewvc?rev=1758767&view=rev
Log:
SLING-6024 Context-Aware Config: Introduce "bucket name" parameter in ConfigurationResourceResolver
Modified:
sling/trunk/contrib/extensions/contextaware-config/api/src/main/java/org/apache/sling/contextaware/config/resource/ConfigurationResourceResolver.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/impl/ConfigurationBuilderImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImpl.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/WebConsolePlugin.java
sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java
Modified: sling/trunk/contrib/extensions/contextaware-config/api/src/main/java/org/apache/sling/contextaware/config/resource/ConfigurationResourceResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/api/src/main/java/org/apache/sling/contextaware/config/resource/ConfigurationResourceResolver.java?rev=1758767&r1=1758766&r2=1758767&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/api/src/main/java/org/apache/sling/contextaware/config/resource/ConfigurationResourceResolver.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/api/src/main/java/org/apache/sling/contextaware/config/resource/ConfigurationResourceResolver.java Thu Sep 1 12:29:30 2016
@@ -39,18 +39,24 @@ public interface ConfigurationResourceRe
* Get a context-specific singleton configuration resource defined by the given configuration name.
*
* @param resource Context resource to fetch configuration for
+ * @param bucketName Configuration "bucket" name. Each high-level configuration resolver should store
+ * it's configuration data grouped in a child resource of the configuration resource. This is what
+ * we call a "bucket", and the resource name is specified with this parameter.
* @param configName Configuration name or relative path.
* @return Configuration resource or {@code null}.
*/
- @CheckForNull Resource getResource(@Nonnull Resource resource, @Nonnull String configName);
+ @CheckForNull Resource getResource(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
/**
* Get a collection of context-specific configuration resources defined by the given configuration name.
* @param resource Context resource to fetch configuration for
+ * @param bucketName Configuration "bucket" name. Each high-level configuration resolver should store
+ * it's configuration data grouped in a child resource of the configuration resource. This is what
+ * we call a "bucket", and the resource name is specified with this parameter.
* @param configName Configuration name or relative path.
* @return Collection of configuration resources, the collection might be empty.
*/
- @Nonnull Collection<Resource> getResourceCollection(@Nonnull Resource resource, @Nonnull String configName);
+ @Nonnull Collection<Resource> getResourceCollection(@Nonnull Resource resource, @Nonnull String bucketName, @Nonnull String configName);
/**
* Get the inner-most context path (deepest path) returned by {@link #getAllContextPaths(Resource)}.
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/impl/ConfigurationBuilderImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/impl/ConfigurationBuilderImpl.java?rev=1758767&r1=1758766&r2=1758767&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/impl/ConfigurationBuilderImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/impl/ConfigurationBuilderImpl.java Thu Sep 1 12:29:30 2016
@@ -67,15 +67,13 @@ class ConfigurationBuilderImpl implement
}
/**
- * Configurations are stored below a "sling:configs" child node in the config resource.
+ * Validate the configuration name.
* @param name Configuration name or relative path
- * @return Full relative path under configuration resource
*/
- private String getConfigRelativePath(String name) {
+ private void validateConfigurationName(String name) {
if (name == null) {
throw new ConfigurationResolveException("Configuration name is required.");
}
- return CONFIGS_PARENT_NAME + "/" + name;
}
/**
@@ -96,8 +94,8 @@ class ConfigurationBuilderImpl implement
private <T> T getConfigResource(String name, Class<T> clazz, Converter<T> converter) {
Resource configResource = null;
if (this.contentResource != null) {
- String path = getConfigRelativePath(name);
- configResource = this.configurationResourceResolver.getResource(this.contentResource, path);
+ validateConfigurationName(name);
+ configResource = this.configurationResourceResolver.getResource(this.contentResource, CONFIGS_PARENT_NAME, name);
}
return converter.convert(configResource, clazz);
}
@@ -111,9 +109,9 @@ class ConfigurationBuilderImpl implement
*/
private <T> Collection<T> getConfigResourceCollection(String name, Class<T> clazz, Converter<T> converter) {
if (this.contentResource != null) {
- String path = getConfigRelativePath(name);
+ validateConfigurationName(name);
final Collection<T> result = new ArrayList<>();
- for(final Resource rsrc : this.configurationResourceResolver.getResourceCollection(this.contentResource, path)) {
+ for(final Resource rsrc : this.configurationResourceResolver.getResourceCollection(this.contentResource, CONFIGS_PARENT_NAME, name)) {
final T obj = converter.convert(rsrc, clazz);
if ( obj != null ) {
result.add(obj);
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImpl.java?rev=1758767&r1=1758766&r2=1758767&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImpl.java Thu Sep 1 12:29:30 2016
@@ -196,10 +196,11 @@ public class ConfigurationResourceResolv
}
@Override
- public Resource getResource(final Resource contentResource, final String name) {
- if (contentResource == null || !checkName(name)) {
+ public Resource getResource(final Resource contentResource, final String bucketName, final String configName) {
+ if (contentResource == null || !checkName(bucketName) || !checkName(configName)) {
return null;
}
+ String name = bucketName + "/" + configName;
logger.debug("Searching {} for resource {}", name, contentResource.getPath());
// strategy: find first item among all configured paths
@@ -221,10 +222,11 @@ public class ConfigurationResourceResolv
}
@Override
- public Collection<Resource> getResourceCollection(final Resource contentResource, final String name) {
- if (contentResource == null || !checkName(name)) {
+ public Collection<Resource> getResourceCollection(final Resource contentResource, final String bucketName, final String configName) {
+ if (contentResource == null || !checkName(bucketName) || !checkName(configName)) {
return Collections.emptyList();
}
+ String name = bucketName + "/" + configName;
if (logger.isTraceEnabled()) {
logger.trace("- searching for list '{}'", name);
}
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/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/WebConsolePlugin.java?rev=1758767&r1=1758766&r2=1758767&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/WebConsolePlugin.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/contextaware/config/resource/impl/WebConsolePlugin.java Thu Sep 1 12:29:30 2016
@@ -28,6 +28,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.commons.lang3.StringUtils;
import org.apache.felix.webconsole.AbstractWebConsolePlugin;
import org.apache.felix.webconsole.WebConsoleConstants;
import org.apache.sling.api.resource.LoginException;
@@ -140,7 +141,7 @@ public class WebConsolePlugin extends Ab
tableStart(pw, "Test Configuration Resolution", 2);
pw.println("<td style='width:20%'>Content Path</td>");
pw.print("<td><input name='path' value='");
- pw.print(xssAPI.encodeForHTMLAttr(path));
+ pw.print(xssAPI.encodeForHTMLAttr(StringUtils.defaultString(path)));
pw.println("' style='width:100%'/>");
if (resolver != null && content == null) {
pw.println("<div>");
@@ -159,7 +160,7 @@ public class WebConsolePlugin extends Ab
pw.println("<td>User</td>");
pw.println("<td><input name='user' value='");
- pw.print(xssAPI.encodeForHTMLAttr(user));
+ pw.print(xssAPI.encodeForHTMLAttr(StringUtils.defaultString(user)));
pw.println("' style='width:50%'/>");
if (path != null && resolver == null) {
pw.println("<div>");
@@ -180,7 +181,8 @@ public class WebConsolePlugin extends Ab
if (content != null) {
- final Resource confRsrc = configResolver.getResource(content, item);
+ // TODO: use sensible bucket name or make it configurable
+ final Resource confRsrc = configResolver.getResource(content, "sling:configs", item);
tableStart(pw, "Resolved", 2);
pw.println("<td style='width:20%'>Code</td>");
Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java?rev=1758767&r1=1758766&r2=1758767&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/contextaware/config/resource/impl/ConfigurationResourceResolverImplTest.java Thu Sep 1 12:29:30 2016
@@ -35,6 +35,8 @@ import com.google.common.collect.Immutab
import com.google.common.collect.ImmutableMap;
public class ConfigurationResourceResolverImplTest {
+
+ private static final String BUCKET = "sling:test";
@Rule
public SlingContext context = new SlingContext();
@@ -59,28 +61,37 @@ public class ConfigurationResourceResolv
site2Page1 = context.create().resource("/content/site2/page1");
// configuration
- context.create().resource("/libs/test");
- context.create().resource("/config/site1/test");
- context.create().resource("/apps/feature/a");
- context.create().resource("/libs/feature/b");
- context.create().resource("/config/site1/feature/c");
- context.create().resource("/config/site2/feature/c");
- context.create().resource("/config/site2/feature/d");
+ context.create().resource("/libs/sling:test/test");
+ context.create().resource("/config/site1/sling:test/test");
+ context.create().resource("/apps/sling:test/feature/a");
+ context.create().resource("/libs/sling:test/feature/b");
+ context.create().resource("/config/site1/sling:test/feature/c");
+ context.create().resource("/config/site2/sling:test/feature/c");
+ context.create().resource("/config/site2/sling:test/feature/d");
}
@Test
public void testGetResource() {
- assertEquals("/config/site1/test", underTest.getResource(site1Page1, "test").getPath());
- assertEquals("/libs/test", underTest.getResource(site2Page1, "test").getPath());
+ assertEquals("/config/site1/sling:test/test", underTest.getResource(site1Page1, BUCKET, "test").getPath());
+ assertEquals("/libs/sling:test/test", underTest.getResource(site2Page1, BUCKET, "test").getPath());
}
@Test
public void testGetResourceCollection() {
- Collection<Resource> col1 = underTest.getResourceCollection(site1Page1, "feature");
- assetResourcePaths(new String[] { "/config/site1/feature/c", "/apps/feature/a", "/libs/feature/b" }, col1);
-
- Collection<Resource> col2 = underTest.getResourceCollection(site2Page1, "feature");
- assetResourcePaths(new String[] { "/config/site2/feature/c", "/config/site2/feature/d", "/apps/feature/a", "/libs/feature/b" }, col2);
+ Collection<Resource> col1 = underTest.getResourceCollection(site1Page1, BUCKET, "feature");
+ assetResourcePaths(new String[] {
+ "/config/site1/sling:test/feature/c",
+ "/apps/sling:test/feature/a",
+ "/libs/sling:test/feature/b" },
+ col1);
+
+ Collection<Resource> col2 = underTest.getResourceCollection(site2Page1, BUCKET, "feature");
+ assetResourcePaths(new String[] {
+ "/config/site2/sling:test/feature/c",
+ "/config/site2/sling:test/feature/d",
+ "/apps/sling:test/feature/a",
+ "/libs/sling:test/feature/b" },
+ col2);
}
@Test