This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-nosql-generic.git
commit aa80d0745921c39891a47f2817f0a5131baf4f28 Author: Stefan Seifert <[email protected]> AuthorDate: Wed Feb 24 11:42:19 2016 +0000 SLING-5151 NoSQL: allow modifying the root resource git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1732078 13f79535-47bb-0310-9956-ffa450edef68 --- .../nosql/generic/resource/impl/NoSqlResourceProvider.java | 14 +++++--------- .../impl/AbstractNoSqlResourceProviderRootTest.java | 7 ++++++- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java b/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java index 2649323..e5ad414 100644 --- a/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java +++ b/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java @@ -18,7 +18,6 @@ */ package org.apache.sling.nosql.generic.resource.impl; -import java.util.Collections; import java.util.Dictionary; import java.util.HashMap; import java.util.HashSet; @@ -53,7 +52,6 @@ import org.osgi.service.event.EventAdmin; public class NoSqlResourceProvider implements ResourceProvider, ModifyingResourceProvider, QueriableResourceProvider { private static final String ROOT_PATH = "/"; - private static final NoSqlData ROOT_DATA = new NoSqlData(ROOT_PATH, Collections.<String, Object>emptyMap()); private final NoSqlAdapter adapter; private final EventAdmin eventAdmin; @@ -69,10 +67,6 @@ public class NoSqlResourceProvider implements ResourceProvider, ModifyingResourc // ### READONLY ACCESS ### public Resource getResource(ResourceResolver resourceResolver, String path) { - if (ROOT_PATH.equals(path)) { - return new NoSqlResource(ROOT_DATA, resourceResolver, this); - } - if (!adapter.validPath(path)) { return null; } @@ -91,6 +85,11 @@ public class NoSqlResourceProvider implements ResourceProvider, ModifyingResourc if (data != null) { return new NoSqlResource(data, resourceResolver, this); } + else if (ROOT_PATH.equals(path)) { + // root path exists implicitly - bot not yet in nosql store - return a "virtual" resource until something is stored in it + NoSqlData rootData = new NoSqlData(ROOT_PATH, new HashMap<String, Object>()); + return new NoSqlResource(rootData, resourceResolver, this); + } return null; } @@ -196,9 +195,6 @@ public class NoSqlResourceProvider implements ResourceProvider, ModifyingResourc notifyRemoved(path); } for (NoSqlData item : changedResources.values()) { - if (ROOT_PATH.equals(item.getPath())) { - throw new PersistenceException("Unable to store resource at {}" + item.getPath(), null, item.getPath(), null); - } boolean created = adapter.store(item); if (created) { notifyAdded(item.getPath()); diff --git a/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java b/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java index 82d88f0..1fead01 100644 --- a/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java +++ b/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java @@ -18,8 +18,10 @@ */ package org.apache.sling.nosql.generic.resource.impl; +import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.io.IOException; @@ -117,12 +119,15 @@ public abstract class AbstractNoSqlResourceProviderRootTest { context.resourceResolver().delete(root); } - @Test(expected = Throwable.class) + @Test public void testUpdateRootPath() throws PersistenceException { Resource root = context.resourceResolver().getResource("/"); ModifiableValueMap props = root.adaptTo(ModifiableValueMap.class); props.put("prop1", "value1"); context.resourceResolver().commit(); + + root = context.resourceResolver().getResource("/"); + assertThat(root.getValueMap().get("prop1", String.class), equalTo("value1")); } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
