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

Reply via email to