You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2018/08/14 09:06:49 UTC

[sling-org-apache-sling-feature-modelconverter] branch master updated: SLING-7823 : Handle special run modes for feature to provisioning model conversion

This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-modelconverter.git


The following commit(s) were added to refs/heads/master by this push:
     new b95e983  SLING-7823 : Handle special run modes for feature to provisioning model conversion
b95e983 is described below

commit b95e9830ee51691255d24cb3ee047e8893bbe5c6
Author: Carsten Ziegeler <cz...@adobe.com>
AuthorDate: Tue Aug 14 11:06:44 2018 +0200

    SLING-7823 : Handle special run modes for feature to provisioning model conversion
---
 .../modelconverter/FeatureToProvisioning.java      | 71 ++++++++++++++--------
 1 file changed, 46 insertions(+), 25 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/modelconverter/FeatureToProvisioning.java b/src/main/java/org/apache/sling/feature/modelconverter/FeatureToProvisioning.java
index 14a5265..fa82663 100644
--- a/src/main/java/org/apache/sling/feature/modelconverter/FeatureToProvisioning.java
+++ b/src/main/java/org/apache/sling/feature/modelconverter/FeatureToProvisioning.java
@@ -16,6 +16,23 @@
  */
 package org.apache.sling.feature.modelconverter;
 
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonReader;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+
 import org.apache.sling.feature.Application;
 import org.apache.sling.feature.ArtifactId;
 import org.apache.sling.feature.Bundles;
@@ -41,23 +58,6 @@ import org.apache.sling.provisioning.model.io.ModelWriter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonReader;
-import javax.json.JsonString;
-import javax.json.JsonValue;
-
 /** Converter that converts the feature model to the provisioning model.
  */
 public class FeatureToProvisioning {
@@ -174,6 +174,8 @@ public class FeatureToProvisioning {
 
     private static void convert(Feature f, KeyValueMap variables, Bundles bundles, Configurations configurations, KeyValueMap frameworkProps,
             Extensions extensions, String outputFile, String [] runModes) {
+        final Map<String, Feature> additionalFeatures = new HashMap<>();
+
         if (runModes != null && runModes.length == 0) {
             runModes = null;
         }
@@ -209,19 +211,35 @@ public class FeatureToProvisioning {
                 }
             }
 
+            String[] bundleRunModes = runModes;
+            if (bundleRunModes == null) {
+                bundleRunModes = getRunModes(bundle);
+            }
+
             int startLevel;
             String sl = bundle.getMetadata().get("start-level");
-            if (sl != null) {
-                startLevel = Integer.parseInt(sl);
+            // special handling for :boot or :launchpad
+            if ( sl != null && sl.startsWith(":") ) {
+                if ( bundleRunModes != null ) {
+                    LOGGER.error("Unable to convert feature {}. Run modes must not be defined for bundles with start-level {}", f.getName(), sl);
+                    System.exit(1);
+                }
+
+                Feature addFeat = additionalFeatures.get(sl);
+                if ( addFeat == null ) {
+                    addFeat = new Feature(sl);
+                    additionalFeatures.put(sl, addFeat);
+                }
+                addFeat.getOrCreateRunMode(null).getOrCreateArtifactGroup(0).add(newBundle);
             } else {
-                startLevel = 20;
-            }
+                if (sl != null) {
+                    startLevel = Integer.parseInt(sl);
+                } else {
+                    startLevel = 20;
+                }
 
-            String[] bundleRunModes = runModes;
-            if (bundleRunModes == null) {
-                bundleRunModes = getRunModes(bundle);
+                f.getOrCreateRunMode(bundleRunModes).getOrCreateArtifactGroup(startLevel).add(newBundle);
             }
-            f.getOrCreateRunMode(bundleRunModes).getOrCreateArtifactGroup(startLevel).add(newBundle);
         }
 
         // configurations
@@ -316,6 +334,9 @@ public class FeatureToProvisioning {
         final File file = new File(out);
         final Model m = new Model();
         m.getFeatures().add(f);
+        for(final Feature addFeat : additionalFeatures.values()) {
+            m.getFeatures().add(addFeat);
+        }
         try ( final FileWriter writer = new FileWriter(file)) {
             ModelWriter.write(writer, m);
         } catch ( final IOException ioe) {