SLING-9718 : Allow configuring the default name for the provisioning model
diff --git a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
index 2bc41b4..a8875ca 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/DependencyLifecycleParticipant.java
@@ -92,6 +92,8 @@
final ProjectInfo info = new ProjectInfo();
info.plugin = plugin;
info.project = project;
+ info.defaultProvisioningModelName = ModelPreprocessor.nodeValue(plugin,
+ "defaultProvisioningModelName", null);
env.modelProjects.put(project.getGroupId() + ":" + project.getArtifactId(), info);
File processed = new File(project.getBuild().getDirectory(), "features/processed");
try {
diff --git a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
index 5296c66..a00aa95 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
@@ -47,6 +47,7 @@
import org.apache.sling.feature.Feature;
import org.apache.sling.feature.builder.FeatureProvider;
import org.apache.sling.feature.io.json.FeatureJSONReader;
+import org.apache.sling.feature.io.json.FeatureJSONWriter;
import org.apache.sling.feature.modelconverter.FeatureToProvisioning;
import org.apache.sling.maven.slingstart.ModelPreprocessor.Environment;
import org.apache.sling.maven.slingstart.ModelPreprocessor.ProjectInfo;
@@ -69,7 +70,7 @@
public static void convert(Environment env) throws MavenExecutionException {
for (ProjectInfo pi : env.modelProjects.values()) {
- convert(env, pi);
+ convert(env, pi, pi.defaultProvisioningModelName);
}
}
@@ -93,7 +94,8 @@
return files;
}
- public static void convert(Environment env, ProjectInfo info) throws MavenExecutionException {
+ public static void convert(Environment env, ProjectInfo info, String defaultProvName)
+ throws MavenExecutionException {
final String config = ModelPreprocessor.nodeValue(info.plugin, "featuresDirectory", "src/main/features");
final List<File> files = getFeatureFiles(info.project.getBasedir(), config);
if (files == null) {
@@ -101,7 +103,7 @@
}
try {
- convert(files, info.project,
+ convert(files, info.project, defaultProvName,
id -> getFeature(id, env.session, info.project, env.artifactHandlerManager, env.resolver));
} catch (RuntimeException ex) {
throw new MavenExecutionException(ex.getMessage(), ex);
@@ -109,7 +111,10 @@
}
- static void convert(List<File> files, MavenProject project, FeatureProvider fp) throws MavenExecutionException {
+ static final String PROVISIONING_MODEL_NAME_VARIABLE = "provisioning.model.name";
+
+ static void convert(List<File> files, MavenProject project, String defaultProvName, FeatureProvider fp)
+ throws MavenExecutionException {
File processedFeaturesDir = new File(project.getBuild().getDirectory(), "features/processed");
processedFeaturesDir.mkdirs();
@@ -125,8 +130,22 @@
} else {
suggestedClassifier = null;
}
- final String json = readFeatureFile(project, f, suggestedClassifier);
+ String json = readFeatureFile(project, f, suggestedClassifier);
+ // check for prov model name
+ if (defaultProvName != null) {
+ try (final Reader reader = new StringReader(json)) {
+ final Feature feature = FeatureJSONReader.read(reader, f.getAbsolutePath());
+ if (feature.getVariables().get(PROVISIONING_MODEL_NAME_VARIABLE) == null) {
+ feature.getVariables().put(PROVISIONING_MODEL_NAME_VARIABLE, defaultProvName);
+ try (final Writer writer = new StringWriter()) {
+ FeatureJSONWriter.write(writer, feature);
+ writer.flush();
+ json = writer.toString();
+ }
+ }
+ }
+ }
try (final Writer fileWriter = new FileWriter(outFile)) {
fileWriter.write(json);
}
diff --git a/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java b/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
index 366743b..27924bd 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
@@ -41,6 +41,9 @@
@Parameter(defaultValue = "src/main/features")
private String featuresDirectory;
+ @Parameter
+ private String defaultProvisioningModelName;
+
/**
* To look up Archiver/UnArchiver implementations
*/
@@ -68,7 +71,8 @@
return;
try {
- FeatureModelConverter.convert(featureFiles, project, id -> FeatureModelConverter.getFeature(id,
+ FeatureModelConverter.convert(featureFiles, project, defaultProvisioningModelName,
+ id -> FeatureModelConverter.getFeature(id,
mavenSession,
project, artifactHandlerManager, resolver));
} catch (MavenExecutionException e) {
diff --git a/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java b/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
index b36a1b5..09f0cb6 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/ModelPreprocessor.java
@@ -69,6 +69,7 @@
public Model model;
public boolean extendMavenClassPath = true;
public final Map<org.apache.sling.provisioning.model.Artifact, Model> includedModels = new HashMap<>();
+ public String defaultProvisioningModelName;
}