This is an automated email from the ASF dual-hosted git repository. davidb pushed a commit to branch features-service in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature.git
commit 5c7c5e7358760e3e4c139c99d50a6cbbc9ff0891 Author: David Bosschaert <[email protected]> AuthorDate: Mon Oct 1 21:44:41 2018 +0100 Initial content for features service --- .../apache/sling/feature/builder/BuilderUtil.java | 28 ++++++++++++---------- .../feature/builder/FeatureExtensionHandler.java | 8 +++++-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/apache/sling/feature/builder/BuilderUtil.java b/src/main/java/org/apache/sling/feature/builder/BuilderUtil.java index c9bd756..d56502c 100644 --- a/src/main/java/org/apache/sling/feature/builder/BuilderUtil.java +++ b/src/main/java/org/apache/sling/feature/builder/BuilderUtil.java @@ -16,8 +16,19 @@ */ package org.apache.sling.feature.builder; +import org.apache.sling.feature.Artifact; +import org.apache.sling.feature.Bundles; +import org.apache.sling.feature.Configuration; +import org.apache.sling.feature.Configurations; +import org.apache.sling.feature.Extension; +import org.apache.sling.feature.Feature; +import org.apache.sling.feature.KeyValueMap; +import org.osgi.resource.Capability; +import org.osgi.resource.Requirement; + import java.io.StringReader; import java.io.StringWriter; +import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Map; @@ -33,16 +44,6 @@ import javax.json.JsonValue; import javax.json.JsonValue.ValueType; import javax.json.JsonWriter; -import org.apache.sling.feature.Artifact; -import org.apache.sling.feature.Bundles; -import org.apache.sling.feature.Configuration; -import org.apache.sling.feature.Configurations; -import org.apache.sling.feature.Extension; -import org.apache.sling.feature.Feature; -import org.apache.sling.feature.KeyValueMap; -import org.osgi.resource.Capability; -import org.osgi.resource.Requirement; - /** * Utility methods for the builders */ @@ -280,10 +281,13 @@ class BuilderUtil { target.getExtensions().add(ext); } } + // post processing - for(final Extension ext : target.getExtensions()) { + List<Extension> extensions = new ArrayList<>(target.getExtensions()); + extensions.add(null); // Add the 'null' extension, which is always there. + for(final Extension ext : extensions) { for(final FeatureExtensionHandler fem : context.getFeatureExtensionHandlers()) { - fem.postProcess(target, ext); + fem.postProcess(target, source, ext); } } } diff --git a/src/main/java/org/apache/sling/feature/builder/FeatureExtensionHandler.java b/src/main/java/org/apache/sling/feature/builder/FeatureExtensionHandler.java index 8434b5a..028f774 100644 --- a/src/main/java/org/apache/sling/feature/builder/FeatureExtensionHandler.java +++ b/src/main/java/org/apache/sling/feature/builder/FeatureExtensionHandler.java @@ -52,9 +52,13 @@ public interface FeatureExtensionHandler { * Post process the feature with respect to the extension. * Post processing is invoked after all extensions have been merged. * This method is called regardless whether {@link #canMerge(Extension)} returned {@code true} or not. - * @param feature The feature + * @param target The target feature + * @param source The source feature * @param extension The extension * @throws IllegalStateException If post processing failed */ - void postProcess(Feature feature, Extension extension); + void postProcess(Feature target, Feature source, Extension extension); + + // TODO how to make this type strong? ArtifactManager is only known to io... + void initialize(ArtifactResolver artifactResolver); }
