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"));
     }
 
 }


Reply via email to