You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by da...@apache.org on 2018/04/10 10:36:07 UTC

[sling-whiteboard] branch master updated: Add the ability to set groupId and version for generated features

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-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new 29c77c1  Add the ability to set groupId and version for generated features
29c77c1 is described below

commit 29c77c147ae871cd9dcdb6cc463a952fb9aa2c4e
Author: David Bosschaert <da...@gmail.com>
AuthorDate: Tue Apr 10 11:31:00 2018 +0100

    Add the ability to set groupId and version for generated features
---
 .../modelconverter/impl/ProvisioningToFeature.java | 31 +++++++++++++++-------
 .../modelconverter/impl/ModelConverterTest.java    | 25 +++++++++++++++--
 .../src/test/resources/boot.json                   |  2 +-
 .../test/resources/{boot.json => boot_gav.json}    |  2 +-
 .../src/test/resources/launchpad.json              |  2 +-
 .../src/test/resources/oak.json                    |  2 +-
 .../src/test/resources/repoinit.json               |  2 +-
 7 files changed, 50 insertions(+), 16 deletions(-)

diff --git a/featuremodel/feature-modelconverter/src/main/java/org/apache/sling/feature/modelconverter/impl/ProvisioningToFeature.java b/featuremodel/feature-modelconverter/src/main/java/org/apache/sling/feature/modelconverter/impl/ProvisioningToFeature.java
index 0db9c2b..ce77d76 100644
--- a/featuremodel/feature-modelconverter/src/main/java/org/apache/sling/feature/modelconverter/impl/ProvisioningToFeature.java
+++ b/featuremodel/feature-modelconverter/src/main/java/org/apache/sling/feature/modelconverter/impl/ProvisioningToFeature.java
@@ -68,9 +68,9 @@ import java.util.Set;
 public class ProvisioningToFeature {
     private static Logger LOGGER = LoggerFactory.getLogger(ProvisioningToFeature.class);
 
-    public static List<File> convert(File file, File outDir) {
+    public static List<File> convert(File file, File outDir, Map<String, Object> options) {
         Model model = createModel(Collections.singletonList(file), null, true, false);
-        final List<org.apache.sling.feature.Feature> features = buildFeatures(model);
+        final List<org.apache.sling.feature.Feature> features = buildFeatures(model, options);
 
         String bareFileName = file.getName();
         int idx = bareFileName.lastIndexOf('.');
@@ -108,7 +108,7 @@ public class ProvisioningToFeature {
 
             writeApplication(app, outputFile);
         } else {
-            final List<org.apache.sling.feature.Feature> features = buildFeatures(model);
+            final List<org.apache.sling.feature.Feature> features = buildFeatures(model, Collections.emptyMap());
             int index = 1;
             for(final org.apache.sling.feature.Feature feature : features) {
                 writeFeature(feature, outputFile, features.size() > 1 ? index : 0);
@@ -448,20 +448,24 @@ public class ProvisioningToFeature {
     }
 
 
-    private static List<org.apache.sling.feature.Feature> buildFeatures(final Model model) {
+    private static List<org.apache.sling.feature.Feature> buildFeatures(Model model, Map<String, Object> options) {
         final List<org.apache.sling.feature.Feature> features = new ArrayList<>();
 
+        String groupId = getOption(options, "groupId", "generated");
+        String version = getOption(options, "version", "1.0.0");
+
         for(final Feature feature : model.getFeatures() ) {
             final String idString;
-            // use a default name if not present or not usable as a Maven artifactId ( starts with ':')
-            if ( feature.getName() != null && !feature.isSpecial() ) {
+            String name = feature.getName();
+            if ( name != null ) {
+                name = name.replaceAll("[:]", "");
                 if ( feature.getVersion() != null ) {
-                    idString = "generated/" + feature.getName() + "/" + feature.getVersion();
+                    idString = groupId + "/" + name + "/" + feature.getVersion();
                 } else {
-                    idString = "generated/" + feature.getName() + "/1.0.0";
+                    idString = groupId + "/" + name + "/" + version;
                 }
             } else {
-                idString = "generated/feature/1.0.0";
+                idString = groupId + "/feature/" + version;
             }
             final org.apache.sling.feature.Feature f = new org.apache.sling.feature.Feature(ArtifactId.parse(idString));
             features.add(f);
@@ -472,6 +476,15 @@ public class ProvisioningToFeature {
         return features;
     }
 
+    @SuppressWarnings("unchecked")
+    private static <T> T getOption(Map<String, Object> options, String name, T defaultValue) {
+        if (options.containsKey(name)) {
+            return (T) options.get(name);
+        } else {
+            return defaultValue;
+        }
+    }
+
     private static void writeApplication(final Application app, final String out) {
         LOGGER.info("Writing application...");
         final File file = new File(out);
diff --git a/featuremodel/feature-modelconverter/src/test/java/org/apache/sling/feature/modelconverter/impl/ModelConverterTest.java b/featuremodel/feature-modelconverter/src/test/java/org/apache/sling/feature/modelconverter/impl/ModelConverterTest.java
index df0eacf..1b5f4aa 100644
--- a/featuremodel/feature-modelconverter/src/test/java/org/apache/sling/feature/modelconverter/impl/ModelConverterTest.java
+++ b/featuremodel/feature-modelconverter/src/test/java/org/apache/sling/feature/modelconverter/impl/ModelConverterTest.java
@@ -160,11 +160,31 @@ public class ModelConverterTest {
         }
     }
 
+    @Test
+    public void testModelGAV() throws Exception {
+        String originalProvModel = "/boot.txt";
+        String expectedJSON = "/boot_gav.json";
+
+        File inFile = new File(getClass().getResource(originalProvModel).toURI());
+
+        Map<String, Object> options = new HashMap<>();
+        options.put("groupId", "testing123");
+        options.put("version", "4.5.6");
+        List<File> files = ProvisioningToFeature.convert(inFile, tempDir.toFile(), options);
+        assertEquals("The testing code expects a single output file here", 1, files.size());
+        File outFile = files.get(0);
+
+        String expectedFile = new File(getClass().getResource(expectedJSON).toURI()).getAbsolutePath();
+        org.apache.sling.feature.Feature expected = FeatureUtil.getFeature(expectedFile, artifactManager, SubstituteVariables.NONE);
+        org.apache.sling.feature.Feature actual = FeatureUtil.getFeature(outFile.getAbsolutePath(), artifactManager, SubstituteVariables.NONE);
+        assertFeaturesEqual(expected, actual);
+    }
+
     public void testConvertFromProvModelRoundTrip(File orgProvModel) throws Exception {
         System.out.println("*** Roundtrip converting: " + orgProvModel.getName());
         List<File> allGenerateProvisioningModelFiles = new ArrayList<>();
 
-        List<File> generated = ProvisioningToFeature.convert(orgProvModel, tempDir.toFile());
+        List<File> generated = ProvisioningToFeature.convert(orgProvModel, tempDir.toFile(), Collections.emptyMap());
 
         for (File f : generated) {
             String baseName = f.getName().substring(0, f.getName().length() - ".json".length());
@@ -181,7 +201,7 @@ public class ModelConverterTest {
     public void testConvertToFeature(String originalProvModel, String expectedJSON) throws Exception {
         File inFile = new File(getClass().getResource(originalProvModel).toURI());
 
-        List<File> files = ProvisioningToFeature.convert(inFile, tempDir.toFile());
+        List<File> files = ProvisioningToFeature.convert(inFile, tempDir.toFile(), Collections.emptyMap());
         assertEquals("The testing code expects a single output file here", 1, files.size());
         File outFile = files.get(0);
 
@@ -234,6 +254,7 @@ public class ModelConverterTest {
     }
 
     private void assertFeaturesEqual(org.apache.sling.feature.Feature expected, org.apache.sling.feature.Feature actual) {
+        assertEquals(expected.getId(), actual.getId());
         assertEquals(expected.getTitle(), actual.getTitle());
         assertEquals(expected.getDescription(), actual.getDescription());
         assertEquals(expected.getVendor(), actual.getVendor());
diff --git a/featuremodel/feature-modelconverter/src/test/resources/boot.json b/featuremodel/feature-modelconverter/src/test/resources/boot.json
index e535f7b..313fec9 100644
--- a/featuremodel/feature-modelconverter/src/test/resources/boot.json
+++ b/featuremodel/feature-modelconverter/src/test/resources/boot.json
@@ -2,7 +2,7 @@
     "#": "The model version defaults to 1 if not specified",
     "model-version": "1",
     
-    "id": "org.apache.sling.simple/boot/1.0.0",
+    "id": "generated/boot/1.0.0",
     "variables": {
         "slf4j.version": "1.7.25",
         
diff --git a/featuremodel/feature-modelconverter/src/test/resources/boot.json b/featuremodel/feature-modelconverter/src/test/resources/boot_gav.json
similarity index 98%
copy from featuremodel/feature-modelconverter/src/test/resources/boot.json
copy to featuremodel/feature-modelconverter/src/test/resources/boot_gav.json
index e535f7b..1d997f8 100644
--- a/featuremodel/feature-modelconverter/src/test/resources/boot.json
+++ b/featuremodel/feature-modelconverter/src/test/resources/boot_gav.json
@@ -2,7 +2,7 @@
     "#": "The model version defaults to 1 if not specified",
     "model-version": "1",
     
-    "id": "org.apache.sling.simple/boot/1.0.0",
+    "id": "testing123/boot/4.5.6",
     "variables": {
         "slf4j.version": "1.7.25",
         
diff --git a/featuremodel/feature-modelconverter/src/test/resources/launchpad.json b/featuremodel/feature-modelconverter/src/test/resources/launchpad.json
index 2fa94b3..0c103ba 100644
--- a/featuremodel/feature-modelconverter/src/test/resources/launchpad.json
+++ b/featuremodel/feature-modelconverter/src/test/resources/launchpad.json
@@ -1,5 +1,5 @@
 {
-  "id":"generated:feature:1.0.0",
+  "id":"generated:launchpad:1.0.0",
   "variables":{
     "provisioning.model.name":":launchpad"
   },
diff --git a/featuremodel/feature-modelconverter/src/test/resources/oak.json b/featuremodel/feature-modelconverter/src/test/resources/oak.json
index 03f64c3..0db7923 100644
--- a/featuremodel/feature-modelconverter/src/test/resources/oak.json
+++ b/featuremodel/feature-modelconverter/src/test/resources/oak.json
@@ -1,5 +1,5 @@
 {
-    "id": "org.apache.sling.simple/oak/1.0.0",
+    "id": "generated/oak/1.0.0",
     
     "variables": {
         "oak.version": "1.6.8"
diff --git a/featuremodel/feature-modelconverter/src/test/resources/repoinit.json b/featuremodel/feature-modelconverter/src/test/resources/repoinit.json
index 1fe41f3..06d179e 100644
--- a/featuremodel/feature-modelconverter/src/test/resources/repoinit.json
+++ b/featuremodel/feature-modelconverter/src/test/resources/repoinit.json
@@ -1,7 +1,7 @@
 {
     "#": "this is a comment",
 
-    "id": "org.apache.sling.simple/repoinit/1.0.0",
+    "id": "generated/repoinit/1.0.0",
     "bundles": [
         {
             "id": "org.apache.sling/org.apache.sling.repoinit.parser/1.2.0",

-- 
To stop receiving notification emails like this one, please contact
davidb@apache.org.