This is an automated email from the ASF dual-hosted git repository. davidb pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-extension-content.git
commit ef3556b5baa27198b7f266ea1fe540c68778aeff Author: Dominik Suess <[email protected]> AuthorDate: Tue Nov 6 13:53:47 2018 +0100 SLING-8077 - refactor ContentorderMergeProcessor to MergeHandler adjusting Features pre merging instead of postprocessing --- .../content/ContentOrderMergeProcessor.java | 47 ++++++++++++++++------ 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessor.java b/src/main/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessor.java index f85f18a..061ce24 100644 --- a/src/main/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessor.java +++ b/src/main/java/org/apache/sling/feature/extension/content/ContentOrderMergeProcessor.java @@ -23,25 +23,46 @@ import org.apache.sling.feature.Feature; import org.apache.sling.feature.FeatureConstants; import org.apache.sling.feature.KeyValueMap; import org.apache.sling.feature.builder.HandlerContext; +import org.apache.sling.feature.builder.MergeHandler; import org.apache.sling.feature.builder.PostProcessHandler; -public class ContentOrderMergeProcessor implements PostProcessHandler { +public class ContentOrderMergeProcessor implements MergeHandler { private static final String DEFAULT_CONTENT_START_ORDER = "default.content.startorder"; - @Override - public void postProcess(HandlerContext context, Feature feature, Extension extension) { - if (extension.getType() == ExtensionType.ARTIFACTS - && extension.getName().equals(FeatureConstants.EXTENSION_NAME_CONTENT_PACKAGES)) { - String defaultOrder = feature.getVariables().get(DEFAULT_CONTENT_START_ORDER); - if (defaultOrder != null) { - for (Artifact a : extension.getArtifacts()) { - KeyValueMap kvm = a.getMetadata(); - if(kvm.get(Artifact.KEY_START_ORDER) == null) { - kvm.put(Artifact.KEY_START_ORDER, defaultOrder); - } + private void processFeature(HandlerContext context, Feature feature, Extension extension) { + String defaultOrder = feature.getVariables().get(DEFAULT_CONTENT_START_ORDER); + if (defaultOrder != null) { + for (Artifact a : extension.getArtifacts()) { + KeyValueMap kvm = a.getMetadata(); + if(kvm.get(Artifact.KEY_START_ORDER) == null) { + kvm.put(Artifact.KEY_START_ORDER, defaultOrder); } - feature.getVariables().remove(DEFAULT_CONTENT_START_ORDER); + } + feature.getVariables().remove(DEFAULT_CONTENT_START_ORDER); + } + } + + @Override + public boolean canMerge(Extension extension) { + return extension.getType() == ExtensionType.ARTIFACTS + && extension.getName().equals(FeatureConstants.EXTENSION_NAME_CONTENT_PACKAGES); + } + + @Override + public void merge(HandlerContext context, Feature target, Feature source, Extension targetEx, Extension sourceEx) { + processFeature(context, target, targetEx); + processFeature(context, source, sourceEx); + for (final Artifact a : sourceEx.getArtifacts()) { + boolean replace = true; + final Artifact existing = targetEx.getArtifacts().getSame(a.getId()); + if (existing != null && existing.getId().getOSGiVersion().compareTo(a.getId().getOSGiVersion()) > 0) { + replace = false; + } + + if (replace) { + targetEx.getArtifacts().removeSame(a.getId()); + targetEx.getArtifacts().add(a); } } }
