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/27 10:01:37 UTC
[sling-org-apache-sling-feature-modelconverter] 19/40: Handle the
fact that a single provisioning model can result in multiple 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-org-apache-sling-feature-modelconverter.git
commit 767340c4ccef0cbc0a09d0484b8b98065ef3e7dc
Author: David Bosschaert <da...@gmail.com>
AuthorDate: Thu Mar 22 16:32:35 2018 +0000
Handle the fact that a single provisioning model can result in multiple features
Also, allow multiple indentical bundles when they are associated with
different run modes.
---
.../modelconverter/impl/ProvisioningToFeature.java | 11 +++--
.../modelconverter/impl/ModelConverterTest.java | 57 ++++++++++++++++------
2 files changed, 48 insertions(+), 20 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/modelconverter/impl/ProvisioningToFeature.java b/src/main/java/org/apache/sling/feature/modelconverter/impl/ProvisioningToFeature.java
index d34d471..9f88aae 100644
--- a/src/main/java/org/apache/sling/feature/modelconverter/impl/ProvisioningToFeature.java
+++ b/src/main/java/org/apache/sling/feature/modelconverter/impl/ProvisioningToFeature.java
@@ -71,10 +71,13 @@ public class ProvisioningToFeature {
public static void convert(File file, String output) {
Model model = createModel(Collections.singletonList(file), null, true, false);
final List<org.apache.sling.feature.Feature> features = buildFeatures(model);
- if (features.size() != 1)
- throw new IllegalStateException("TODO");
-
- writeFeature(features.get(0), output, 0);
+ if (features.size() != 1) {
+ for (int i=0; i<features.size(); i++) {
+ writeFeature(features.get(i), output, i+1);
+ }
+ } else {
+ writeFeature(features.get(0), output, 0);
+ }
}
public static void convert(List<File> files, String outputFile, String runModes, boolean createApp,
diff --git a/src/test/java/org/apache/sling/feature/modelconverter/impl/ModelConverterTest.java b/src/test/java/org/apache/sling/feature/modelconverter/impl/ModelConverterTest.java
index fb8b571..98f2dbc 100644
--- a/src/test/java/org/apache/sling/feature/modelconverter/impl/ModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/modelconverter/impl/ModelConverterTest.java
@@ -29,6 +29,7 @@ import org.apache.sling.provisioning.model.ArtifactGroup;
import org.apache.sling.provisioning.model.Configuration;
import org.apache.sling.provisioning.model.Feature;
import org.apache.sling.provisioning.model.KeyValueMap;
+import org.apache.sling.provisioning.model.MergeUtility;
import org.apache.sling.provisioning.model.Model;
import org.apache.sling.provisioning.model.ModelConstants;
import org.apache.sling.provisioning.model.ModelUtility;
@@ -49,6 +50,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.Comparator;
import java.util.Dictionary;
import java.util.Enumeration;
@@ -129,15 +131,25 @@ public class ModelConverterTest {
}
public void testConvertFromProvModelRoundTrip(File orgProvModel) throws Exception {
- File outJSONFile = new File(tempDir.toFile(), orgProvModel.getName() + ".json.generated");
- File outProvFile = new File(tempDir.toFile(), orgProvModel.getName() + ".txt.generated");
+ String genJSONPrefix = orgProvModel.getName() + ".json";
+ String genTxtPrefix = orgProvModel.getName() + ".txt";
+ String genSuffix = ".generated";
+ File outJSONFile = new File(tempDir.toFile(), genJSONPrefix + genSuffix);
+ List<File> allGenerateProvisioningModelFiles = new ArrayList<>();
ProvisioningToFeature.convert(orgProvModel, outJSONFile.getAbsolutePath());
- FeatureToProvisioning.convert(outJSONFile, outProvFile.getAbsolutePath(),
- artifactManager);
+
+ for (File f : tempDir.toFile().listFiles((p, n) -> n.startsWith(genJSONPrefix))) {
+ String infix = f.getName().substring(genJSONPrefix.length(),
+ f.getName().length() - genSuffix.length());
+
+ File genFile = new File(tempDir.toFile(), genTxtPrefix + infix + genSuffix);
+ allGenerateProvisioningModelFiles.add(genFile);
+ FeatureToProvisioning.convert(f, genFile.getAbsolutePath(), artifactManager);
+ }
Model expected = readProvisioningModel(orgProvModel);
- Model actual = readProvisioningModel(outProvFile);
+ Model actual = readProvisioningModel(allGenerateProvisioningModelFiles);
assertModelsEqual(expected, actual);
}
@@ -168,19 +180,32 @@ public class ModelConverterTest {
}
private static Model readProvisioningModel(File modelFile) throws IOException {
- try (final FileReader is = new FileReader(modelFile)) {
- Model model = ModelReader.read(is, modelFile.getAbsolutePath());
-
- // Fix the configurations up from the internal format to the Dictionary-based format
- return ModelUtility.getEffectiveModel(model,
- new ResolverOptions().variableResolver(new VariableResolver() {
- @Override
- public String resolve(final Feature feature, final String name) {
- // Keep variables as-is in the model
- return "${" + name + "}";
+ return readProvisioningModel(Collections.singletonList(modelFile));
+ }
+
+ private static Model readProvisioningModel(List<File> modelFiles) throws IOException {
+ Model model = null;
+ for (File modelFile : modelFiles) {
+ try (FileReader fr = new FileReader(modelFile)) {
+ Model nextModel = ModelReader.read(fr, modelFile.getAbsolutePath());
+
+ if (model == null) {
+ model = nextModel;
+ } else {
+ MergeUtility.merge(model, nextModel);
}
- }));
+ }
}
+
+ // Fix the configurations up from the internal format to the Dictionary-based format
+ return ModelUtility.getEffectiveModel(model,
+ new ResolverOptions().variableResolver(new VariableResolver() {
+ @Override
+ public String resolve(final Feature feature, final String name) {
+ // Keep variables as-is in the model
+ return "${" + name + "}";
+ }
+ }));
}
private void assertFeaturesEqual(org.apache.sling.feature.Feature expected, org.apache.sling.feature.Feature actual) {
--
To stop receiving notification emails like this one, please contact
davidb@apache.org.