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 <[email protected]> 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(); + } }
