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/06/15 12:27:16 UTC
[sling-slingstart-maven-plugin] branch master updated: SLING-7738
Slingstart Maven Plugin should allow substitution of project coordinates in
feature model files
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-slingstart-maven-plugin.git
The following commit(s) were added to refs/heads/master by this push:
new f76b8bd SLING-7738 Slingstart Maven Plugin should allow substitution of project coordinates in feature model files
f76b8bd is described below
commit f76b8bd213ee2c2c1131c0d41880f157e134c3e6
Author: David Bosschaert <da...@gmail.com>
AuthorDate: Fri Jun 15 13:26:55 2018 +0100
SLING-7738 Slingstart Maven Plugin should allow substitution of project coordinates in feature model files
---
.../maven/slingstart/FeatureModelConverter.java | 72 +++++++++++++++++-----
.../maven/slingstart/GenerateResourcesMojo.java | 23 ++-----
.../slingstart/FeatureModelConverterTest.java | 22 +++++--
.../src/main/features/simple_inherits.json | 2 +-
4 files changed, 83 insertions(+), 36 deletions(-)
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 26c4b5a..01887cb 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/FeatureModelConverter.java
@@ -27,55 +27,99 @@ import org.apache.sling.maven.slingstart.ModelPreprocessor.Environment;
import org.apache.sling.maven.slingstart.ModelPreprocessor.ProjectInfo;
import java.io.File;
+import java.io.FileWriter;
import java.io.IOException;
+import java.nio.file.Files;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
public class FeatureModelConverter {
static final String BUILD_DIR = "provisioning/converted";
- public void convert(MavenSession session, Environment env) throws MavenExecutionException {
+ public static void convert(MavenSession session, Environment env) throws MavenExecutionException {
Map<String, ProjectInfo> projs = env.modelProjects;
for (ProjectInfo pi : projs.values()) {
convert(session, pi.project);
}
}
- private void convert(MavenSession session, MavenProject project) throws MavenExecutionException {
+ private static void convert(MavenSession session, MavenProject project) throws MavenExecutionException {
File featuresDir = new File(project.getBasedir(), "src/main/features");
File[] files = featuresDir.listFiles();
- List<File> featureFiles;
- if (files != null) {
- featureFiles = Arrays.asList(files);
- } else {
- featureFiles = Collections.emptyList();
+ if (files == null || files.length == 0)
+ return;
+
+ ArtifactManager am;
+ try {
+ am = getArtifactManager(project, session);
+ } catch (IOException ex) {
+ throw new MavenExecutionException("Unable to obtain artifactManager", ex);
}
- if (featureFiles.size() == 0)
- return;
+ convert(files, project, am);
+ }
+
+ static void convert(File[] files, MavenProject project, ArtifactManager am) throws MavenExecutionException {
+ File processedFeaturesDir = new File(project.getBuild().getDirectory(), "features/processed");
+ processedFeaturesDir.mkdirs();
+
+ List<File> substedFiles = new ArrayList<>();
+ for (File f : files) {
+ if (!f.getName().endsWith(".json")) {
+ continue;
+ }
+
+ try {
+ substedFiles.add(substituteVars(project, f, processedFeaturesDir));
+ } catch (IOException e) {
+ throw new MavenExecutionException("Problem processing feature file " + f.getAbsolutePath(), e);
+ }
+ }
File targetDir = new File(project.getBuild().getDirectory(), BUILD_DIR);
targetDir.mkdirs();
try {
- ArtifactManager am = getArtifactManager(project, session);
for (File f : files) {
if (!f.getName().endsWith(".json")) {
continue;
}
File genFile = new File(targetDir, f.getName() + ".txt");
- FeatureToProvisioning.convert(f, genFile, am, files);
+ FeatureToProvisioning.convert(f, genFile, am, substedFiles.toArray(new File[] {}));
}
} catch (Exception e) {
throw new MavenExecutionException("Cannot convert feature files to provisioning model", e);
}
}
- private ArtifactManager getArtifactManager(MavenProject project, MavenSession session)
+ private static File substituteVars(MavenProject project, File f, File processedFeaturesDir) throws IOException {
+ File file = new File(processedFeaturesDir, f.getName());
+
+ if (file.exists() && file.lastModified() > f.lastModified()) {
+ // The file already exists, so we don't need to write it again
+ return file;
+ }
+
+ try (FileWriter fw = new FileWriter(file)) {
+ for (String s : Files.readAllLines(f.toPath())) {
+ fw.write(replaceVars(project, s));
+ fw.write(System.getProperty("line.separator"));
+ }
+ }
+ return file;
+ }
+
+ static String replaceVars(MavenProject project, String s) {
+ // There must be a better way than enumerating all these?
+ s = s.replaceAll("\\Q${project.groupId}\\E", project.getGroupId());
+ s = s.replaceAll("\\Q${project.artifactId}\\E", project.getArtifactId());
+ s = s.replaceAll("\\Q${project.version}\\E", project.getVersion());
+ return s;
+ }
+
+ private static ArtifactManager getArtifactManager(MavenProject project, MavenSession session)
throws IOException {
List<String> repos = new ArrayList<>();
repos.add(session.getLocalRepository().getUrl());
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 273d119..195883c 100644
--- a/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
+++ b/src/main/java/org/apache/sling/maven/slingstart/GenerateResourcesMojo.java
@@ -16,6 +16,7 @@
*/
package org.apache.sling.maven.slingstart;
+import org.apache.maven.MavenExecutionException;
import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolver;
@@ -29,13 +30,11 @@ import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.plugins.annotations.ResolutionScope;
import org.apache.sling.feature.io.ArtifactManager;
import org.apache.sling.feature.io.ArtifactManagerConfig;
-import org.apache.sling.feature.modelconverter.FeatureToProvisioning;
import org.codehaus.plexus.archiver.manager.ArchiverManager;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
@Mojo(
@@ -72,22 +71,12 @@ public class GenerateResourcesMojo extends AbstractSlingStartMojo {
if (featureFiles == null)
return;
- File targetDir = new File(project.getBuild().getDirectory(), FeatureModelConverter.BUILD_DIR);
- targetDir.mkdirs();
-
try {
- ArtifactManager am = getArtifactManager();
- List<File> files = Arrays.asList(featureFiles);
- for (File f : files) {
- if (!f.getName().endsWith(".json")) {
- continue;
- }
-
- File genFile = new File(targetDir, f.getName() + ".txt");
- FeatureToProvisioning.convert(f, genFile, am, files.toArray(new File[] {}));
- }
- } catch (Exception e) {
- throw new MojoExecutionException("Cannot convert feature files to provisioning model", e);
+ FeatureModelConverter.convert(featureFiles, project, getArtifactManager());
+ } catch (MavenExecutionException e) {
+ throw new MojoExecutionException("Cannot convert feature files to provisioning model.", e);
+ } catch (IOException e) {
+ throw new MojoExecutionException("Problem obtaining artifact manager.", e);
}
}
diff --git a/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java b/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
index fa1d507..55590eb 100644
--- a/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/maven/slingstart/FeatureModelConverterTest.java
@@ -33,6 +33,7 @@ import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -87,8 +88,7 @@ public class FeatureModelConverterTest {
Environment env = new Environment();
env.modelProjects.put("xyz", pi);
- FeatureModelConverter fmc = new FeatureModelConverter();
- fmc.convert(session, env);
+ FeatureModelConverter.convert(session, env);
File expectedFile = new File(tempDir, "/provisioning/converted/boot_gav.json.txt");
assertTrue(expectedFile.exists());
@@ -113,6 +113,7 @@ public class FeatureModelConverterTest {
MavenProject proj = Mockito.mock(MavenProject.class);
Mockito.when(proj.getBasedir()).thenReturn(projBaseDir);
Mockito.when(proj.getBuild()).thenReturn(build);
+ Mockito.when(proj.getGroupId()).thenReturn("generated");
ProjectInfo pi = new ProjectInfo();
pi.project = proj;
@@ -120,8 +121,7 @@ public class FeatureModelConverterTest {
Environment env = new Environment();
env.modelProjects.put("xyz", pi);
- FeatureModelConverter fmc = new FeatureModelConverter();
- fmc.convert(session, env);
+ FeatureModelConverter.convert(session, env);
File simpleProvFile = new File(tempDir, "/provisioning/converted/simple.json.txt");
String simpleProv = new String(Files.readAllBytes(simpleProvFile.toPath()));
@@ -133,4 +133,18 @@ public class FeatureModelConverterTest {
assertTrue(inheritsProv.contains("org.apache.aries/org.apache.aries.util/1.1.3"));
assertTrue(inheritsProv.contains("org.apache.sling/org.apache.sling.commons.log/5.1.0"));
}
+
+ @Test
+ public void testReplaceVars() {
+ MavenProject mp = Mockito.mock(MavenProject.class);
+
+ Mockito.when(mp.getGroupId()).thenReturn("abc");
+ Mockito.when(mp.getArtifactId()).thenReturn("a.b.c");
+ Mockito.when(mp.getVersion()).thenReturn("1.2.3-SNAPSHOT");
+
+ assertEquals("xxxabcyyy", FeatureModelConverter.replaceVars(mp,
+ "xxx${project.groupId}yyy"));
+ assertEquals("xxxabcyyya.b.c1.2.3-SNAPSHOT", FeatureModelConverter.replaceVars(mp,
+ "xxx${project.groupId}yyy${project.artifactId}${project.version}"));
+ }
}
diff --git a/src/test/resources/features3/src/main/features/simple_inherits.json b/src/test/resources/features3/src/main/features/simple_inherits.json
index 02c4e20..04a3734 100644
--- a/src/test/resources/features3/src/main/features/simple_inherits.json
+++ b/src/test/resources/features3/src/main/features/simple_inherits.json
@@ -1,5 +1,5 @@
{
- "id":"generated:simple-inherits:1.0.0",
+ "id":"${project.groupId}:simple-inherits:1.0.0",
"includes": [
{
"id": "generated:simple:1.0.0"
--
To stop receiving notification emails like this one, please contact
davidb@apache.org.