You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by an...@apache.org on 2019/08/20 21:53:13 UTC
[sling-org-apache-sling-feature-launcher] 01/01: SLING-8483 - Added
a priority to the Extension Handler to find the most suitable one
This is an automated email from the ASF dual-hosted git repository.
andysch pushed a commit to branch issues/SLING-8483
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-launcher.git
commit 5279ad5da677be9191903302a4a102d58094e1dd
Author: Andreas Schaefer <sc...@iMac.local>
AuthorDate: Tue Aug 20 14:52:56 2019 -0700
SLING-8483 - Added a priority to the Extension Handler to find the most suitable one
---
.../apache/sling/feature/launcher/impl/FeatureProcessor.java | 11 ++++++++++-
.../impl/extensions/handlers/ContentPackageHandler.java | 5 +++++
.../launcher/impl/extensions/handlers/RepoInitHandler.java | 5 +++++
.../feature/launcher/spi/extensions/ExtensionHandler.java | 6 ++++++
4 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
index 68facce..2fd5bc7 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/FeatureProcessor.java
@@ -21,11 +21,13 @@ import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.Spliterator;
import java.util.Spliterators;
+import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import org.apache.sling.feature.Artifact;
@@ -163,7 +165,14 @@ public class FeatureProcessor {
}
extensions: for(final Extension ext : app.getExtensions()) {
- for (ExtensionHandler handler : ServiceLoader.load(ExtensionHandler.class, FeatureProcessor.class.getClassLoader()))
+ List<ExtensionHandler> extensionHandlerList = new ArrayList<>();
+ for (ExtensionHandler handler : ServiceLoader.load(ExtensionHandler.class, FeatureProcessor.class.getClassLoader())) {
+ extensionHandlerList.add(handler);
+ }
+ List<ExtensionHandler> prioritizedExtensionHandlerList = extensionHandlerList.stream()
+ .sorted(Comparator.comparingInt(ExtensionHandler::getPriority).reversed())
+ .collect(Collectors.toList());
+ for (ExtensionHandler handler : prioritizedExtensionHandlerList)
{
if (handler.handle(new ExtensionContextImpl(ctx, config.getInstallation(), loadedFeatures), ext)) {
continue extensions;
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/ContentPackageHandler.java b/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/ContentPackageHandler.java
index a08061c..825be67 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/ContentPackageHandler.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/ContentPackageHandler.java
@@ -27,6 +27,11 @@ import org.apache.sling.feature.launcher.spi.extensions.ExtensionHandler;
public class ContentPackageHandler implements ExtensionHandler
{
@Override
+ public int getPriority() {
+ return FALLBACK_PRIORITY;
+ }
+
+ @Override
public boolean handle(ExtensionContext context, Extension extension) throws IOException
{
if (extension.getType() == ExtensionType.ARTIFACTS
diff --git a/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/RepoInitHandler.java b/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/RepoInitHandler.java
index 34ac652..329148a 100644
--- a/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/RepoInitHandler.java
+++ b/src/main/java/org/apache/sling/feature/launcher/impl/extensions/handlers/RepoInitHandler.java
@@ -29,6 +29,11 @@ public class RepoInitHandler implements ExtensionHandler
private static final AtomicInteger index = new AtomicInteger(1);
@Override
+ public int getPriority() {
+ return FALLBACK_PRIORITY;
+ }
+
+ @Override
public boolean handle(ExtensionContext context, Extension extension) throws Exception
{
if (extension.getName().equals(Extension.EXTENSION_NAME_REPOINIT)) {
diff --git a/src/main/java/org/apache/sling/feature/launcher/spi/extensions/ExtensionHandler.java b/src/main/java/org/apache/sling/feature/launcher/spi/extensions/ExtensionHandler.java
index acb8347..a4cef73 100644
--- a/src/main/java/org/apache/sling/feature/launcher/spi/extensions/ExtensionHandler.java
+++ b/src/main/java/org/apache/sling/feature/launcher/spi/extensions/ExtensionHandler.java
@@ -20,5 +20,11 @@ import org.apache.sling.feature.Extension;
public interface ExtensionHandler
{
+ /** Priority for Extension Handlers that are just a fallback instance **/
+ int FALLBACK_PRIORITY = -1;
+
+ /** @return The priority of the Extension Handler to select the most appropriate one. The one with the highest priority is selected **/
+ int getPriority();
+
public boolean handle(ExtensionContext context, Extension extension) throws Exception;
}