Author: sseifert
Date: Wed Feb 24 11:42:19 2016
New Revision: 1732078
URL: http://svn.apache.org/viewvc?rev=1732078&view=rev
Log:
SLING-5151 NoSQL: allow modifying the root resource
Modified:
sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
Modified:
sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java?rev=1732078&r1=1732077&r2=1732078&view=diff
==============================================================================
---
sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java
(original)
+++
sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java
Wed Feb 24 11:42:19 2016
@@ -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 imple
// ### 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 imple
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 imple
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());
Modified:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java?rev=1732078&r1=1732077&r2=1732078&view=diff
==============================================================================
---
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
(original)
+++
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
Wed Feb 24 11:42:19 2016
@@ -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 AbstractNoSqlResou
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"));
}
}