Merge pull request #18 from bosschaert/SLING-8642-2
SLING-8642 Specify the target API Region in the Content Package to Feature Model converter
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
index 1f13de6..0ae7d33 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
@@ -97,12 +97,12 @@
public void init(String groupId, String artifactId, String version) {
targetFeature = new Feature(new ArtifactId(groupId, artifactId, version, null, SLING_OSGI_FEATURE_TILE_TYPE));
- initAPIRegions();
+ initAPIRegions(targetFeature);
runModes.clear();
}
- private void initAPIRegions() {
+ private void initAPIRegions(Feature feature) {
if (targetAPIRegions.size() > 0) {
Extension apiRegions = new Extension(ExtensionType.JSON, "api-regions", false);
StringBuilder jsonBuilder = new StringBuilder("[");
@@ -116,7 +116,7 @@
}
jsonBuilder.append("]");
apiRegions.setJSON(jsonBuilder.toString());
- targetFeature.getExtensions().add(apiRegions);
+ feature.getExtensions().add(apiRegions);
}
}
@@ -135,7 +135,11 @@
ArtifactId newId = appendRunmode(getTargetFeature().getId(), runMode);
- return runModes.computeIfAbsent(runMode, k -> new Feature(newId));
+ return runModes.computeIfAbsent(runMode, k -> {
+ Feature f = new Feature(newId);
+ initAPIRegions(f);
+ return f;
+ });
}
public void addArtifact(String runMode, ArtifactId id) {
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 6eeb8ae..d83816c 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -23,6 +23,7 @@
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
@@ -439,6 +440,44 @@
}
@Test
+ public void testAPIRegionsWithRunmodes() throws Exception {
+ URL cp = getClass().getResource("test-content-package.zip");
+ File cpFile = new File(cp.getFile());
+ File outDir = Files.createTempDirectory(getClass().getSimpleName()).toFile();
+
+ try {
+ converter.setBundlesDeployer(new DefaultArtifactsDeployer(outDir))
+ .setFeaturesManager(new DefaultFeaturesManager(false, 5, outDir, null, null, null)
+ .setAPIRegions(Arrays.asList("a.b.c")))
+ .setEmitter(DefaultPackagesEventsEmitter.open(outDir))
+ .convert(cpFile);
+
+ assertAPIRegion(new File(outDir, "asd.retail.all.json"), "a.b.c");
+ assertAPIRegion(new File(outDir, "asd.retail.all-author.json"), "a.b.c");
+ assertAPIRegion(new File(outDir, "asd.retail.all-publish.json"), "a.b.c");
+ } finally {
+ deleteDirTree(outDir);
+ }
+
+ }
+
+ private void assertAPIRegion(File featureFile, String region) throws IOException, FileNotFoundException {
+ try (Reader reader = new FileReader(featureFile)) {
+ Feature feature = FeatureJSONReader.read(reader, featureFile.getAbsolutePath());
+
+ Extension apiRegions = feature.getExtensions().getByName("api-regions");
+ assertEquals(ExtensionType.JSON, apiRegions.getType());
+ String json = apiRegions.getJSON();
+ JsonArray ja = Json.createReader(new StringReader(json)).readArray();
+ assertEquals(1, ja.size());
+
+ JsonObject regionJO = ja.getJsonObject(0);
+ assertEquals(region, regionJO.getString("name"));
+ assertEquals(0, regionJO.getJsonArray("exports").size());
+ }
+ }
+
+ @Test
public void overrideFeatureId() throws Exception {
URL packageUrl = getClass().getResource("test-content-package.zip");
File packageFile = FileUtils.toFile(packageUrl);