You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by kw...@apache.org on 2022/01/17 10:55:19 UTC

[sling-org-apache-sling-jcr-resource] 01/01: SLING-11066 sort URIProvider implementations by ranking (descending)

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

kwin pushed a commit to branch bugfix/SLING-11066-sort-uriproviders
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-resource.git

commit 3eff0495e346271d9fc19f32fc64c2a15457c5a8
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Mon Jan 17 11:55:07 2022 +0100

    SLING-11066 sort URIProvider implementations by ranking (descending)
---
 pom.xml                                                 |  6 ++++++
 .../internal/helper/jcr/JcrResourceProvider.java        | 17 ++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/pom.xml b/pom.xml
index 222acee..bb4af2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -162,6 +162,12 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.osgi</artifactId>
+            <version>2.4.2</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
             <version>3.5</version>
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..a143252 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
@@ -49,6 +49,8 @@ import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.resource.external.URIProvider;
 import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
+import org.apache.sling.commons.osgi.Order;
+import org.apache.sling.commons.osgi.RankedServices;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.jcr.resource.api.JcrResourceConstants;
 import org.apache.sling.jcr.resource.internal.JcrListenerBaseConfig;
@@ -109,7 +111,8 @@ 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>();
+    // highest ranking first
+    private final RankedServices<URIProvider> providers = new RankedServices<>(Order.DESCENDING);
 
     private volatile SlingRepository repository;
 
@@ -161,18 +164,18 @@ public class JcrResourceProvider extends ResourceProvider<JcrProviderState> {
             bind = "bindUriProvider",
             unbind = "unbindUriProvider"
     )
-    private void bindUriProvider(URIProvider uriProvider) {
-
-        providers.put(uriProvider, uriProvider);
+    void bindUriProvider(URIProvider uriProvider, Map<String, Object> properties) {
+        providers.bind(uriProvider, properties);
         updateURIProviders();
     }
-    private void unbindUriProvider(URIProvider uriProvider) {
-        providers.remove(uriProvider);
+
+    void unbindUriProvider(URIProvider uriProvider, Map<String, Object> properties) {
+        providers.unbind(uriProvider, properties);
         updateURIProviders();
     }
 
     private void updateURIProviders() {
-        URIProvider[] ups = providers.values().toArray(new URIProvider[providers.size()]);
+        URIProvider[] ups = providers.get().toArray(new URIProvider[0]);
         this.uriProviderReference.set(ups);
     }