Propchange:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed May 20 12:53:50 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/SimpleNoSqlResourceProviderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderTransactionalTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderTransactionalTest.java?rev=1680549&view=auto
==============================================================================
---
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderTransactionalTest.java
(added)
+++
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderTransactionalTest.java
Wed May 20 12:53:50 2015
@@ -0,0 +1,73 @@
+/*
+ * 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 static org.junit.Assert.assertNull;
+
+import java.util.HashMap;
+import java.util.Map;
+
+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.ResourceProvider;
+import
org.apache.sling.nosql.generic.resource.impl.AbstractNoSqlResourceProviderTransactionalTest;
+import
org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableMap;
+
+/**
+ * Test basic ResourceResolver and ValueMap with different data types.
+ */
+public class SimpleNoSqlResourceProviderTransactionalTest extends
AbstractNoSqlResourceProviderTransactionalTest {
+
+ private Resource testRoot;
+
+ @Override
+ protected void registerResourceProviderFactory() {
+ context.registerInjectActivateService(new
SimpleNoSqlResourceProviderFactory(), ImmutableMap.<String, Object>builder()
+ .put(ResourceProvider.ROOTS, "/nosql-simple")
+ .build());
+ }
+
+ @Override
+ protected Resource testRoot() {
+ if (this.testRoot == null) {
+ try {
+ Map<String, Object> props = new HashMap<String, Object>();
+ props.put(JcrConstants.JCR_PRIMARYTYPE,
JcrConstants.NT_UNSTRUCTURED);
+ final Resource root =
context.resourceResolver().getResource("/");
+ Resource noSqlRoot = context.resourceResolver().create(root,
"nosql-simple", props);
+ this.testRoot = context.resourceResolver().create(noSqlRoot,
"test", props);
+ context.resourceResolver().commit();
+ }
+ catch (PersistenceException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+ return this.testRoot;
+ }
+
+ @Test
+ public void testGetInvalidPath() {
+ assertNull(context.resourceResolver().getResource(testRoot().getPath()
+ "/invalid/1"));
+ }
+
+}
Propchange:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderTransactionalTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/SimpleNoSqlResourceProviderTransactionalTest.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed May 20 12:53:50 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/SimpleNoSqlResourceProviderTransactionalTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlAdapter.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlAdapter.java?rev=1680549&view=auto
==============================================================================
---
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlAdapter.java
(added)
+++
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlAdapter.java
Wed May 20 12:53:50 2015
@@ -0,0 +1,117 @@
+/*
+ * 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.provider;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.SortedMap;
+import java.util.TreeMap;
+import java.util.regex.Pattern;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.nosql.generic.adapter.NoSqlAdapter;
+import org.apache.sling.nosql.generic.adapter.NoSqlData;
+import org.apache.sling.nosql.generic.resource.impl.PathUtil;
+
+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 SortedMap<String, Map<String,Object>> store = new
TreeMap<String, Map<String,Object>>();
+
+ public boolean validPath(String path) {
+ return !(StringUtils.contains(path, "/invalid/") ||
StringUtils.endsWith(path, "/invalid"));
+ }
+
+ public NoSqlData get(String path) {
+ Map<String,Object> properties = store.get(path);
+ if (properties != null) {
+ return new NoSqlData(path, properties);
+ }
+ else {
+ return null;
+ }
+ }
+
+ public Iterator<NoSqlData> getChildren(String parentPath) {
+ Iterator<String> keys = store.keySet().iterator();
+
+ final Pattern childKeyPattern =
PathUtil.getChildPathPattern(parentPath);
+ Iterator<String> childKeys = Iterators.filter(keys, new
Predicate<String>() {
+ public boolean apply(String path) {
+ return childKeyPattern.matcher(path).matches();
+ }
+ });
+
+ return Iterators.transform(childKeys, new Function<String,
NoSqlData>() {
+ public NoSqlData apply(String path) {
+ return get(path);
+ }
+ });
+ }
+
+ public boolean store(NoSqlData data) {
+ boolean exists = store.containsKey(data.getPath());
+ store.put(data.getPath(), new HashMap<String,
Object>(data.getProperties()));
+ return !exists;
+ }
+
+ public boolean deleteRecursive(String path) {
+ boolean deletedAnything = false;
+ final Pattern pathToDeletePattern =
PathUtil.getSameOrDescendantPathPattern(path);
+ Iterator<Entry<String, Map<String,Object>>> entries =
store.entrySet().iterator();
+ while (entries.hasNext()) {
+ Entry<String, Map<String,Object>> entry = entries.next();
+ if (pathToDeletePattern.matcher(entry.getKey()).matches()) {
+ entries.remove();
+ deletedAnything = true;
+ }
+ }
+ return deletedAnything;
+ }
+
+ public Iterator<NoSqlData> query(String query, String language) {
+ // implement simple dummy query
+ if (StringUtils.equals(language, "simple") &&
StringUtils.equals(query, "all")) {
+ final Iterator<Entry<String, Map<String,Object>>> entries =
store.entrySet().iterator();
+ return new Iterator<NoSqlData>() {
+ public boolean hasNext() {
+ return entries.hasNext();
+ }
+ public NoSqlData next() {
+ Entry<String, Map<String,Object>> entry = entries.next();
+ return new NoSqlData(entry.getKey(), entry.getValue());
+ }
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+ return Collections.<NoSqlData>emptyList().iterator();
+ }
+
+}
Propchange:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlAdapter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlAdapter.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed May 20 12:53:50 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/provider/SimpleNoSqlAdapter.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlResourceProviderFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlResourceProviderFactory.java?rev=1680549&view=auto
==============================================================================
---
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlResourceProviderFactory.java
(added)
+++
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlResourceProviderFactory.java
Wed May 20 12:53:50 2015
@@ -0,0 +1,77 @@
+/*
+ * 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.provider;
+
+import java.util.Map;
+
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.ConfigurationPolicy;
+import org.apache.felix.scr.annotations.Properties;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.resource.QueriableResourceProvider;
+import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceProviderFactory;
+import org.apache.sling.nosql.generic.adapter.NoSqlAdapter;
+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)
+@Properties({
+ @Property(name = ResourceProvider.ROOTS, value = ""),
+ @Property(name = QueriableResourceProvider.LANGUAGES, value = { "simple" })
+})
+public class SimpleNoSqlResourceProviderFactory extends
AbstractNoSqlResourceProviderFactory {
+
+ @Reference
+ private EventAdmin eventAdmin;
+
+ private NoSqlAdapter noSqlAdapter;
+
+ @Activate
+ protected void activate(final Map<String, Object> props) {
+ noSqlAdapter = new SimpleNoSqlAdapter();
+ }
+
+ @Override
+ protected NoSqlAdapter getNoSqlAdapter() {
+ return noSqlAdapter;
+ }
+
+ @Override
+ protected EventAdmin getEventAdmin() {
+ return eventAdmin;
+ }
+
+ protected void bindEventAdmin(EventAdmin eventAdmin) {
+ this.eventAdmin = eventAdmin;
+ }
+
+ protected void unbindEventAdmin(EventAdmin eventAdmin) {
+ this.eventAdmin = null;
+ }
+
+}
Propchange:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlResourceProviderFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/nosql/generic/src/test/java/org/apache/sling/nosql/generic/simple/provider/SimpleNoSqlResourceProviderFactory.java
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed May 20 12:53:50 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/provider/SimpleNoSqlResourceProviderFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added:
sling/trunk/contrib/nosql/generic/src/test/resources/OSGI-INF/org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory.xml
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/nosql/generic/src/test/resources/OSGI-INF/org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory.xml?rev=1680549&view=auto
==============================================================================
---
sling/trunk/contrib/nosql/generic/src/test/resources/OSGI-INF/org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory.xml
(added)
+++
sling/trunk/contrib/nosql/generic/src/test/resources/OSGI-INF/org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory.xml
Wed May 20 12:53:50 2015
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<components xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0">
+ <scr:component
name="org.apache.sling.nosql.generic.simple.SimpleNoSqlResourceProviderFactory"
configuration-policy="require" activate="activate">
+ <implementation
class="org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory"/>
+ <service servicefactory="false">
+ <provide
interface="org.apache.sling.api.resource.ResourceProviderFactory"/>
+ </service>
+ <property name="provider.roots" value=""/>
+ <property name="provider.query.languages" value="simple"/>
+ <property name="service.vendor" value="The Apache Software
Foundation"/>
+ <property name="service.pid"
value="org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory"/>
+ <reference name="eventAdmin"
interface="org.osgi.service.event.EventAdmin" cardinality="1..1"
policy="static" bind="bindEventAdmin" unbind="unbindEventAdmin"/>
+ </scr:component>
+</components>
Propchange:
sling/trunk/contrib/nosql/generic/src/test/resources/OSGI-INF/org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
sling/trunk/contrib/nosql/generic/src/test/resources/OSGI-INF/org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory.xml
------------------------------------------------------------------------------
--- svn:keywords (added)
+++ svn:keywords Wed May 20 12:53:50 2015
@@ -0,0 +1 @@
+LastChangedDate LastChangedRevision LastChangedBy HeadURL Id Author
Propchange:
sling/trunk/contrib/nosql/generic/src/test/resources/OSGI-INF/org.apache.sling.nosql.generic.simple.provider.SimpleNoSqlResourceProviderFactory.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain