This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-resource.git


The following commit(s) were added to refs/heads/master by this push:
     new aff20ac  SLING-11066 sort URIProvider implementations by ranking 
(descending) (#20)
aff20ac is described below

commit aff20ac7dea93fbc49ea6c4bb5242ecdd863f3b2
Author: Konrad Windszus <[email protected]>
AuthorDate: Tue Jan 18 09:50:20 2022 +0100

    SLING-11066 sort URIProvider implementations by ranking (descending) (#20)
---
 .../internal/helper/jcr/JcrResourceProvider.java      | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
 
b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
index 163ccba..32ac3e1 100644
--- 
a/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
+++ 
b/src/main/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProvider.java
@@ -22,11 +22,14 @@ import java.io.Closeable;
 import java.io.IOException;
 import java.security.Principal;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+import java.util.SortedMap;
+import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -109,7 +112,11 @@ public class JcrResourceProvider extends 
ResourceProvider<JcrProviderState> {
     /** The JCR observation listeners. */
     private final Map<ObserverConfiguration, Closeable> listeners = new 
HashMap<>();
 
-    private final Map<URIProvider, URIProvider> providers = new 
ConcurrentHashMap<URIProvider, URIProvider>();
+    /**
+     * Map of bound URIProviders sorted by service ranking in descending order 
(highest ranking first).
+     * Key = service reference, value = service implementation
+     */
+    private final SortedMap<ServiceReference<URIProvider>, URIProvider> 
providers = Collections.synchronizedSortedMap(new 
TreeMap<>(Collections.reverseOrder()));
 
     private volatile SlingRepository repository;
 
@@ -161,13 +168,13 @@ public class JcrResourceProvider extends 
ResourceProvider<JcrProviderState> {
             bind = "bindUriProvider",
             unbind = "unbindUriProvider"
     )
-    private void bindUriProvider(URIProvider uriProvider) {
-
-        providers.put(uriProvider, uriProvider);
+    private void bindUriProvider(ServiceReference<URIProvider> srUriProvider, 
URIProvider uriProvider) {
+        providers.put(srUriProvider, uriProvider);
         updateURIProviders();
     }
-    private void unbindUriProvider(URIProvider uriProvider) {
-        providers.remove(uriProvider);
+
+    private void unbindUriProvider(ServiceReference<URIProvider> 
srUriProvider) {
+        providers.remove(srUriProvider);
         updateURIProviders();
     }
 

Reply via email to