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/18 22:41:58 UTC
svn commit: r1680091 - in
/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src:
main/java/org/apache/sling/nosql/generic/adapter/
main/java/org/apache/sling/nosql/generic/resource/impl/
test/java/org/apache/sling/nosql/generic/resource/impl/ t...
Author: sseifert
Date: Mon May 18 20:41:43 2015
New Revision: 1680091
URL: http://svn.apache.org/r1680091
Log:
optimizations and javadocs
Modified:
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlAdapter.java
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProviderTest.java
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlAdapter.java
sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderFactory.java
Modified: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlAdapter.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlAdapter.java?rev=1680091&r1=1680090&r2=1680091&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlAdapter.java (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/adapter/NoSqlAdapter.java Mon May 18 20:41:43 2015
@@ -48,6 +48,8 @@ public interface NoSqlAdapter {
/**
* Store data with the given path in NoSQL database.
+ * It is guaranteed that the map of the NoSqlData object does only contain primitive
+ * value types String, Integer, Long, Double, Boolean or arrays of them.
* @param data Data with path
* @return true if a new entry was created, false if an existing was overridden.
*/
Modified: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java?rev=1680091&r1=1680090&r2=1680091&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/main/java/org/apache/sling/nosql/generic/resource/impl/NoSqlValueMap.java Mon May 18 20:41:43 2015
@@ -47,10 +47,6 @@ class NoSqlValueMap extends ValueMapDeco
private final Resource resource;
- public NoSqlValueMap(Resource resource) {
- this(resource, new HashMap<String, Object>());
- }
-
public NoSqlValueMap(Resource resource, Map<String,Object> map) {
super(convertForWriteAll(map));
this.resource = resource;
Modified: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProviderTest.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProviderTest.java?rev=1680091&r1=1680090&r2=1680091&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProviderTest.java (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/resource/impl/NoSqlResourceProviderTest.java Mon May 18 20:41:43 2015
@@ -37,14 +37,11 @@ import org.apache.jackrabbit.JcrConstant
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceProvider;
-import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.nosql.generic.simple.SimpleNoSqlResourceProviderFactory;
-import org.apache.sling.testing.mock.osgi.junit.OsgiContext;
-import org.apache.sling.testing.mock.sling.MockSling;
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;
@@ -53,6 +50,9 @@ import org.junit.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+/**
+ * Test basic ResourceResolver and ValueMap with different data types.
+ */
public class NoSqlResourceProviderTest {
private static final String STRING_VALUE = "value1";
@@ -65,9 +65,8 @@ public class NoSqlResourceProviderTest {
private static final byte[] BINARY_VALUE = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
@Rule
- public OsgiContext context = new OsgiContext();
+ public SlingContext context = new SlingContext(ResourceResolverType.JCR_MOCK);
- private ResourceResolver resourceResolver;
private Resource testRoot;
@Before
@@ -76,9 +75,6 @@ public class NoSqlResourceProviderTest {
.put(ResourceProvider.ROOTS, "/nosql-simple")
.build());
- ResourceResolverFactory resourceResolverFactory = MockSling.newResourceResolverFactory(ResourceResolverType.JCR_MOCK, context.bundleContext());
- this.resourceResolver = resourceResolverFactory.getResourceResolver(null);
-
// prepare some test data using Sling CRUD API
Resource rootNode = getTestRootResource();
@@ -92,14 +88,14 @@ public class NoSqlResourceProviderTest {
props.put("dateProp", DATE_VALUE);
props.put("calendarProp", CALENDAR_VALUE);
props.put("binaryProp", new ByteArrayInputStream(BINARY_VALUE));
- Resource node1 = this.resourceResolver.create(rootNode, "node1", props);
+ Resource node1 = context.resourceResolver().create(rootNode, "node1", props);
- this.resourceResolver.create(node1, "node11", ImmutableMap.<String, Object>builder()
+ context.resourceResolver().create(node1, "node11", ImmutableMap.<String, Object>builder()
.put("stringProp11", STRING_VALUE)
.build());
- this.resourceResolver.create(node1, "node12", ValueMap.EMPTY);
+ context.resourceResolver().create(node1, "node12", ValueMap.EMPTY);
- this.resourceResolver.commit();
+ context.resourceResolver().commit();
}
@@ -116,16 +112,18 @@ public class NoSqlResourceProviderTest {
if (this.testRoot == null) {
Map<String, Object> props = new HashMap<String, Object>();
props.put(JcrConstants.JCR_PRIMARYTYPE, JcrConstants.NT_UNSTRUCTURED);
- final Resource root = this.resourceResolver.getResource("/");
- Resource noSqlRoot = this.resourceResolver.create(root, "nosql-simple", props);
- this.testRoot = this.resourceResolver.create(noSqlRoot, "test", props);
+ final Resource root = context.resourceResolver().getResource("/");
+ Resource noSqlRoot = context.resourceResolver().create(root, "nosql-simple", props);
+ this.testRoot = context.resourceResolver().create(noSqlRoot, "test", props);
}
return this.testRoot;
}
@Test
public void testSimpleProperties() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
+ assertTrue(resource1 instanceof NoSqlResource);
+
assertNotNull(resource1);
assertEquals("node1", resource1.getName());
@@ -139,7 +137,7 @@ public class NoSqlResourceProviderTest {
@Test
public void testSimpleProperties_DeepPathAccess() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(testRoot.getPath());
+ Resource resource1 = context.resourceResolver().getResource(testRoot.getPath());
assertNotNull(resource1);
assertEquals(testRoot.getName(), resource1.getName());
@@ -154,14 +152,14 @@ public class NoSqlResourceProviderTest {
@Test
public void testDateProperty() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
ValueMap props = ResourceUtil.getValueMap(resource1);
assertEquals(DATE_VALUE, props.get("dateProp", Date.class));
}
@Test
public void testDatePropertyToCalendar() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
ValueMap props = ResourceUtil.getValueMap(resource1);
Calendar calendarValue = props.get("dateProp", Calendar.class);
assertNotNull(calendarValue);
@@ -170,14 +168,14 @@ public class NoSqlResourceProviderTest {
@Test
public void testCalendarProperty() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
ValueMap props = ResourceUtil.getValueMap(resource1);
assertEquals(CALENDAR_VALUE.getTime(), props.get("calendarProp", Calendar.class).getTime());
}
@Test
public void testCalendarPropertyToDate() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
ValueMap props = ResourceUtil.getValueMap(resource1);
Date dateValue = props.get("calendarProp", Date.class);
assertNotNull(dateValue);
@@ -186,7 +184,7 @@ public class NoSqlResourceProviderTest {
@Test
public void testListChildren() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
List<Resource> children = ImmutableList.copyOf(resource1.listChildren());
assertEquals(2, children.size());
@@ -196,7 +194,7 @@ public class NoSqlResourceProviderTest {
@Test
public void testBinaryData() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
InputStream is = ResourceUtil.getValueMap(resource1).get("binaryProp", InputStream.class);
byte[] dataFromResource = IOUtils.toByteArray(is);
@@ -206,7 +204,7 @@ public class NoSqlResourceProviderTest {
@Test
public void testValueMapTypes() throws IOException {
- Resource resource1 = this.resourceResolver.getResource(getTestRootResource().getPath() + "/node1");
+ Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
// ensure that value map has only supported primitive types (all other supported types converted to string)
ValueMap valueMap = resource1.getValueMap();
@@ -217,7 +215,7 @@ public class NoSqlResourceProviderTest {
@Test
public void testPrimaryTypeResourceType() throws PersistenceException {
- Resource resource = this.resourceResolver.getResource(getTestRootResource().getPath());
+ Resource resource = context.resourceResolver().getResource(getTestRootResource().getPath());
assertEquals(JcrConstants.NT_UNSTRUCTURED, resource.getResourceType());
}
Modified: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlAdapter.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlAdapter.java?rev=1680091&r1=1680090&r2=1680091&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlAdapter.java (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlAdapter.java Mon May 18 20:41:43 2015
@@ -34,6 +34,9 @@ import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterators;
+/**
+ * Stores resource data in a hash map for testing.
+ */
public class SimpleNoSqlAdapter implements NoSqlAdapter {
private final Map<String, Map<String,Object>> store = new HashMap<String, Map<String,Object>>();
@@ -71,7 +74,7 @@ public class SimpleNoSqlAdapter implemen
public boolean store(NoSqlData data) {
boolean exists = store.containsKey(data.getPath());
- store.put(data.getPath(), data.getProperties());
+ store.put(data.getPath(), new HashMap<String, Object>(data.getProperties()));
return !exists;
}
Modified: sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderFactory.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderFactory.java?rev=1680091&r1=1680090&r2=1680091&view=diff
==============================================================================
--- sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderFactory.java (original)
+++ sling/whiteboard/sseifert/SLING-4381_nosql/nosql-generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderFactory.java Mon May 18 20:41:43 2015
@@ -32,6 +32,10 @@ import org.apache.sling.nosql.generic.ad
import org.apache.sling.nosql.generic.resource.AbstractNoSqlResourceProviderFactory;
import org.osgi.service.event.EventAdmin;
+/**
+ * Simple NoSQL resource provider factory based on {@link SimpleNoSqlAdapter} which just stores
+ * the resource data in a hash map.
+ */
@Component(configurationFactory = true, policy = ConfigurationPolicy.REQUIRE, metatype = true)
@Service(value = ResourceProviderFactory.class)
@Property(name = ResourceProvider.ROOTS, value = "")