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 2015/05/21 01:28:05 UTC
svn commit: r1680700 - in /sling/trunk/contrib/nosql:
couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/
generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/
generic/src/test/java/org/...
Author: sseifert
Date: Wed May 20 23:28:04 2015
New Revision: 1680700
URL: http://svn.apache.org/r1680700
Log:
SLING-4381 add special handling for root resource
Added:
sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderRootIT.java (with props)
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java (with props)
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderRootTest.java (with props)
Modified:
sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderIT.java
sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderTransactionalIT.java
sling/trunk/contrib/nosql/generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProvider.java
Modified: sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderIT.java?rev=1680700&r1=1680699&r2=1680700&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderIT.java (original)
+++ sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderIT.java Wed May 20 23:28:04 2015
@@ -40,15 +40,15 @@ public class CouchbaseNoSqlResourceProvi
@Override
protected void registerResourceProviderFactory() {
- context.registerInjectActivateService(
- new CouchbaseClientImpl(),
- ImmutableMap.<String, Object> builder()
+ context.registerInjectActivateService(new CouchbaseClientImpl(), ImmutableMap.<String, Object>builder()
.put(CouchbaseClient.CLIENT_ID_PROPERTY, CouchbaseNoSqlResourceProviderFactory.COUCHBASE_CLIENT_ID)
.put("couchbaseHosts", System.getProperty("couchbaseHosts", "localhost:8091"))
- .put("bucketName", System.getProperty("bucketName", "resource-test")).build());
+ .put("bucketName", System.getProperty("bucketName", "resource-test"))
+ .build());
- context.registerInjectActivateService(new CouchbaseNoSqlResourceProviderFactory(), ImmutableMap
- .<String, Object> builder().put(ResourceProvider.ROOTS, "/test").build());
+ context.registerInjectActivateService(new CouchbaseNoSqlResourceProviderFactory(), ImmutableMap.<String, Object>builder()
+ .put(ResourceProvider.ROOTS, "/test")
+ .build());
}
@Override
@@ -58,15 +58,13 @@ public class CouchbaseNoSqlResourceProvi
Resource root = context.resourceResolver().getResource("/");
Resource providerRoot = root.getChild("test");
if (providerRoot == null) {
- providerRoot = context.resourceResolver().create(
- root,
- "test",
- ImmutableMap
- .<String, Object> of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
+ providerRoot = context.resourceResolver().create(root, "test",
+ ImmutableMap.<String, Object>of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
}
this.testRoot = context.resourceResolver().create(providerRoot, UUID.randomUUID().toString(),
- ImmutableMap.<String, Object> of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
- } catch (PersistenceException ex) {
+ ImmutableMap.<String, Object>of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
+ }
+ catch (PersistenceException ex) {
throw new RuntimeException(ex);
}
}
Added: sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderRootIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderRootIT.java?rev=1680700&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderRootIT.java (added)
+++ sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderRootIT.java Wed May 20 23:28:04 2015
@@ -0,0 +1,47 @@
+/*
+ * 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.nosql.couchbase.resourceprovider.integration;
+
+import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.nosql.couchbase.client.CouchbaseClient;
+import org.apache.sling.nosql.couchbase.client.impl.CouchbaseClientImpl;
+import org.apache.sling.nosql.couchbase.resourceprovider.impl.CouchbaseNoSqlResourceProviderFactory;
+import org.apache.sling.nosql.generic.resource.impl.AbstractNoSqlResourceProviderRootTest;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Test basic ResourceResolver and ValueMap with different data types.
+ */
+public class CouchbaseNoSqlResourceProviderRootIT extends AbstractNoSqlResourceProviderRootTest {
+
+ @Override
+ protected void registerResourceProviderFactoryAsRoot() {
+ context.registerInjectActivateService(new CouchbaseClientImpl(), ImmutableMap.<String, Object>builder()
+ .put(CouchbaseClient.CLIENT_ID_PROPERTY, CouchbaseNoSqlResourceProviderFactory.COUCHBASE_CLIENT_ID)
+ .put("couchbaseHosts", System.getProperty("couchbaseHosts", "localhost:8091"))
+ .put("bucketName", System.getProperty("bucketName", "resource-test"))
+ .build());
+
+ context.registerInjectActivateService(new CouchbaseNoSqlResourceProviderFactory(), ImmutableMap.<String, Object>builder()
+ .put(ResourceProvider.ROOTS, "/")
+ .build());
+ }
+
+}
Propchange: sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderRootIT.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderRootIT.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed May 20 23:28:04 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderRootIT.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderTransactionalIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderTransactionalIT.java?rev=1680700&r1=1680699&r2=1680700&view=diff
==============================================================================
--- sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderTransactionalIT.java (original)
+++ sling/trunk/contrib/nosql/couchbase-resourceprovider/src/test/java/org/apache/sling/nosql/couchbase/resourceprovider/integration/CouchbaseNoSqlResourceProviderTransactionalIT.java Wed May 20 23:28:04 2015
@@ -40,15 +40,15 @@ public class CouchbaseNoSqlResourceProvi
@Override
protected void registerResourceProviderFactory() {
- context.registerInjectActivateService(
- new CouchbaseClientImpl(),
- ImmutableMap.<String, Object> builder()
+ context.registerInjectActivateService(new CouchbaseClientImpl(),ImmutableMap.<String, Object>builder()
.put(CouchbaseClient.CLIENT_ID_PROPERTY, CouchbaseNoSqlResourceProviderFactory.COUCHBASE_CLIENT_ID)
.put("couchbaseHosts", System.getProperty("couchbaseHosts", "localhost:8091"))
- .put("bucketName", System.getProperty("bucketName", "resource-test")).build());
+ .put("bucketName", System.getProperty("bucketName", "resource-test"))
+ .build());
- context.registerInjectActivateService(new CouchbaseNoSqlResourceProviderFactory(), ImmutableMap
- .<String, Object> builder().put(ResourceProvider.ROOTS, "/test").build());
+ context.registerInjectActivateService(new CouchbaseNoSqlResourceProviderFactory(), ImmutableMap.<String, Object>builder()
+ .put(ResourceProvider.ROOTS, "/test")
+ .build());
}
@Override
@@ -58,15 +58,13 @@ public class CouchbaseNoSqlResourceProvi
Resource root = context.resourceResolver().getResource("/");
Resource providerRoot = root.getChild("test");
if (providerRoot == null) {
- providerRoot = context.resourceResolver().create(
- root,
- "test",
- ImmutableMap
- .<String, Object> of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
+ providerRoot = context.resourceResolver().create(root,"test",
+ ImmutableMap.<String, Object>of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
}
this.testRoot = context.resourceResolver().create(providerRoot, UUID.randomUUID().toString(),
- ImmutableMap.<String, Object> of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
- } catch (PersistenceException ex) {
+ ImmutableMap.<String, Object>of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED));
+ }
+ catch (PersistenceException ex) {
throw new RuntimeException(ex);
}
}
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=1680700&r1=1680699&r2=1680700&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 May 20 23:28:04 2015
@@ -18,6 +18,7 @@
*/
package org.apache.sling.nosql.generic.resource.impl;
+import java.util.Collections;
import java.util.Dictionary;
import java.util.HashMap;
import java.util.HashSet;
@@ -50,6 +51,9 @@ 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;
private final Map<String, NoSqlData> changedResources = new HashMap<String, NoSqlData>();
@@ -64,6 +68,10 @@ 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;
}
@@ -128,7 +136,7 @@ public class NoSqlResourceProvider imple
public Resource create(ResourceResolver resolver, String path, Map<String, Object> properties)
throws PersistenceException {
- if (!adapter.validPath(path)) {
+ if (ROOT_PATH.equals(path) || !adapter.validPath(path)) {
throw new PersistenceException("Illegal path - unable to create resource at " + path, null, path, null);
}
@@ -146,7 +154,7 @@ public class NoSqlResourceProvider imple
}
public void delete(ResourceResolver resolver, String path) throws PersistenceException {
- if (!adapter.validPath(path)) {
+ if (ROOT_PATH.equals(path) || !adapter.validPath(path)) {
throw new PersistenceException("Unable to delete resource at {}" + path, null, path, null);
}
Added: 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=1680700&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java (added)
+++ sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java Wed May 20 23:28:04 2015
@@ -0,0 +1,79 @@
+/*
+ * 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.nosql.generic.resource.impl;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.jackrabbit.JcrConstants;
+import org.apache.sling.api.resource.PersistenceException;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.testing.mock.sling.ResourceResolverType;
+import org.apache.sling.testing.mock.sling.junit.SlingContext;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Test monting NoSqlResourceProvider as root resource provider.
+ */
+public abstract class AbstractNoSqlResourceProviderRootTest {
+
+ @Rule
+ public SlingContext context = new SlingContext(ResourceResolverType.NONE);
+
+ protected abstract void registerResourceProviderFactoryAsRoot();
+
+ @Before
+ public void setUp() throws Exception {
+ registerResourceProviderFactoryAsRoot();
+ }
+
+ @After
+ public void tearDown() {
+ context.resourceResolver().revert();
+ }
+
+ @Test
+ public void testRoot() {
+ Resource root = context.resourceResolver().getResource("/");
+ assertNotNull(root);
+ assertTrue(root instanceof NoSqlResource);
+ }
+
+ @Test
+ public void testCreatePath() throws PersistenceException {
+ ResourceUtil.getOrCreateResource(context.resourceResolver(), "/test/test1",
+ ImmutableMap.<String, Object>of(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED),
+ JcrConstants.NT_UNSTRUCTURED, true);
+
+ Resource test = context.resourceResolver().getResource("/test");
+ assertNotNull(test);
+
+ Resource test1 = context.resourceResolver().getResource("/test/test1");
+ assertNotNull(test1);
+
+ context.resourceResolver().delete(test);
+ }
+
+}
Propchange: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed May 20 23:28:04 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/AbstractNoSqlResourceProviderRootTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderRootTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderRootTest.java?rev=1680700&view=auto
==============================================================================
--- sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderRootTest.java (added)
+++ sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderRootTest.java Wed May 20 23:28:04 2015
@@ -0,0 +1,39 @@
+/*
+ * 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.nosql.generic.simple;
+
+import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.nosql.generic.resource.impl.AbstractNoSqlResourceProviderRootTest;
+import org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Test basic ResourceResolver and ValueMap with different data types.
+ */
+public class SimpleNoSqlResourceProviderRootTest extends AbstractNoSqlResourceProviderRootTest {
+
+ @Override
+ protected void registerResourceProviderFactoryAsRoot() {
+ context.registerInjectActivateService(new SimpleNoSqlResourceProviderFactory(), ImmutableMap.<String, Object>builder()
+ .put(ResourceProvider.ROOTS, "/")
+ .build());
+ }
+
+}
Propchange: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderRootTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderRootTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed May 20 23:28:04 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange: sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderRootTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain