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);
}