You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by si...@apache.org on 2019/04/24 13:52:03 UTC

[sling-org-apache-sling-feature-cpconverter] 11/15: override only supposed to affect FeatureFile, not filenames & packageIds

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

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

commit c76dea6c98566e4945e2dcf75caa4e65da4abd1f
Author: Dominik Suess <su...@adobe.com>
AuthorDate: Fri Apr 12 09:01:50 2019 +0200

    override only supposed to affect FeatureFile, not filenames & packageIds
---
 .../ContentPackage2FeatureModelConverter.java      | 51 ++++++++++++++-------
 ...ntentPackage2FeatureModelConverterLauncher.java |  4 +-
 .../ContentPackage2FeatureModelConverterTest.java  | 52 ++++++++++++++++++++++
 3 files changed, 90 insertions(+), 17 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
index 149c673..d686eb6 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -93,6 +93,8 @@ public class ContentPackage2FeatureModelConverter {
     private VaultPackageAssembler mainPackageAssembler = null;
 
     private String id;
+    
+    private String idOverride;
 
     public ContentPackage2FeatureModelConverter setStrictValidation(boolean strictValidation) {
         this.strictValidation = strictValidation;
@@ -148,6 +150,12 @@ public class ContentPackage2FeatureModelConverter {
         this.id = id;
         return this;
     }
+    
+    public ContentPackage2FeatureModelConverter setIdOverride(String id) {
+        this.idOverride = id;
+        return this;
+    }
+
 
     public Feature getRunMode(String runMode) {
         if (getTargetFeature() == null) {
@@ -158,19 +166,27 @@ public class ContentPackage2FeatureModelConverter {
             return getTargetFeature();
         }
 
-        ArtifactId id = getTargetFeature().getId();
-        final String classifier;
-        if (id.getClassifier() != null && !id.getClassifier().isEmpty()) {
-            classifier = id.getClassifier() + '-' + runMode;
+        ArtifactId newId = appendRunmode(getTargetFeature().getId(), runMode);
+
+        return runModes.computeIfAbsent(runMode, k -> new Feature(newId));
+    }
+
+    private ArtifactId appendRunmode(ArtifactId id, String runMode) {
+
+        ArtifactId newId;
+        if (runMode == null) {
+            newId = id;
         } else {
-            classifier = runMode;
-        }
+            final String classifier;
+            if (id.getClassifier() != null && !id.getClassifier().isEmpty()) {
+                classifier = id.getClassifier() + '-' + runMode;
+            } else {
+                classifier = runMode;
+            }
 
-        return runModes.computeIfAbsent(runMode, k -> new Feature(new ArtifactId(id.getGroupId(),
-                                                                                 id.getArtifactId(),
-                                                                                 id.getVersion(),
-                                                                                 classifier,
-                                                                                 id.getType())));
+            newId = new ArtifactId(id.getGroupId(), id.getArtifactId(), id.getVersion(), classifier, id.getType());
+        }
+        return newId;
     }
 
     public BundlesDeployer getArtifactDeployer() {
@@ -287,11 +303,11 @@ public class ContentPackage2FeatureModelConverter {
 
             // finally serialize the Feature Model(s) file(s)
 
-            seralize(targetFeature);
+            seralize(targetFeature, null);
 
             if (!runModes.isEmpty()) {
-                for (Feature runMode : runModes.values()) {
-                    seralize(runMode);
+                for (java.util.Map.Entry<String, Feature> runmodeEntry : runModes.entrySet()) {
+                    seralize(runmodeEntry.getValue(), runmodeEntry.getKey());
                 }
             }
         }
@@ -334,7 +350,7 @@ public class ContentPackage2FeatureModelConverter {
         }
     }
 
-    private void seralize(Feature feature) throws Exception {
+    private void seralize(Feature feature, String runMode) throws Exception {
         StringBuilder fileName = new StringBuilder().append(feature.getId().getArtifactId());
 
         String classifier = feature.getId().getClassifier();
@@ -348,6 +364,11 @@ public class ContentPackage2FeatureModelConverter {
 
         logger.info("Conversion complete!", targetFile);
         logger.info("Writing resulting Feature File to '{}'...", targetFile);
+        
+        if ( idOverride != null ) {
+            ArtifactId idOverrride = appendRunmode(ArtifactId.parse(idOverride), runMode);
+            feature = feature.copy(idOverrride);
+        }
 
         try (FileWriter targetWriter = new FileWriter(targetFile)) {
             FeatureJSONWriter.write(targetWriter, feature);
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java b/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
index 4fe2a57..46edf6f 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/cli/ContentPackage2FeatureModelConverterLauncher.java
@@ -104,11 +104,11 @@ public final class ContentPackage2FeatureModelConverterLauncher implements Runna
                                                              .setBundlesStartOrder(bundlesStartOrder)
                                                              .setArtifactsOutputDirectory(artifactsOutputDirectory)
                                                              .setFeatureModelsOutputDirectory(featureModelsOutputDirectory)
-                                                             .setId(artifactId);
+                                                             .setIdOverride(artifactId);
 
             if (filteringPatterns != null && filteringPatterns.length > 0) {
                 for (String filteringPattern : filteringPatterns) {
-                    converter.addFilteringPattern(filteringPattern);
+                    converter.addFilteringPattern(filteringPattern);    
                 }
             }
 
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
index 7fb3b15..0e06589 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -237,4 +237,56 @@ public class ContentPackage2FeatureModelConverterTest {
                  .convert(packageFile);
     }
 
+    
+    @Test
+    public void overrideFeatureId() throws Exception {
+        URL packageUrl = getClass().getResource("test-content-package.zip");
+        File packageFile = FileUtils.toFile(packageUrl);
+
+        File outputDirectory = new File(System.getProperty("testDirectory"), getClass().getName() + '_' + System.currentTimeMillis());
+
+        String overrideId = "${project.groupId}:${project.artifactId}:slingosgifeature:asd.test.all-1.0.0:${project.version}";
+        converter.setBundlesStartOrder(5)
+                 .setArtifactsOutputDirectory(outputDirectory)
+                 .setFeatureModelsOutputDirectory(outputDirectory)
+                 .setIdOverride(overrideId)
+                 .convert(packageFile);
+
+        verifyFeatureFile(outputDirectory,
+                          "asd.retail.all.json",
+                          "${project.groupId}:${project.artifactId}:slingosgifeature:asd.test.all-1.0.0:${project.version}",
+                          Arrays.asList("org.apache.felix:org.apache.felix.framework:6.0.1"),
+                          Arrays.asList("org.apache.sling.commons.log.LogManager.factory.config-asd-retail"),
+                          Arrays.asList("asd.sample:asd.retail.all:zip:cp2fm-converted:0.0.1"));
+        verifyFeatureFile(outputDirectory,
+                          "asd.retail.all-author.json",
+                          "${project.groupId}:${project.artifactId}:slingosgifeature:asd.test.all-1.0.0-author:${project.version}",
+                          Arrays.asList("org.apache.sling:org.apache.sling.api:2.20.0"),
+                          Collections.emptyList(),
+                          Collections.emptyList());
+        verifyFeatureFile(outputDirectory,
+                          "asd.retail.all-publish.json",
+                          "${project.groupId}:${project.artifactId}:slingosgifeature:asd.test.all-1.0.0-publish:${project.version}",
+                          Arrays.asList("org.apache.sling:org.apache.sling.models.api:1.3.8"),
+                          Arrays.asList("org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-asd-retail"),
+                          Collections.emptyList());
+
+        ZipFile zipFile = new ZipFile(new File(outputDirectory, "asd/sample/asd.retail.all/0.0.1/asd.retail.all-0.0.1-cp2fm-converted.zip"));
+        for (String expectedEntry : new String[] {
+                "jcr_root/content/asd/.content.xml",
+                "jcr_root/content/asd/resources.xml",
+                "jcr_root/apps/.content.xml",
+                "META-INF/vault/properties.xml",
+                "META-INF/vault/config.xml",
+                "META-INF/vault/settings.xml",
+                "META-INF/vault/filter.xml",
+                "META-INF/vault/definition/.content.xml",
+                "jcr_root/etc/packages/asd/test-bundles.zip",
+                "jcr_root/etc/packages/asd/test-configurations.zip",
+                "jcr_root/etc/packages/asd/test-content.zip",
+                }) {
+            assertNotNull(zipFile.getEntry(expectedEntry));
+        }
+        zipFile.close();
+    }
 }