SLING-7920 - support multiple repoinit sections in a single provmodel feature
diff --git a/src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java b/src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java
index f53236a..75a5887 100644
--- a/src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java
+++ b/src/main/java/org/apache/sling/feature/modelconverter/ProvisioningToFeature.java
@@ -410,42 +410,46 @@
}
}
}
- Extension repoExtension = extensions.getByName(FeatureConstants.EXTENSION_NAME_REPOINIT);
- for(final Section sect : feature.getAdditionalSections("repoinit")) {
- String text = sect.getContents();
- if ( repoExtension == null ) {
-// repoExtension = new Extension(ExtensionType.TEXT, Extension.NAME_REPOINIT, true);
-// extensions.add(repoExtension);
-// repoExtension.setJSON(text);
+ final StringBuilder repoinitText = new StringBuilder();
+ for(final Section sect : feature.getAdditionalSections("repoinit")) {
+ repoinitText.append(sect.getContents()).append("\n");
+ }
+
+ if(repoinitText.length() > 0) {
+ Extension repoExtension = extensions.getByName(FeatureConstants.EXTENSION_NAME_REPOINIT);
+
+ if ( repoExtension == null ) {
repoExtension = new Extension(ExtensionType.JSON, FeatureConstants.EXTENSION_NAME_REPOINIT, true);
extensions.add(repoExtension);
- text = text.replace('\t', ' ');
- String[] lines = text.split("[\n]");
-
- StringBuilder sb = new StringBuilder();
- sb.append('[');
-
- boolean first = true;
- for (String t : lines) {
- if (first)
- first = false;
- else
- sb.append(',');
-
- sb.append('"');
- sb.append(t);
- sb.append('"');
- }
- sb.append(']');
-
- repoExtension.setJSON(sb.toString());
+ repoExtension.setJSON(textToJSON(repoinitText.toString()));
} else {
- repoExtension.setText(repoExtension.getText() + "\n\n" + text);
+ throw new IllegalStateException("Repoinit sections already processed");
}
}
- }
+}
+ private static String textToJSON(String text) {
+ text = text.replace('\t', ' ');
+ String[] lines = text.split("[\n]");
+
+ StringBuilder sb = new StringBuilder();
+ sb.append('[');
+
+ boolean first = true;
+ for (String t : lines) {
+ if (first)
+ first = false;
+ else
+ sb.append(',');
+
+ sb.append('"');
+ sb.append(t);
+ sb.append('"');
+ }
+ sb.append(']');
+ return sb.toString();
+ }
private static List<org.apache.sling.feature.Feature> buildFeatures(Model model, String bareFileName, Map<String, Object> options) {
final List<org.apache.sling.feature.Feature> features = new ArrayList<>();
diff --git a/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java b/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
index f70d4fa..9f042fd 100644
--- a/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/modelconverter/ModelConverterTest.java
@@ -319,6 +319,11 @@
orgLines, owLines);
}
+ @Test
+ public void testMultipleRepoinitSections() throws Exception {
+ testConvertToFeature("/more/repoinit-multiple.txt", "/more/repoinit-multiple.json");
+ }
+
public void testConvertFromProvModelRoundTrip(File orgProvModel) throws Exception {
System.out.println("*** Roundtrip converting: " + orgProvModel.getName());
List<File> allGenerateProvisioningModelFiles = new ArrayList<>();
diff --git a/src/test/resources/more/repoinit-multiple.json b/src/test/resources/more/repoinit-multiple.json
new file mode 100644
index 0000000..9a97bc4
--- /dev/null
+++ b/src/test/resources/more/repoinit-multiple.json
@@ -0,0 +1,10 @@
+{
+ "#": "this is a comment",
+
+ "id": "generated/repoinit-multiple/1.0.0",
+ "repoinit:JSON|true": [
+ "create service user one",
+ "create service user two",
+ "create service user three"
+ ]
+}
diff --git a/src/test/resources/more/repoinit-multiple.txt b/src/test/resources/more/repoinit-multiple.txt
new file mode 100644
index 0000000..25b4af4
--- /dev/null
+++ b/src/test/resources/more/repoinit-multiple.txt
@@ -0,0 +1,28 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+[feature name=repoinit-multiple]
+
+[:repoinit]
+ create service user one
+
+[:repoinit]
+ create service user two
+
+[:repoinit]
+ create service user three
\ No newline at end of file