You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:16:31 UTC
[sling-org-apache-sling-superimposing] 02/07: SLING-1778 initial
sling superimposing resource provider implementation
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.superimposing-0.2.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-superimposing.git
commit ba90e26f5064d650759e6a3a199319311db7c27a
Author: sseifert <ss...@unknown>
AuthorDate: Mon Sep 29 16:50:41 2014 +0000
SLING-1778 initial sling superimposing resource provider implementation
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/extensions/superimposing@1628219 13f79535-47bb-0310-9956-ffa450edef68
---
.../sling/superimposing/SuperimposingManager.java | 10 ++++++----
.../impl/SuperimposingManagerImpl.java | 12 +++++++-----
.../impl/SuperimposingManagerImplTest.java | 22 +++++++++++++---------
3 files changed, 26 insertions(+), 18 deletions(-)
diff --git a/src/main/java/org/apache/sling/superimposing/SuperimposingManager.java b/src/main/java/org/apache/sling/superimposing/SuperimposingManager.java
index 43d0043..fc0c871 100644
--- a/src/main/java/org/apache/sling/superimposing/SuperimposingManager.java
+++ b/src/main/java/org/apache/sling/superimposing/SuperimposingManager.java
@@ -18,7 +18,7 @@
*/
package org.apache.sling.superimposing;
-import java.util.Map;
+import java.util.Iterator;
import org.apache.sling.superimposing.impl.SuperimposingResourceProviderImpl;
@@ -29,13 +29,15 @@ import org.apache.sling.superimposing.impl.SuperimposingResourceProviderImpl;
public interface SuperimposingManager {
/**
- * @return true if superimposing mode is enabled
+ * @return true if superimposing mode is enabled.
*/
boolean isEnabled();
/**
- * @return Immutable map with all superimposing resource providers currently registered
+ * @return Iterator with all superimposing resource providers currently registered.
+ * Iterator is backed by a {@link java.util.concurrent.ConcurrentHashMap} and is safe to access
+ * even if superimposing resource providers are registered or unregistered at the same time.
*/
- Map<String, SuperimposingResourceProvider> getRegisteredProviders();
+ Iterator<SuperimposingResourceProvider> getRegisteredProviders();
}
diff --git a/src/main/java/org/apache/sling/superimposing/impl/SuperimposingManagerImpl.java b/src/main/java/org/apache/sling/superimposing/impl/SuperimposingManagerImpl.java
index 51809ae..055ecfa 100644
--- a/src/main/java/org/apache/sling/superimposing/impl/SuperimposingManagerImpl.java
+++ b/src/main/java/org/apache/sling/superimposing/impl/SuperimposingManagerImpl.java
@@ -22,9 +22,9 @@ import static org.apache.sling.superimposing.SuperimposingResourceProvider.PROP_
import static org.apache.sling.superimposing.SuperimposingResourceProvider.PROP_SUPERIMPOSE_SOURCE_PATH;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Dictionary;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -413,11 +413,13 @@ public class SuperimposingManagerImpl implements SuperimposingManager, EventList
}
/**
- * @return Immutable map with all superimposing resource providers currently registered
+ * @return Iterator with all superimposing resource providers currently registered.
+ * Iterator is backed by a {@link java.util.concurrent.ConcurrentHashMap} and is safe to access
+ * even if superimposing resource providers are registered or unregistered at the same time.
*/
- public Map<String, SuperimposingResourceProvider> getRegisteredProviders() {
- Map<String, SuperimposingResourceProvider> mapcopy = new HashMap<String, SuperimposingResourceProvider>(superimposingProviders);
- return Collections.unmodifiableMap(mapcopy);
+ @SuppressWarnings("unchecked")
+ public Iterator<SuperimposingResourceProvider> getRegisteredProviders() {
+ return IteratorUtils.unmodifiableIterator(superimposingProviders.values().iterator());
}
SuperimposingManagerImpl withResourceResolverFactory(ResourceResolverFactory resolverFactory) {
diff --git a/src/test/java/org/apache/sling/superimposing/impl/SuperimposingManagerImplTest.java b/src/test/java/org/apache/sling/superimposing/impl/SuperimposingManagerImplTest.java
index c4caea3..2ed1365 100644
--- a/src/test/java/org/apache/sling/superimposing/impl/SuperimposingManagerImplTest.java
+++ b/src/test/java/org/apache/sling/superimposing/impl/SuperimposingManagerImplTest.java
@@ -40,6 +40,7 @@ import javax.jcr.observation.Event;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
+import org.apache.commons.collections.IteratorUtils;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
@@ -217,6 +218,7 @@ public class SuperimposingManagerImplTest {
verifyZeroInteractions(bundleContext);
}
+ @SuppressWarnings("unchecked")
@Test
public void testFindAllSuperimposings() throws InterruptedException, LoginException, RepositoryException {
// prepare a query that returns one existing superimposed resource
@@ -231,9 +233,9 @@ public class SuperimposingManagerImplTest {
initialize(true);
// ensure the superimposed resource is detected and registered
- Map<String, SuperimposingResourceProvider> providers = underTest.getRegisteredProviders();
+ List<SuperimposingResourceProvider> providers = IteratorUtils.toList(underTest.getRegisteredProviders());
assertEquals(1, providers.size());
- SuperimposingResourceProvider provider = providers.values().iterator().next();
+ SuperimposingResourceProvider provider = providers.iterator().next();
assertEquals(SUPERIMPOSED_PATH, provider.getRootPath());
assertEquals(ORIGINAL_PATH, provider.getSourcePath());
assertFalse(provider.isOverlayable());
@@ -300,6 +302,7 @@ public class SuperimposingManagerImplTest {
return eventIterator;
}
+ @SuppressWarnings("unchecked")
@Test
public void testSuperimposedResourceCreateUpdateRemove() throws InterruptedException, LoginException, RepositoryException {
initialize(true);
@@ -309,9 +312,9 @@ public class SuperimposingManagerImplTest {
underTest.onEvent(prepareNodeCreateEvent(superimposedResource));
// ensure the superimposed resource is detected and registered
- Map<String, SuperimposingResourceProvider> providers = underTest.getRegisteredProviders();
+ List<SuperimposingResourceProvider> providers = IteratorUtils.toList(underTest.getRegisteredProviders());
assertEquals(1, providers.size());
- SuperimposingResourceProvider provider = providers.values().iterator().next();
+ SuperimposingResourceProvider provider = providers.iterator().next();
assertEquals(SUPERIMPOSED_PATH, provider.getRootPath());
assertEquals(ORIGINAL_PATH, provider.getSourcePath());
assertFalse(provider.isOverlayable());
@@ -322,9 +325,9 @@ public class SuperimposingManagerImplTest {
underTest.onEvent(prepareNodeChangeEvent(superimposedResource));
// ensure the superimposed resource update is detected and a new provider instance is registered
- providers = underTest.getRegisteredProviders();
+ providers = IteratorUtils.toList(underTest.getRegisteredProviders());
assertEquals(1, providers.size());
- SuperimposingResourceProvider provider2 = providers.values().iterator().next();
+ SuperimposingResourceProvider provider2 = providers.iterator().next();
assertEquals(SUPERIMPOSED_PATH, provider2.getRootPath());
assertEquals("/other/path", provider2.getSourcePath());
assertFalse(provider2.isOverlayable());
@@ -334,10 +337,11 @@ public class SuperimposingManagerImplTest {
underTest.onEvent(prepareNodeRemoveEvent(superimposedResource));
// ensure provider is removed
- providers = underTest.getRegisteredProviders();
+ providers = IteratorUtils.toList(underTest.getRegisteredProviders());
assertEquals(0, providers.size());
}
+ @SuppressWarnings("unchecked")
@Test
public void testSuperimposedResourceCreateMove() throws InterruptedException, LoginException, RepositoryException {
when(componentContextProperties.get(SuperimposingManagerImpl.FINDALLQUERIES_PROPERTY)).thenReturn("syntax|query");
@@ -363,9 +367,9 @@ public class SuperimposingManagerImplTest {
underTest.onEvent(prepareNodeMoveEvent(superimposedResource, oldPath));
// ensure the superimposed resource update is detected and a new provider instance is registered
- Map<String, SuperimposingResourceProvider> providers = underTest.getRegisteredProviders();
+ List<SuperimposingResourceProvider> providers = IteratorUtils.toList(underTest.getRegisteredProviders());
assertEquals(1, providers.size());
- SuperimposingResourceProvider provider = providers.values().iterator().next();
+ SuperimposingResourceProvider provider = providers.iterator().next();
assertEquals("/new/path", provider.getRootPath());
assertEquals(ORIGINAL_PATH, provider.getSourcePath());
assertFalse(provider.isOverlayable());
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.